Home

 

Linux::FAQ en Oplossingen

In deze sectie aantekeningen over uitgevoerde projecten.

Naar index

Extra harde schijf toevoegen

  1. Monteer extra harde schijf, start PC en verifieer herkenning in de BIOS
  2. Start ClearOS systeem en controleer Linux herkenning via PuTTY:
    # dmesg (opstartlog)
  3. Maak partitie op extra schijf (in dit voorbeeld de derde HDD: 'sdc').
    # fdisk /dev/sdc
    kies optie : n (nieuw)
    kies  : primair  
    kies  : 1 (voor sdc1)
    specificeer start en eindblok of selecteer geboden defaults
    kies optie : w (write/opslaan)
  4. Formatteer partitie
    # mkfs -t ext3 /dev/sdc1
  5. Maak een directory aan in de root (in voorbeeld 'vault' genoemd) met beperkte rechten voor usergroep 'backup' en geen enkele voor 'iedereen'
    # mkdir /vault
    # chmod 750 /vault
    # chown root:backup /vault
  6. Voeg een instructie toe aan '/etc/fstab' voor het koppelen van '/vault' aan sdc1:
    /dev/sdc1 /vault ext3 defaults 1 2
    Zie ook fstab wiki
  7. Voer de fstab mount uit:
    # mount -a
  8. In het voorbeeld is het de bedoeling dat samba user 'backup' de door root in '/vault' geplaatste backups kan lezen en kopieren. Dit kan vrij eenvoudig geregeld worden door een symbolic link te plaatsen in de samba share '/home/backup'. Zie ook sectie Samba: Samba Network File Server
    # cd /home/backup
    # ln -s /vault

Naar index

Verhuizen van bijvoorbeeld /HOME naar eigen partitie of andere HDD

  1. Zie sectie Extra harde schijf toevoegen items 1 t/m 4 voor het aanmaken van een partitie (in dit voorbeeld 'sdc2')
  2. CD naar root, maak directory '/newhome' en koppel deze aan 'sdc2':
    # cd /
    # mkdir /mnt/newhome
    # mount -t ext3 /dev/sdc2 /mnt/newhome
  3. Kopieer de inhoud van '/home' directory naar '/mnt/newhome' op de nieuwe partitie
    Omdat de '/home' directory hardlinks, softlinks, bestanden en geneste directories kan bevatten zal een gewone copy 'cp' de taak misschien niet compleet uitvoeren. Het is beter het commando 'cpio' te gebruiken.
    Zie hiervoor ook: http://www.gnu.org/software/cpio/manual/cpio.pdf
    # cd /home/
    # find . -depth -print0 | cpio --null --sparse -pvd /mnt/newhome
    # cd /

    Zie kader 'cpio' voor uitleg van gebruikte opties
  4. Verifieer dat alles correct gecopieerd is.
  5. Ontkoppel de nieuwe partitie 'sdc2':
    # umount /mnt/newhome
  6. Ontkoppel /home. Omdat deze aktief is moet deze 'losgewerkt' worden van het systeem. Dit wordt gedaan met optie -l (lazy)
    # umount -l /home
  7. Hernoem de losgemaakte /home naar '/oldhome' en maak een nieuwe /home aan
    # mv /home /oldhome
    # mkdir /home
  8. Nu kan de nieuwe /home gekoppeld worden aan 'sdc2'
    # mount /dev/sdc2 /home
  9. Maak deze mount automatisch door de volgende regel toe te voegen aan /etc/fstab:
    /dev/sdc2 /home ext3 defaults 1 2
  10. Voer fstab uit:
    # mount -a
  11. Reboot linux en check dat alles werkt.
  12. Verwijder '/oldhome' en '/mnt/newhome'

Naar index

CPIO (item 3) # find . -depth -print0 | cpio --null --sparse -pvd /mnt/newhome
find . : Zoek bestanden in in de huidige directory hierarchie
-depth  : Verwerk inhoud van elke directory vóór de directory zelf
-print0 : Print elke complete bestandsnaam naar de standaard uitvoer gevolgd door een nul (inplaats van het standaard 'newline' teken)
| cpio  : Piping van uitvoer naar commando cpio. cpio kopieert de directory tree te beginnen met de huidige directory
--null : Zie -print0 hierboven: Deze twee opties werken samen tussen find en cpio zelfs als bestandsnamen speciale tekens bevatten
--sparse : Schrijf bestanden met grote blokken met nullen als sparse bestanden
-pvd : (p) pass-through, geef door naar /mnt/newhome, (d) creëer directories als nodig en (v) verbose, toon uitvoer op scherm

Naar index

/HOME van aparte partitie terugzetten naar systeempartitie 'sda1'

Het terugzetten van '/home' wordt als voorbeeld gebruikt. Kan uitgevoerd worden met elk koppelpunt dat tot nu toe een eigen partitie heeft.

  1. Maak een directory 'newhome' in de root:
    # mkdir /newhome
    Zorg dat op sda1 nog voldoende ruimte is voor het datavolume van '/home'
  2. Kopieer de inhoud van '/home' naar '/newhome':
    # find . -depth -print0 | cpio --null --sparse -pvd /newhome
    Zie voor uitleg kader CPIO
  3. Verwijder regel uit '/etc/fstab' betreffende koppelpunt van '/home'
  4. Ontkoppel '/home'. Omdat deze aktief is moet deze 'losgewerkt' worden van het systeem. Dit wordt gedaan met optie -l (lazy)
    # umount -l /home
  5. Maak plaats voor nieuwe home:
    # rmdir /home
  6. Plaats nieuwe /home:
    # mv /newhome /home
  7. Run aangepaste fstab:
    # mount -a
  8. De oorspronkelijke aparte partitie van '/home' (in voorbeeld vorige sectie was dat 'sdc2') kan nu verwijderd of leeggemaakt/geformatteerd worden.

Naar index

Wijzig grootte van Partitie and Filesysteem met behoud van data

Het verkleinen en vergroten van een partitie en het bijbehorende bestandssysteem met daarin data is mogelijk met e2fsck. resize2fs en fdisk.
Zie optioneel # man resize2fs

Belangrijk:

Voor navolgende voorbeelden hebben we de drive /dev/sdc van de testserver gebruikt.
Deze harddisk van 500GB heeft 1 partitie sdc1 met een bestandsysteem van 459G. Hiervan is 169G in gebruik met data.

[root@testserver ~]# df -h
Bestandssysteem       Grtte Gebr Besch Geb% Aangekoppeld op
/dev/sda1             9,5G  442M  8,6G   5% /
/dev/sda2              28G  1,3G   25G   5% /usr
/dev/sda3              92G  1,8G   86G   2% /var
/dev/sdb1             459G  169G  268G  39% /home
/dev/sdc1             459G  169G  267G  39% /vault
tmpfs                 2,0G     0  2,0G   0% /dev/shm

Er zijn geen vrije cilinders/sectoren aan het einde van de schijf en vergroten is dus niet mogelijk. Daarom laten we eerst het verkleinen als voorbeeld zien.

Naar index

Verklein partitie met behoud van data

We gaan de partitie met het bestandssysteem /dev/sdc1 verkleinen van 459G naar +/- 300G. Er blijft dan voldoende vrije ruimte voor de data.

1. Unmount het bestandssysteem en verifiëer

[root@testserver ~]# umount /dev/sdc1
[root@testserver ~]# df -h
Bestandssysteem       Grtte Gebr Besch Geb% Aangekoppeld op
/dev/sda1             9,5G  442M  8,6G   5% /
/dev/sda2              28G  1,3G   25G   5% /usr
/dev/sda3              92G  1,8G   86G   2% /var
/dev/sdb1             459G  169G  268G  39% /home
tmpfs                 2,0G     0  2,0G   0% /dev/shm

2. Run e2fsck op /dev/sdc1
Het eerst uitvoeren van deze check van het bestandssyteem is een vereiste voor het hierna volgende resize2fs.
WARNING!!! Running e2fsck on a mounted filesystem may cause SEVERE filesystem damage.

[root@testserver ~]# e2fsck -f /dev/sdc1
e2fsck 1.39 (29-May-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sdc1: 167085/61063168 files (15.8% non-contiguous), 46216404/122096000 blocks

3. Resize het bestandssyteem met resize2fs
Nu kan het bestandssysteem verkleind worden naar 300G

[root@testserver ~]# resize2fs /dev/sdc1 300G
resize2fs 1.39 (29-May-2006)
Resizing the filesystem on /dev/sdc1 to 78643200 (4k) blocks.
Het bestandssysteem op /dev/sdc1 is nu 78643200 blokken groot.

Let op: Het eindresultaat is 78643200 blocks van 4k of te wel 314,6G. Omdat de partitie ook nog de nodige superblocks moet bevatten moeten we ook nog rekenen op 3%-5% ruimteverlies. Maak daarom de partitie niet kleiner dan 314,6G + 5% = 330G

4. Delete de partitie
Om de partitie te wijzigen moeten we deze eerst deleten en dan een nieuwe creëren.
Check eerst wat de eerste cilinder van de huidige partitie is, dit hebben we nodig voor het aanmaken van de nieuwe partitie.

[root@testserver ~]# fdisk /dev/sdc

Het aantal cylinders van deze schijf is ingesteld op 60801.
Hier is niets mis mee, maar het is groter dan 1024, en
kan met bepaalde instellingen problemen veroorzaken met:
1) software die werkt bij het opstarten (bijv. oude versies van LILO)
2) opstart- en partitioneringssoftware van andere besturings-
   systemen, zoals DOS FDISK en OS/2 FDISK

Opdracht (m voor hulp): p

Schijf /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Eenheden = cylinders van 16065 * 512 = 8225280 bytes

 Apparaat Boot      Start         Einde    Blokken  Id  Systeem
/dev/sdc1               1       60801   488384001   83  Linux

Opdracht (m voor hulp): d
Geselecteerde partitie 1

Opdracht (m voor hulp): p

Schijf /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Eenheden = cylinders van 16065 * 512 = 8225280 bytes

 Apparaat Boot      Start         Einde    Blokken  Id  Systeem

Opdracht (m voor hulp): w
De partitietabel is gewijzigd!

Aanroepen ioctl() om partitietabel opnieuw in te lezen.
Synchroniseren schijven.

5. Creëer nieuwe (kleinere) partitie

Niet kleiner dan 330G zoals uitgelegd in punt 3! Bij een te kleine partitie zal de systeemboot crashen.
Zorg ervoor dat de eerste cilinder dezelfde blijft, zijnde het ankerpunt van het bestandssysteem en de data hierin.


[root@testserver ~]# fdisk /dev/sdc

Opdracht (m voor hulp): n
Opdracht actie
   e   uitgebreid
   p   primaire partitie (1-4)
p
Partitienummer (1-4): 1
Eerste cylinder (1-60801, standaard 1): 1
Laatste cylinder of +size of +sizeM of +sizeK (1-60801, standaard 60801): +330G

Opdracht (m voor hulp): p

Schijf /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Eenheden = cylinders van 16065 * 512 = 8225280 bytes

 Apparaat Boot      Start         Einde    Blokken  Id  Systeem
/dev/sdc1               1       40121   322271901   83  Linux

Opdracht (m voor hulp): w
De partitietabel is gewijzigd!

Aanroepen ioctl() om partitietabel opnieuw in te lezen.
Synchroniseren schijven.

Deze nieuwe partitie gebruikt nu van de 60801 cilinders op de harde schijf de eerste 40121 cilinders en blijven er aan het einde nog 20680 cilinders beschikbaar voor een extra partitie.

6. Reboot het systeem
We zouden de partitie nu kunnen mounten met het # mount commando, maar het is beter een reboot te doen omdat dan direct aan het licht komt of alles goed is gegaan. Als we de partitie bijvoorbeeld toch nog te klein hebben gemaakt zal de boot crashen en moeten we de zaak oplossen door een monitor en keyboard op de server aan te sluiten.
Note: In dit geval zijn de data niet verloren! Blijf rustig en voer op de monitor van de server onderstaand voorbeeld uit van het vergroten van de partitie, te beginnen bij punt 2.

Na een succesvolle reboot lezen we de bestandssystemen uit

[root@testserver ~]# df -h
Bestandssysteem       Grtte Gebr Besch Geb% Aangekoppeld op
/dev/sda1             9,5G  446M  8,6G   5% /
/dev/sda2              28G  1,3G   25G   5% /usr
/dev/sda3              92G  1,8G   86G   2% /var
/dev/sdb1             459G  169G  268G  39% /home
/dev/sdc1             296G  169G  112G  61% /vault
tmpfs                 2,0G     0  2,0G   0% /dev/shm

Naar index

Vergroot partitie met behoud van data

We gaan de hierboven verkleinde partitie met het bestandssysteem /dev/sdc1 (terug) vergroten naar de volle schijfcapaciteit.

1. Unmount het bestandssysteem en verifiëer

[root@testserver ~]# umount /dev/sdc1
[root@testserver ~]# df -h
Bestandssysteem       Grtte Gebr Besch Geb% Aangekoppeld op
/dev/sda1             9,5G  446M  8,6G   5% /
/dev/sda2              28G  1,3G   25G   5% /usr
/dev/sda3              92G  1,8G   86G   2% /var
/dev/sdb1             459G  169G  268G  39% /home
tmpfs                 2,0G     0  2,0G   0% /dev/shm

2. Delete de partitie.
Om de partitie te wijzigen moeten we deze eerst deleten en dan een nieuwe creëren.
Check eerst wat de eerste cilinder van de huidige partitie is, dit hebben we nodig voor het aanmaken van de nieuwe partitie.

[root@testserver ~]# fdisk /dev/sdc

Opdracht (m voor hulp): p

Schijf /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Eenheden = cylinders van 16065 * 512 = 8225280 bytes

 Apparaat Boot      Start         Einde    Blokken  Id  Systeem
/dev/sdc1               1       40121   322271901   83  Linux

Opdracht (m voor hulp): d
Geselecteerde partitie 1

Opdracht (m voor hulp): p

Schijf /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Eenheden = cylinders van 16065 * 512 = 8225280 bytes

 Apparaat Boot      Start         Einde    Blokken  Id  Systeem

Opdracht (m voor hulp): w
De partitietabel is gewijzigd!

Aanroepen ioctl() om partitietabel opnieuw in te lezen.
Synchroniseren schijven.

3. Creëer nieuwe (grotere) partitie

Zorg ervoor dat de eerste cilinder dezelfde blijft, zijnde het ankerpunt van het bestandssysteem en de data hierin.


[root@testserver ~]# fdisk /dev/sdc

Opdracht (m voor hulp): n
Opdracht actie
   e   uitgebreid
   p   primaire partitie (1-4)
p
Partitienummer (1-4): 1
Eerste cylinder (1-60801, standaard 1): 1
Laatste cylinder of +size of +sizeM of +sizeK (1-60801, standaard 60801):
Standaardwaarde 60801 wordt gebruikt

Opdracht (m voor hulp): p

Schijf /dev/sdc: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Eenheden = cylinders van 16065 * 512 = 8225280 bytes

 Apparaat Boot      Start         Einde    Blokken  Id  Systeem
/dev/sdc1               1       60801   488384001   83  Linux

Opdracht (m voor hulp): w
De partitietabel is gewijzigd!

Aanroepen ioctl() om partitietabel opnieuw in te lezen.
Synchroniseren schijven.

Deze nieuwe partitie gebruikt nu van de 60801 cilinders op de harde schijf de eerste 40121 cilinders en blijven er aan het einde nog 20680 cilinders beschikbaar voor een extra partitie.

4. Run e2fsck op /dev/sdc1
Het eerst uitvoeren van deze check van het bestandssyteem is een vereiste voor het hierna volgende resize2fs.
WARNING!!! Running e2fsck on a mounted filesystem may cause SEVERE filesystem damage.

[root@testserver ~]# e2fsck -f /dev/sdc1
e2fsck 1.39 (29-May-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sdc1: 167085/39321600 files (15.8% non-contiguous), 45532276/78643200 blocks

5. Resize het bestandssyteem met resize2fs
Nu kan het bestandssysteem vergroot worden naar de capaciteit van de partitie.
Als geen grootte ingevoerd wordt wordt de hele capaciteit van de partitie benut.

[root@testserver ~]# resize2fs /dev/sdc1
resize2fs 1.39 (29-May-2006)
Resizing the filesystem on /dev/sdc1 to 122096000 (4k) blocks.
Het bestandssysteem op /dev/sdc1 is nu 122096000 blokken groot.

6. Mount partitie en check

[root@testserver ~]# mount /dev/sdc1 /vault
[root@testserver ~]# df -h
Bestandssysteem       Grtte Gebr Besch Geb% Aangekoppeld op
/dev/sda1             9,5G  446M  8,6G   5% /
/dev/sda2              28G  1,3G   25G   5% /usr
/dev/sda3              92G  1,8G   86G   2% /var
/dev/sdb1             459G  169G  268G  39% /home
tmpfs                 2,0G     0  2,0G   0% /dev/shm
/dev/sdc1             459G  169G  267G  39% /vault

Naar index

Externe HDD aansluiten met USB

  1. Sluit externe HDD aan op een USB poort
  2. # dmesg -> Zie aan het einde wat het nieuwe device is. Zoek naar een regel met iets als: sd 4:0:0:0: Attached scsi disk sdd . In ons voorbeeld is het nieuwe device dus 'sdd1'
  3. Mount device sdd1:
    # cd /
    # mkdir /mnt/usb-hdd
    # mount -t ext3 /dev/sdd1 /mnt/usb-hdd

    of als het een HDD met NTFS is
    :
    # mount -t ntfs /dev/sdd1 /mnt/usb-hdd
    In dit laatste geval moet er wel een driver voor het NTFS bestandssysteem geïnstalleerd zijn (automatisch geïnstalleerd op Ubuntu Server)

Naar index

Draai Piwigo met de backup in /VAULT

Piwigo op mijn server slaat de data (foto's) op in /home/pwgdata en beheert deze data in de MySQL-MariaDb database 'piwigo'. Met behulp van een CRON maakt de server dagelijks een volledige backup van de directory '/home/pwgdata' en een dump van de MySQL database en deze worden weggeschreven naar /vault/piwigo/pwgdata. Zie hiervoor ook Piwigo::Backup.
Voor een restore van de Piwigo (foto)data moet zowel de complete ‘pwgdata’ directorie als de MariaDB ‘piwigo’ database teruggezet worden. Het is hierbij belangrijk dat beide op het zelfde moment gemaakt zijn, wat in dit geval door de dagelijkse backup gegarandeerd wordt.
Let op!!: Het is ook mogelijk Gallery op de testserver te 'klonen' met de backup van de mainserver (of omgekeerd).

Gebruik /vault als pwgdata vervanger van /home
In mijn webserver hebben zowel de /home als de /vault een eigen harde schijf. In het geval de harde schijf met de /home directory crashed of ernstig corrupt is, kan Piwigo vrij snel weer in de lucht gebracht worden door te switchen naar 'pwgdata' in de backup op /vault.

  1. Voor een restore is het beter te zorgen dat het oude bestand verwijderd is.
  2. Als het PIWIGO programma zelf nog wel werkt is het niet nodig deze te vervangen door de backup uit /vault.
  3. Om een restore te doen van PIWIGO is het voldoende de huidige lege of corrupte /home/pwgdata directories /_data, /galleries, /update, template-extensions en /local te verwijderen en te vervangen door hun respectievelijke laatste backups in /vault/piwigo/pwgdata
    Note:
    Door het grote datavolume van vooral de directorie 'galleries' zal dit kopieren erg lang duren. Als tussenoplossing kunnen we in dit stadium Piwigo laten draaien op de 'pwgdata'in de vault. Zie 'Overschakelen naar Vault' hieronder.
  4. Vervolgens moet de Piwigo database hersteld worden. Voer onderstaande commando's uit voor het droppen van de oude MariaDB piwigo database en het importeren van de sql-dump in de backup:
    a. cd naar /vault/piwigo/pwgdata/dbase_dump met het laatste goede bestand 'piwigo-dump.sql'
    b. # mysqladmin -uroot -p'' drop piwigo (verwijdert de oude 'piwigo')
    c. # mysql -uroot -p'' < piwigo-dump.sql (importeert de backup 'piwigo') Hiermee is PiWiGo weer (tijdelijk) hersteld naar de situatie van de laatste backup.

Overschakelen naar Vault
In Piwigo hebben we SYMBOLIC LINKS gebruikt om de data op te slaan buiten de webroot in /home/pwgdata. Om snel in de lucht te zijn kunnen we in plaats van bovenstaande stap 3 eerst in het piwigo programma de symbolic links naar de probleembestanden verwijderen en deze vervangen met symbolic links naar de backups in Vault.

Bijvoorbeeld voor ../piwigo/galleries:
a. # cd /var/www/html/piwigo
b. # unlink galleries
c. # ln -s /vault/piwigo/pwgdata/galleries galleries
d. Doe hetzelfde met _data, upload, template-extension en local.

Herstel nu de database zoals omschreven in bovenstaande stap 4. En op deze manier is Piwigo weer beschikbaar.

Tijdelijk!
Nu hebben we de server weer 'up and running' met Gallery maar hebben we nog niet alles opgelost. De gecrashte op gecorrumpteerde schijf moet zo spoedig mogelijk hersteld of vervangen worden. Tot die tijd is het belangrijk dat de automatische backup met CRON naar /vault niet uitgevoerd wordt. doe dit met # crontab -e

Uiteindelijk herstel
Kopiëer de fysieke backupbestanden naar Piwigo met een andere naam, bijvoorbeeld:
# cp -aR /vault/piwigo/pwgdata/galleries /home/pwgdata/bck-galleries
Op dezelfde manier kopiëren we _data, upload, template-extension en local.

Vervolgens stoppen we Piwigo en verwijderen we de symbolic links:
# unlink galleries
Zo ook voor _data, upload, template-extension en local

Als alle links verwijderd zijn hernoemen we de fysieke bestanden:
# rename bck-galleries galleries bck-galleries
Zo ook voor bck_data, bck-upload, bck-template-extension en bck-local

Herstel nu de oorspronkelijke symbolic links naar de data in /home/pwgdata
# ln -s /home/pwgdata/galleries galleries
Opnieuw ook voor _data, upload, template-extension en local
Hiermee is PiWiGo weer hersteld naar de situatie van de laatste backup!

Naar index

Downloadpagina met behulp van PHP

Hoe browsers omgaan met download bestanden
Als een gebruiker naar de URL van een bestand gaat (bijvoorbeeld een download link) dan zal dit bestand in de browser getoond worden als de browser dit bestandstype ondersteund. Imagebestanden zoals jpg, png, gif, etc zullen bijna altijd in de browser getond worden. Archief bestanden zoals zip, tar, gzip, etc. daarentegen zullen altijd gedownload worden. Sommige bestanden worden getoond in bepaalde browsers en niet bij anderen afhankelijk of de browser het bestand kan lezen. Internet Explorer zal bijvoorbeeld gewoonlijk proberen MS Word in de browser te openen, terwijl de meeste andere browsers het zullen downloaden. Google Chrome heeft zijn eigen pdf converter en zal proberen pdf bestanden om te zetten om ze te laten zien in de browser.
Of een browser een bestand kan lezen is ook afhankelijk van eventuele add-on's geïnstalleerd door de gebruikers.
Als een browser het bestand kan lezen wordt deze getoond, maar als de browser het niet kan lezen dan zal deze een download naar de harde schijf forceren.

Hoe kan een download geforceerd worden voor alle bestandtypen
Op deze server heb ik een download directory aangemaakt. Hierin kunnen mappen met bestanden geplaatst worden die beschikbaar zijn voor download.

In het configuratiebestand van de http server staat per default de instelling van 'Indexes' uit, om te voorkomen dat een browser de directory listing toont als er geen automatisch opstartbestand zoals 'index.htm' voorkomt. De gebruiker zal in dit geval de door mij beschikbaar gestelde bestanden niet zien. Zie hiervoor op deze site: Server::Apache > Apache Configureren > mydirectives.conf
Bij de downloadmap willen we juist dat de directorylisting wel getoond wordt zodat bestanden geselecteerd kunnen worden. Dit kan door middel van een speciale directive 'Options +Indexes' voor de downloadmap.
Ondanks dat de mappen en bestanden door elkaar staan wordt wel een complete listing van aangeboden bestanden getoond. Als op een map geklikt wordt dan opent deze met op zijn beurt weer een listing van de mapinhoud. Als een bestand geselecteerd wordt dan doet zich echter het hierboven bechreven probleem voor en wordt het bestand of geopend of gedownload.

Het meest eenvoudige om een bestand toch als download aan te laten bieden is door het bestand in te pakken in een archief zoals zip en tar.
Maar zelfs dan is de downloadpagina zeer basic zonder enkele vorm van layout en design.

De PHP METHODE
Hieronder volgt een voorbeeld zoals ik het op deze site opgelost heb gebruikmakend van PHP.
De toelichting is hierbij gesplitst in de volgende onderdelen:

Naar index

Downloadpagina van layout voorzien
Om te beginnen wordt een html gemaakt met de gewenste layout. Zie hier een eenvoudig voorbeeld.
In dit stadium is nog geen PHP aanwezig en is daarom het venster waar de downloads getoond zullen gaan worden nog leeg.
Om de mappen en bestanden te tonen en te navigeren door eventuele (sub)directories en hierin een bestand te kunnen selecteren en aan te bieden voor download wordt nu PHP gebruikt. Om te beginnen wijzigen we hiervoor de extentie van de pagina van .html naar .php

Hieronder volgt een nadere uitleg en documentatie van het PHP proces.
Klik hier om de complete PHP-download code te bekijken en eventueel af te drukken

Naar index

Directory listing met PHP
Variabelen definieren:

Directory listing halen:

Sorteer directory listing in de array: eerst directories en daarna alfabetisch.

Tel het aantal gevonden bestanden

Naar index

HTML voor Tabel samenstellen met PHP

In het geval er geen bestanden gevonden zijn zal de tabel er ongeveer als volgt uitzien:

Downloads

BestandsnaamGewijzigd opGrootte Kb
 

Op het moment zijn er helaas geen downloadbestanden beschikbaar
Probeer het later nog eens of neem contact met mij op

Naar index

Verzamel tabelvariabelen met loop door bestanden

Naar index

Vul tabel rij voor rij met verzamelde output

Naar index

Download bestand met force.php

In de voorgaande secties hebben we gezien dat indien een element geen directory is en dus een bestand dat deze een link krijgt om down te loaden.
Als een gebruiker deze download link aanklikt dan zou dit bestand echter in de browser getoond worden als de browser dit bestandstype ondersteund. Om een download te forceren wordt daarom de url als argument doorgestuurd naar het php-script force.php

<?php
$file = ($_GET['f']);

header('Cache-Control: public, must-revalidate, max-age=0');
header('Pragma: no-cache');
// voor .basename() moeten eventuele spaties in $file verwijderd of omgezet worden
header("Content-disposition: attachment; filename=".basename(str_replace(' ', '_', $file)));
header("Content-type: application/octet-stream");
header('Content-Transfer-Encoding: binary');
header('Expires: 0');

ob_clean();
flush();

readfile("$file");
?> 

Naar index

Data uitwisselen tussen Linux machines op het zelfde netwerk

SSH Protocol
Secure Shell (kortweg: SSH) is een protocol uit de toepassingslaag van de TCP/IP-protocolgroep.SSH maakt het mogelijk om op een versleutelde manier in te loggen op een andere computer, en op afstand commando's op de andere computer uit te voeren via een shell. Omdat ssh met encryptie werkt, is het voor eventuele afluisteraars, die de (internet)verbinding aftappen, zo goed als onmogelijk om wachtwoorden of commando's te achterhalen.

Voorbeelden van netwerkcommunicatie tussen Mainserver en Testserver
Machines:
Mainserver IP:192.168.1.xxx
Testserver IP:192.168.1.yyy

Taken:
1. Haal op testserver bestandslijst van mainserver
2. Kopieer op testserver bestanden van de mainserver (ontvangen)
3. Kopieer op testserver bestanden naar de mainserver (zenden)

Met SSH bestandslijst ophalen van Linux share op netwerk
Voer commando uit op testserver om bestandslijst op te halen van de mainserver:

# ssh root@192.168.1.155 ls -l /var/www/html/

Er zal naar het wachtwoord van Mainserver-root gevraagd worden. Zie ook Commando's > SSH

Met Secure Copy bestanden van de Mainserver halen
Voer commando's uit op de testserver (-r voor recursive).
Als bestanden op bestemming al bestaan worden deze overschreven!

# scp -r root@192.168.1.155:/vault/g2data /home/
of
# cd /home
# scp -r root@192.168.1.155:/vault/g2data .

Er zal in beide gevallen naar het wachtwoord van Mainserver-root gevraagd worden. Zie ook Commando's > SCP

Met Secure Copy bestanden naar de Mainserver sturen
Voer commando's uit op de testserver.
Als bestanden op bestemming al bestaan worden deze overschreven!

# scp -r /vault/g2data/ root@192.168.1.155:/vault/

Er zal naar het wachtwoord van Mainserver-root gevraagd worden. Zie ook Commando's > SCP

Naar index

Netwerkkaart toevoegen/vervangen

In de BIOS moet PnP enabled zijn

  1. Verwijder de Network Interface Card (NIC), bijvoorbeeld 'eth1'
  2. Boot en stel vast dat het systeem de NIC mist
  3. # shutdown (dus niet power uit!).
  4. Installeer de kaart en boot
  5. Als de NIC niet automatisch geladen wordt zoek dan in /etc/sysconfig/network-scripts naar bestand 'ifcfg-eth1'
  6. Als dit bestand niet bestaat maak het dan aan:
    # touch /etc/sysconfig/network-scripts/ifcfg-eth1
  7. Het bestand moet minstens de volgende regels bevatten:
    DEVICE=eth1
    TYPE="Ethernet"
    ONBOOT="yes"
    USERCTL="no"
    BOOTPROTO="static"
    IPADDR="192.168.1.50" (gewenste vaste IP van NIC)
    NETMASK="255.255.255.0"
    GATEWAY="192.168.1.254"
  8. Herstart netwerk:
    # service network restart

Naar index

Server verhuizen naar ander netwerk

Als de server verhuisd wordt naar een ander netwerk is de kans groot dat de IP range van dat 'nieuwe' netwerk afwijkt van de range waarvoor de server geconfigureerd is.
Als gevolg hiervan zullen onderdelen van de configuratie van de firewall, samba, etc met 'hard-coded' IP's resulteren in blokkades.

Zie ook Server::Utility Scripts > Extra Utilitiescripts > IP-update na verhuizing naar router met andere ip-range

Voorbeelden van de Mainserver-configuraties met 'hard-coded' IP's

  1. Firewall
    Zie Server::Firewall > Benodigde open inkomende verbindingen

    Om toegang tot specifieke poorten te beperken worden deze alleen open gezet voor clienten in het lokale netwerk zoals bijvoorbeeld voor phpMyAdmin de rule:
    # ufw allow from 192.168.178.0/26 to any port 81

    Bovenstaande houdt in dat alleen voor de "hard-coded" IP's tussen 192.168.178.0 en .63 port 81 open staat.
    Door in mijn thuisnetwerk op de router de DHCP pool in te stellen boven IP 192.168.178.63, zullen clienten die via DHCP een IP-adres krijgen geen toegang krijgen tot poort 81.
    Dat houdt dat alleen "trusted IP's" met door de beheerder op de router ingestelde IP reservering toegang krijgen tot poort 81. Zie ook meer hierover in Server::Samba > Beperking toegang tot 'trusted-IP's'

  2. Samba fileserver
    Zie Server::Samba > Samba Network Server met in in de sambaconfiguratie de toevoeging hosts allow = 192.168.178.0/26
    Ook hier worden alleen netwerkclienten toegelaten met IP's tussen 192.168.178.0 en 63

  3. Hosts bestand
    Eenvoudig gezegd is het bestand /etc/hosts een bestand met platte tekst dat door het besturingssysteem wordt gebruikt om hostnamen naar IP-adressen te vertalen. Het systeem zal altijd eerst het hosts-bestand controleren en alles wat niet in het hosts-bestand is gedefinieerd, wordt opgezocht op de DNS-servers die zijn gedefinieerd in de netwerkinstellingen.

    Op de homeserver ziet het hosts bestand er als volgt uit:
    127.0.0.1 localhost
    127.0.1.1 homeserver
    192.168.178.4 mainserver.makkink.eu mainserver
    192.168.178.5 homeserver.makkink.eu homeserver
    192.168.178.10 pi-nas
    192.168.178.11 pi-nas
    192.168.178.2 ben-pc
    192.168.178.14 erica
    192.168.178.15 benovo
    192.168.178.24 hp6234

    # The following lines are desirable for IPv6 capable hosts
    ::1 ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters


    Opnieuw allemaal "hardcoded IP's" die niet meer zullen kloppen als de Mainserver in een ander netwerk geplaatst wordt.

Waar moeten IP's in de diverse configuraties gecorrigeerd worden?

Om vast te stellen waar deze hard-coded IP's voorkomen gebruiken we het commando #grep bijvoorbeeld:
# grep -rnw '/etc' -e '192.168.178'

Op de homeserver resulteert dit bijvoorbeeld in:

/etc/ufw/user.rules:27:### tuple ### allow any 10000 0.0.0.0/0 any 192.168.178.0/26 in
/etc/ufw/user.rules:28:-A ufw-user-input -p tcp --dport 10000 -s 192.168.178.0/26 -j ACCEPT
/etc/ufw/user.rules:29:-A ufw-user-input -p udp --dport 10000 -s 192.168.178.0/26 -j ACCEPT
/etc/ufw/user.rules:31:### tuple ### allow any 22 0.0.0.0/0 any 192.168.178.0/26 in
/etc/ufw/user.rules:32:-A ufw-user-input -p tcp --dport 22 -s 192.168.178.0/26 -j ACCEPT
/etc/ufw/user.rules:33:-A ufw-user-input -p udp --dport 22 -s 192.168.178.0/26 -j ACCEPT
/etc/ufw/user.rules:43:### tuple ### allow udp 137 0.0.0.0/0 any 192.168.178.0/26 in
/etc/ufw/user.rules:44:-A ufw-user-input -p udp --dport 137 -s 192.168.178.0/26 -j ACCEPT
/etc/ufw/user.rules:58:### tuple ### allow any 81 0.0.0.0/0 any 192.168.178.0/26 in
/etc/ufw/user.rules:59:-A ufw-user-input -p tcp --dport 81 -s 192.168.178.0/26 -j ACCEPT
/etc/ufw/user.rules:60:-A ufw-user-input -p udp --dport 81 -s 192.168.178.0/26 -j ACCEPT
/etc/ufw/user.rules:62:### tuple ### allow any 8200 0.0.0.0/0 any 192.168.178.0/24 in
/etc/ufw/user.rules:63:-A ufw-user-input -p tcp --dport 8200 -s 192.168.178.0/24 -j ACCEPT
/etc/ufw/user.rules:64:-A ufw-user-input -p udp --dport 8200 -s 192.168.178.0/24 -j ACCEPT
/etc/ufw/user.rules:66:### tuple ### allow any 1900 0.0.0.0/0 any 192.168.178.0/24 in
/etc/ufw/user.rules:67:-A ufw-user-input -p tcp --dport 1900 -s 192.168.178.0/24 -j ACCEPT
/etc/ufw/user.rules:68:-A ufw-user-input -p udp --dport 1900 -s 192.168.178.0/24 -j ACCEPT
/etc/samba/smb.conf:252:        hosts allow = 192.168.178.0/26
/etc/samba/smb.conf:268:        hosts allow = 192.168.178.2
/etc/samba/smb.conf:281:        hosts allow = 192.168.178.2
/etc/samba/smb.conf:294:        hosts allow = 192.168.178.2 192.168.178.15 192.168.178.37
/etc/apache2/conf-available/mydirectives.conf:16:        Require ip 192.168.178.0/24
/etc/apache2/conf-available/mydirectives.conf:26:       RewriteRule ^(.*)$ https://192.168.178.5/$1 [R,L]
/etc/apache2/conf-available/awstats.conf:17:        Require ip 192.168.178.0/24
/etc/apache2/conf-available/awstats.conf:22:        Allow from 192.168.178.0/24
/etc/hosts:3:192.168.178.4 mainserver.makkink.eu mainserver
/etc/hosts:4:192.168.178.5 homeserver.makkink.eu homeserver
/etc/hosts:5:192.168.178.10 pi-nas
/etc/hosts:6:192.168.178.11 pi-nas
/etc/hosts:7:192.168.178.2 ben-pc
/etc/hosts:8:192.168.178.14 erica
/etc/hosts:9:192.168.178.15 benovo
/etc/hosts:10:192.168.178.24 hp6234

Uit bovenstaande kunnen we dus afleiden in welke bestanden de IP's gecorrigeerd moeten worden naar het IP adres van de nieuwe router.
Als de IP range van de nieuwe router bijvoorbeeld 192.168.1.0/24 is moeten we in bovenstaande bestanden alle voorkomens van 192.168.178 wijzigen naar 192.168.1

IP Update door middel van script

SSH toegang:
Om het script uit te kunnen voeren is het essentiëel dat er met een PC in het nieuwe netwerk een SSH verbinding, m.b.v. bijv. puTTY, gemaakt kan worden met de server.
Daarom moet de firewall alle clienten in het thuisnetwerk, waarin de server opgenomen wordt, toegang verlenen tot poort 22
Zie Server::Firewall > Benodigde open inkomende verbindingen, dus hier als het even kan geen "hard-coded" IP's gebruiken! Risico: SSH is niet afgeschermd!
Mocht er toch een "hardcoded" IP gebruikt zijn dan rest niets anders dan de server te voorzien van keyboard en monitor en vervolgens de firewall uit te schakelen met het commando: # systemctl stop ufw

Script # 'server-ipupdate'
Voor het eenvoudig updaten van de IP's na een router-wissel heb ik een script 'server-ipupdate' geschreven.
Dit script maakt gebruik van een referentie bestand /usr/local/server-netips dat de IP's bevat zoals ze tot voor de uitwisseling zijn.

# Huidig LAN IP
lanip 192.168.178.0
#
# Huidig IP van de PC (ssh client)van waaruit het netwerk en server beheerd wordt.
clientip 192.168.178.10
#
# Huidig IP van de server
hostip 192.168.178.4

Zie hier het complete script 'server-ipupdate'.

In het script zetten we m.b.v. van het 'string editor' commando # sed eerst de variabelen voor de oude te vervangen ip's uit het referentiebestand /usr/local/server-netips en zetten we de variabelen van de niewe IP's. Zie ook Return only the portion of a line after a matching pattern

# Oude IP's in het referentiebestand
prev_lanip=$(sed -n '/lanip/{s/.*lanip *\([^ ]*\).*/\1/p;q;}' /usr/local/server-netips | cut -d. -f-3);
prev_srvrip=$(sed -n '/hostip/{s/.*hostip *\([^ ]*\).*/\1/p;q;}' /usr/local/server-netips);
prev_clientip=$(sed -n '/clientip/{s/.*clientip *\([^ ]*\).*/\1/p;q;}' /usr/local/server-netips);

# Nieuwe IP range met de nieuwe router
nw_lanip=$(ip route get 8.8.8.8 | sed -n '/src/{s/.*src *\([^ ]*\).*/\1/p;q}' | cut -d. -f-3);
nw_srvrip=$(ip route get 8.8.8.8 | sed -n '/src/{s/.*src *\([^ ]*\).*/\1/p;q}');
nw_clientip=$( ss -ant | grep -Po "(\d|\.)+:22\s+\K[^:]+"|tail -1);

En vervolgens gebruiken we # sed om alle voorkomens van de oude IP's te vinden en deze te wijzigen naar de nieuwe IP-range bijvoorbeeld voor de firewall
Zie ook How to Use sed to Find and Replace String in Files

sed -i "s/\b$prev_srvrip\b/$nw_srvrip/g"  /etc/ufw/user.rules;
sed -i "s/\b$prev_lanip\b/$nw_lanip/g" /etc/ufw/user.rules;

Met bovenstaande wordt in het firewall configuratiebestand /etc/ufw/user.rules bijv. de regel:
/etc/ufw/user.rules:32:-A ufw-user-input -p tcp --dport 22 -s 192.168.178.0/26 -j ACCEPT
gewijzigd naar:
/etc/ufw/user.rules:32:-A ufw-user-input -p tcp --dport 22 -s 192.168.1.0/26 -j ACCEPT

In bovenstaand voorbeeld is de nieuwe router range 192.168.1 ($nw_lanip) en de nieuwe server IP 192.168.1.0/26 ($nw_lanip)

Als laatste wordt met het script het refentie bestand /usr/local/server-netips ook geupdated.

# ALTIJD als laatste
# update referentiebestand /usr/local/server-netips
sed -i "s/\b$prev_srvrip\b/$nw_srvrip/g" /usr/local/server-netips;
sed -i "s/\b$prev_clientip\b/$nw_clientip/g" /usr/local/server-netips;
sed -i "s/\b$prev_lanip\b/$nw_lanip/g" /usr/local/server-netips;

Procedures voor het opnemen van de Mainserver in een netwerk met ander IP-bereik

Note: Voordat we de server ontkoppelen van het oude netwerk eerst de Firewall uitschakelen!!!     # systemctl stop ufw

Voor de duidelijkheid van de hiernavolgende procedures gebruiken we voor het oorspronkelijke thuisnetwerk het IP bereik 192.168.178.0/24 en nemen we van het nieuwe netwerk aan dat het IP-bereik 192.188.1.0/24 is.

1. Procedure met behoud van volledige Mainserver functionaliteit als File- en Webserver

  1. Verbindt de ‘beheerders-PC’ via een netwerkkabel met de ‘nieuwe’ router.

  2. Open in de browser op deze PC het Router Gebruikers Interface en log in (zie routerhandleiding voor IP adres, gebruikersnaam en wachtwoord).

  3. De Mainserver is dusdanig geconfigureerd dat alleen apparaten in het lokale netwerk en binnen het IP bereik 0-63 toegang wordt verleend.
    Hiervoor moet op de router dit bereik vrijgehouden worden t.b.v. IP-reservering (Static IP) voor deze apparaten. Stel daarom op de router de DHCP pool in beginnend boven 64, bijvoorbeeld 192.188.1.64 tot 192.188.1.200
    Gasten, mogelijk ongewenst, krijgen nu middels DHCP automatisch een IP buiten het ‘trusted-IP’ bereik en krijgen als gevolg geen toegang tot de Server.

  4. Zoek op de router de netwerkverbinding van de ‘beheerders-PC’ (MAC-adres) en wijzig het aanvankelijk door DHCP verkregen IP naar een IP reservering binnen de range 192.188.1.0/26 (0-63), bijvoorbeeld 192.188.1.50.
    Herstart de ‘beheerders’ PC

  5. Sluit de Server aan op de router en lokaliseer op de router de netwerkverbinding van de Server (MAC-adres) en reserveer op de router een vast IP bijvoorbeeld 192.188.1.5.
    Hiermee heeft de Server een vast lokaal IP, benodigd voor portforwarding naar de Webserver.
    Herstart de Server.

  6. Doe hetzelfde voor alle client PC's in het netwerk die toegang tot de Samba-shares moeten krijgen, dus met een vast IP in het bereik 192.188.1.0/26

  7. Start nu op de 'beheerders-PC' een SSH sessie op de Server op adres 192.188.1.5 via poort 22 (bijvoorbeeld met de SSH-client puTTY voor Windows).
    Log in met gebruikersnaam ‘ububen’ (Zie LastPass voor accounts en wachtwoorden).

  8. Start Firewall: # sudo start firewall

  9. SU naar root en start op de command-line het script: 'server-ipupdate'
    Het script zoekt in de diverse Mainserver-configuratiebestanden naar alle oude "hardcoded" IP's 192.168.178.x en vervangt deze met het nieuwe IP 192.188.1.x .
    Herstart de Mainserver.

  10. Hiermee is de Mainserver geïntegreerd in het nieuwe thuisnetwerk.

  11. Op een Windows PC in het nieuwe thuisnetwerk kunnen we nu in de Verkenner de Samba Fileserver benaderen met het adres: \\192.188.1.5\files of \\homeserver\files
    Er zal om authenticatie gevraagd worden, log in als één van de gebruikers van de gebruikersgroep 'lanshare' (zie Webconfig>System>Accounts>Users en/of Groups)
    Bijvoorbeeld gebruiker 'ben'. Ga naar LastPass voor wachtwoord).

    Zie on-line voor inloggen op Samba vanaf een Windows PC:
    https://www.makkink.eu/exploringlinux/server7/html/samba.html#sambanetwerk
    Of off-line op Desktop-PC van Ben met url:file:
    ///D:/Data/Documenten/Webdesign/webserver/exploringlinux/server7/html/samba.html#sambanetwerk

  12. De Webserver is lokaal in de browser te openen met de url: https://192.188.1.5/
    Als we de server open willen stellen op het internet dan moet hiervoor op de router portforwarding ingesteld worden.
    Op de Server zelf staan de poorten 80 en 443 al open.

2. Procedure voor alleen toegang tot de Fileserver voor bijvoorbeeld datarecovery.

Met deze procedure is geen manipulatie van router nodig, de Server wordt gewoon via DHCP aan het nieuwe netwerk gehangen.
Pas op: Alle apparaten in het thuisnetwerk kunnen na deze procedure inloggen op de Samba shares, dus ook bijvoorbeeld ongenode WiFi gasten.
Er is geen IP-reservering, dus is geen portforwarding voor de Webserver mogelijk.
Lokaal is de Webserver nog wel beschikbaar.

  1. Sluit de Mainserver aan op de router

  2. Start nu op de 'beheerders-PC' een SSH sessie op de Mainserver op adres 192.188.1.xx via poort 22 (bijvoorbeeld met de SSH-client puTTY voor Windows).
    Check op de router welk IP via DHCP is toebedeeld aan de Mainserver
    Log in met gebruikersnaam ‘beheerder’ (Zie LastPass voor accounts en wachtwoorden).

  3. Start op de command-line het script: 'server-ipupdate'.
    Het script zoekt in de diverse Mainserver-configuratiebestanden naar alle oude "hardcoded" IP's 192.168.178.x en vervangt deze met het nieuwe IP 192.188.1.x .

  4. Start op de command-line het script: ‘server-smbopen’(Zie de volgende sectie hieronder voor de uitleg van dit script).
    Het script past de Samba configuratie aan door de ‘Trusted-IP’ restrictie te verwijderen.
    Alle apparaten op het thuisnetwerk krijgen nu toegang tot de Fileserver
    Herstart de Server.

  5. Met stappen 3 en 4 is de Server nu gekoppeld aan het nieuwe thuisnetwerk.
    Check op de router welk IP via DHCP is toebedeeld aan de Mainserver

  6. Op een Windows PC in het nieuwe thuisnetwerk kunnen we nu in de Verkenner de Samba Fileserver benaderen met het adres: \\192.188.1.xx\files of \\mainserver\files
    Log in als één van de gebruikers van de gebruikersgroep 'lanshare'
    Bijvoorbeeld gebruiker 'ben'. Ga naar LastPass voor wachtwoord).
    Zie on-line voor inloggen op Samba vanaf een Windows PC:
    https://www.makkink.eu/exploringlinux/server7/html/samba.html#sambanetwerk
    Of off-line op Desktop-PC van Ben met url:file:
    ///D:/Data/Documenten/Webdesign/webserver/exploringlinux/server7/html/samba.html#sambanetwerk

  7. De Webserver is lokaal in de browser te openen met de url: https://192.188.1.xx/
    De webserver kan niet zondermeer opengesteld worden naar het internet omdat deze geen vast IP heeft. Hiervoor moet eerst in de router een IP voor de Mainserver gereserveerd worden waarna vervolgens portforwarding ingesteld kan worden.

Naar index

Wordpress blog migreren naar nieuwe server

Zie ook WORDPRESS::Backup and Restore > Wordpress migreren met backup data
Voor het migreren van de Wordpress blog van de huidige on-line server naar een nieuwe on-line server kunnen we de Wordpress backup gebruiken zoals omschreven in Gebruikersinstructies
Kopiëer hiervoor van de huidige server met rsync de meest recente backupdata in /vault/wordpress naar de vault van de nieuwe server en volg de gebruikersinstructies.
Zodra de nieuwe server on-line genomen wordt in domein www.makkink.eu is nu de Wordpress blog geheel operationeel.

Als we de voormalige on-line server willen gaan gebruiken als een lokale testserver lopen we tegen het probleem aan dat bij Wordpress alle links permalinks zijn met het volledige pad en als root het domein www.makkink.eu

Het eerste probleem waar we tegen aan lopen begint al als we in willen loggen als beheerder om bijvoorbeeld al deze links te wijzigen.
De link voor het inloggen verwijst ook nog steeds naar www.makkink.eu, dus zelfs vanaf de testserver belanden we in de on-line webserver.
De settings voor o.a. in- en uitloggen kunnen we wijzigen in Wordpress > Dashboard > Instellingen > Algemeen, maar daar moeten we wel voor ingelogd zijn.

Edit Wordpress database met (phpMyAdmin) MySQL
De enige manier om hier een voet tussen de deur te krijgen is het in phpMyAdmin of aan de prompt bewerken van de databasetafel van wordpress.wp_options waarin de instellingen opgeslagen zijn.

Update wp_options URL's
Check in kolom option_value naar records met www.makkink.eu terwijl in kolom option_name: 'login_redirect_url','logout_redirect_url','home' of 'siteurl'

MariaDB [wordpress]> SELECT * FROM `wp_options`
WHERE option_name IN ('login_redirect_url', 'logout_redirect_url','home','siteurl')
AND option_value LIKE '%www.makkink.eu%';
+-----------+---------------------+-----------------------------+----------+
| option_id | option_name         | option_value                | autoload |
+-----------+---------------------+-----------------------------+----------+
|         2 | home                | https://www.makkink.eu/blog | yes      |
|       748 | login_redirect_url  | https://www.makkink.eu/blog | yes      |
|       747 | logout_redirect_url | https://www.makkink.eu/blog | yes      |
|         1 | siteurl             | https://www.makkink.eu/blog | yes      |
+-----------+---------------------+-----------------------------+----------+

Update in de de text in option_value van 'www.makkink.eu' naar '192.168.1.5'

MariaDB [wordpress]> UPDATE `wp_options`
    -> SET option_value=REPLACE(option_value,'www.makkink.eu','192.168.1.5')
    -> WHERE option_name IN ('login_redirect_url', 'logout_redirect_url','home','siteurl')
    -> AND option_value LIKE '%www.makkink.eu%';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4  Changed: 4  Warnings: 0

Na deze update kunnen we weer inloggen op Wordpress op de testserver

Note:
Er zijn meer permalinks met www.makkink.eu in de tafel wp_options, maar deze zijn nested in arrays.
Deze kunnen we alleen updaten met Wordpress > Dashboard > Weergave > Customizer door de layout geheel opnieuw op te bouwen.
Voor de testserver is dat niet nodig, te veel werk voor niets. Slechts enkele afbeeldingen zullen door de browser van de domeinserver www.makkink.eu gehaald worden.

Update wp_options records met e-mailadres erica@makkink.eu naar ben@makkink.eu

MariaDB [wordpress]> UPDATE `wp_options`
SET option_value=REPLACE(option_value,'erica@makkink.eu','ben@makkink.eu')
WHERE option_value LIKE '%erica@makkink.eu%'

Alle POSTS met permalinks
Posts met foto's bevatten alle permalinks en in ons geval opnieuw allemaal naar https://www.makkink.eu/. Ten tijde van dit schrijven praten we over zo'n 1650 permalinks die bewerkt moeten worden.
Dit gaat het beste met het editen met MySQL van de tafel wp_posts.
De permalink met 'www.makkink.eu' kan voorkomen in 2 kolommen zijnde wp_posts.post_content en/of wp_posts.guid

We voeren de volgende updates uit:

MariaDB [wordpress]> UPDATE `wp_posts`
    -> SET post_content=REPLACE(post_content,'www.makkink.eu','192.168.1.5')
    -> WHERE post_content LIKE '%www.makkink.eu%';
Query OK, 367 rows affected (0.06 sec)
Rows matched: 367  Changed: 367  Warnings: 0

MariaDB [wordpress]> UPDATE `wp_posts`
    -> SET guid=REPLACE(guid,'www.makkink.eu','192.168.1.5')
    -> WHERE guid LIKE '%www.makkink.eu%';
Query OK, 1279 rows affected (0.01 sec)
Rows matched: 1279  Changed: 1279  Warnings: 0

Verwijder onnodige adressen uit Email Subscriber

Naar index

Anacron Logrotate error tracen

Als met de logrotate procedure iets fout gaat wordt een e-mail met een waarschuwing gestuurd naar de Admin (root@mainserver.makkink.eu) met bijvoorbeeld volgende vermelding:

/etc/cron.daily/logrotate:
gzip: stdin: file size changed while zipping

Het enige wat we hieruit op kunnen maken dat er iets fout gegaan is met het roteren van een log van één van de vele processen die gelogd worden.

Als de volgende dag geen waarschuwing ontvangen wordt is het en incidentele fout als bijvoorbeeld geprobeerd wordt een logbestand te roteren terwijl deze gelockt is.
In dat geval is verder onderzoek niet nodig.
Als echter dagelijks een waarschuwing blijft komen moeten we dit onderzoeken.

Hiervoor maken we het 'logrotate-proces' verbose, met als resultaat dat het hele proces van alle logrotaties voluit in een e-mail gestuurd wordt.

Edit /etc/cron.daily/logrotate
Voeg aan het einde van de commandoregel toe: --verbose

#!/bin/sh

/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf --verbose
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

De resulterende dagelijkse e-mail ziet er uit bijvoorbeedl uit als volgt:

/etc/cron.daily/logrotate:

reading config file /etc/logrotate.conf
including /etc/logrotate.d
reading config file BackupPC
reading config file bootlog
reading config file chrony
reading config file clamd
reading config file compliance
reading config file dnsmasq
.... etc.
Allocating hash table for state file, size 15360 B

Handling 28 logs

rotating pattern: /var/log/boot.log
 after 1 days (7 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/boot.log
  log does not need rotating (log is empty)
rotating pattern: /var/log/chrony/*.log  weekly (10 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/chrony/*.log
  log /var/log/chrony/*.log does not exist -- skipping
not running postrotate script, since no logs were rotated
.... etc.

Naar index

/TMP Service Private mappen verwijderen

Eigen privé TMP voor elke service

Zie ook systemd for Administrators en Auto-update werkte niet

Service Private /tmp
Het root /tmp bestand is bedoeld als gedeelde ruimte voor alle locale services en gebruikers. Tijdenlang is dit een belangrijke bron van beveiligingsproblemen voor diverse services geweest. Symlink aanvallen en DoS kwetsbaarheden vanwege te raden tijdelijke /tmp bestanden was eenvoudig.

Door het /tmp bestand van een service te isoleren van de rest van de host worden zulke kwetsbaarheden verwaarloosbaar.
Met het inschakelen van zo'n Service-Private /tmp wordt de /tmp map die een service te zien krijgt privé en geisoleerd van de host /tmp map.
Elke service krijgt hierdoor tevens geen toegang meer tot de host (root) /tmp of /tmp mappen van andere services.
De Service Private /tmp wordt elke keer bij het opstarten van een service in de root /tmp aangemaakt.

Op de Mainserver zijn bijvoorbeeld op 17-aug-2024 de volgende Service Private /tmp mappen actief:

[root@mainserver ~]# ls -l /tmp
drwxr-xr-x 2 serviio serviio 18 Aug 11 09:20 hsperfdata_serviio
drwx------ 3 root    root    17 Aug 11 09:19 systemd-private-baea3de8fef1471cb363ebf37079ded8-arpwatch@enp34s0.service-znFtxN
drwx------ 3 root    root    17 Aug 11 09:19 systemd-private-baea3de8fef1471cb363ebf37079ded8-chronyd.service-lwuXGT
drwx------ 3 root    root    17 Aug 11 09:19 systemd-private-baea3de8fef1471cb363ebf37079ded8-clamd.service-f6gpTC
drwx------ 3 root    root    17 Aug 11 09:19 systemd-private-baea3de8fef1471cb363ebf37079ded8-httpd.service-HPfh3u
drwx------ 3 root    root    17 Aug 11 09:19 systemd-private-baea3de8fef1471cb363ebf37079ded8-php80-php-fpm.service-VmJwwg
drwx------ 3 root    root    17 Aug 11 09:19 systemd-private-baea3de8fef1471cb363ebf37079ded8-php82-php-fpm.service-3CQb11
drwx------ 3 root    root    17 Aug 11 09:19 systemd-private-baea3de8fef1471cb363ebf37079ded8-php83-php-fpm.service-14vEMS
drwx------ 3 root    root    17 Aug 11 09:19 systemd-private-baea3de8fef1471cb363ebf37079ded8-rh-mariadb105-mariadb.service-hTJHgE
drwx------ 3 root    root    17 Aug 11 09:19 systemd-private-baea3de8fef1471cb363ebf37079ded8-rh-php73-php-fpm.service-9Gu4Lp
drwx------ 3 root    root    17 Aug 11 09:19 systemd-private-baea3de8fef1471cb363ebf37079ded8-system-mariadb.service-Xu0Jk7

Oude /TMP Service Private mappen verwijderen
Bij elke (her)start van een service of een (re)boot van de server wordt een nieuwe /tmp/systemd-private* folder aangemaakt.
Normaal gesproken worden tevens de oude /tmp/systemd-private* folders verwijderd.

Het is enkele malen voorgekomen dat de oude bestanden niet verwijderd werden en de /tmp folder dus volloopt. Op zich geen probleem want de /tmp/systemd-private* folders zijn leeg en nemen dus nauwelijks ruimte in..

Handmatig verwijderen
Om de overbodige folders toch te verwijderen is de veiligste methode als volgt:

  1. Reboot de server en stel vast dat er nwe /tmp/systemd-private* folders aangemaakt zijn (timestamp)
  2. Run commando: # find /tmp/* -type d -mmin +1440 -delete (verwijdert alle folders van 1 dag en ouder.
  3. Reboot de server en stel vast dat er nwe /tmp/systemd-private* folders aangemaakt zijn en dat de oude, gemaakt onder 1, verwijderd zijn.

Naar index

What's next

Naar index