Als leerkracht Raspberry Pi is het handig dat je snel van een basissysteem een gepersonaliseerd systeem kunt maken. Dit is nodig om de Raspberry Pi's zowel op Linux, Apple en Windows systemen in een netwerk te herkennen en de bereiken. Elke Raspberry Pi krijgt daarvoor een unieke netbiosnaam en hostname. Daarenboven vertrek ik van een geprepareerd systeem waarop samba en VNC geïnstalleerd en geconfigureerd werd. Dit kan enkel op een systeem met 5 GB opslagruimte. Dit 5 GB basisimage wordt daarna op 8 GB SD kaarten geplaatst waardoor de 5 GB naar 8 GB moet worden uitgebreid. We gebruiken geen 8 GB basisimages omdat dit langer duurt om op een SD kaart te schrijven en niet elke 8 GB SD kaart heeft merkwaardig genoeg dezelfde capaciteit.
Voor het aanmaken van het basis systeem vertrekken we van de originele gedownloade Raspbian Jessie with Pixel versie. Deze schrijven we op een 8 GB SD kaart.
Met het volgende script passen we het systeem op de SD kaart aan zodat de automatische expansie van de opslagruimte bij de eerste start wordt uitgeschakeld. Daarna expanderen we de opslagruimte naar 5 GB.
#!/bin/bash # Automatisch expansie uitschakelen en manueel expanderen naar 5 GB # Controleer of het script door de systeembeheerder werd gestart if [[ ! $(whoami) =~ "root" ]]; then echo "" echo "************************************" echo "*** Root moet dit script starten ***" echo "************************************" echo "" exit fi # Controleer of er een optie werd meegegeven if [[ -z $1 ]]; then echo "Gebruik: ./raspbian-noresize.sh /dev/mmcblk0" exit fi # Controleer of de optie een blok apparaat is if [[ ! -e $1 || ! $(file $1) =~ "block special" ]]; then echo "Fout : Geen blok apparaat, of onbestaand apparaat" exit fi # Koppel de SD kaart aan een map mount $1p1 /mnt/ # Maak indien nodig een reservekopie van de originele opstart opdrachten if [ -f /mnt/cmdline.txt.ori ]; then cp /mnt/cmdline.txt.ori /mnt/cmdline.txt else # Herstel de originele opstartopdrachten cp /mnt/cmdline.txt /mnt/cmdline.txt.ori fi # Verwijder uit de originele opstart opdrachten het automatisch expanderen van de opslagruimte sed -i 's/ init=\/usr\/lib\/raspi-config\/init_resize.sh//' /mnt/cmdline.txt # Geef de aangepaste opstart opdrachten weer cat /mnt/cmdline.txt # Koppel de SD kaart los van de /mnt/ map umount /mnt/ # Bepaal het startpunt van de tweede partitie PART_START=$(parted $1 -ms unit s p | grep "^2" | cut -f 2 -d: | sed 's/[^0-9]//g') echo $PART_START [ "$PART_START" ] || return 1 # Breek het script af bij een foumelding # Bepaal het eindpunt van de tweede partitie PART_END=$(parted $1 -ms unit s p | grep "^2" | cut -f 3 -d: | sed 's/[^0-9]//g') # Bereken het eindpunt van een 1 GB grotere partitie PART_END=$((PART_END + 2097152)) echo $PART_END # Verwijder de tweede partitie en maak deze opnieuw aan, maar nu 1 GB groter fdisk $1 <<EOF p d $PART_NUM n p 2 $PART_START $PART_END p w EOF # Controleer de tweede partitie op eventuele fouten en indien mogelijk herstel de fouten e2fsck -f $1p2 # Maak de extra 1 GB schijfruimte beschikbaar resize2fs $1p2
Bij het uitvoeren van het script kan je het proces nauwlettend volgen:
dany@laptop:~> sudo sh Documenten/SNT/Raspberry\ Pi/raspian-noresize.sh /dev/mmcblk0
root's password:
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles quiet
137216
10590207
Welkom bij 'fdisk' (util-linux 2.25).
Wijzigingen worden alleen in het computergeheugen gemaakt,
tot het moment dat u besluit ze naar schijf te schrijven.
Wees voorzichtig vóór het gebruik van de schrijfopdracht.
Opdracht (m voor hulp): Schijf /dev/mmcblk0: 7,4 GiB, 7948206080 bytes, 15523840 sectoren
Eenheid: sectoren van 1 * 512 = 512 bytes
Sectorgrootte (logisch/fysiek): 512 bytes / 512 bytes
In-/uitvoergrootte (minimaal/optimaal): 512 bytes / 512 bytes
Schijflabeltype: dos
Schijf-ID: 0xd94ffdb3
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 8192 137215 129024 63M c W95 FAT32 (LBA)
/dev/mmcblk0p2 137216 8493055 8355840 4G 83 Linux
Opdracht (m voor hulp): Partitienummer (1,2, standaard 2):
Partitie 2 is verwijderd.
Opdracht (m voor hulp): Partitietype
p primair (1 primair, 0 uitgebreid, 3 vrij)
e uitgebreid (container voor logische partities)
Selecteer (standaard is p): Partitienummer (2-4, standaard 2): Eerste sector (2048-15523839 standaard 2048): Laatste sector, +sectoren, of +grootte{K,M,G,T,P} (137216-15523839 standaard 15523839):
Nieuwe partitie 2 van type 'Linux' en grootte 5 GiB is aangemaakt.
Opdracht (m voor hulp): Schijf /dev/mmcblk0: 7,4 GiB, 7948206080 bytes, 15523840 sectoren
Eenheid: sectoren van 1 * 512 = 512 bytes
Sectorgrootte (logisch/fysiek): 512 bytes / 512 bytes
In-/uitvoergrootte (minimaal/optimaal): 512 bytes / 512 bytes
Schijflabeltype: dos
Schijf-ID: 0xd94ffdb3
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 8192 137215 129024 63M c W95 FAT32 (LBA)
/dev/mmcblk0p2 137216 10590207 10452992 5G 83 Linux
Opdracht (m voor hulp): De partitietabel is gewijzigd.
Aanroepen van ioctl() om partitietabel opnieuw in te lezen...
Leegmaken van schijfbuffers...
e2fsck 1.42.11 (09-Jul-2014)
Stap 1: Controle van inodes, blokken, en groottes
Stap 2: Controle van mappenstructuur
Stap 3: Controle van verbindingen tussen mappen
Stap 4: Controle van verwijzingsaantallen
Stap 5: Controle van groepssamenvattingen
/dev/mmcblk0p2: 133045/261120 bestanden (0.1% niet-aaneengesloten), 938256/1044480 blokken
resize2fs 1.42.11 (09-Jul-2014)
Van grootte veranderen van bestandssysteem op /dev/mmcblk0p2 naar 1306624 blokken (van 4K).
Het bestandssysteem op /dev/mmcblk0p2 is nu 1306624 blokken groot.
Plaats de SD kaart in de Raspberry Pi en start de Pi. Je kunt nu het basissysteem naar wens opbouwen. Voor de lessen installeer en configureer ik daarvoor Samba en TightVNC.
Na het voltooien en testen van het basissysteem, sluit je de Raspberry Pi correct af. En maak je een image van dit basissysteem. Dit 8 GB grote image bestand verklein je met het volgende script:
#!/bin/bash # Image bestand verkleinen if [[ ! $(whoami) =~ "root" ]]; then echo "" echo "************************************" echo "*** Root moet dit script starten ***" echo "************************************" echo "" exit fi if [[ -z $1 ]]; then echo "Gebruik: ./raspbian-truncate.sh raspian-netbios-vnc.img" exit fi if [[ ! -e $1 || ! $(file $1) =~ "DOS/MBR boot sector" ]]; then echo "Fout: Geen image bestand, of bestand bestaat niet" exit fi truncate -s 5422186496 $1
Zo verloopt het uitvoeren van het script:
dany@laptop:~> sudo sh Documenten/SNT/Raspberry\ Pi/raspian-truncate.sh raspbian-basis.img
root's password:
M.a.w. geen nieuws is goed nieuws. Schrijf dit image bestand naar een andere SD kaart.
Met het volgende script wordt op de SD kaart de hostname en netbiosnaam aangepast. Daarnaast wordt de systeempartitie uitgebreid waardoor de volledige opslagruimte op de SD kaart beschikbaar wordt.
#!/bin/bash # Hostname aanpassen en root partitie uitbreiden # Controleer of het script als root gestart is if [[ ! $(whoami) =~ "root" ]]; then echo "" echo "************************************" echo "*** Start dit als root gebruiker ***" echo "************************************" echo "" exit fi # Controleer of er twee opties ingegeven zijn if [[ -z $1 || -z $2 ]]; then echo "Gebruik: sh raspbian-hostname-resize.sh /dev/mmcblk0 RPIDanPin" exit fi # Controleer of de eerste optie een block device is if [[ ! -e $1 || ! $(file $1) =~ "block special" ]]; then echo "Error : Not a block device, or device doesn't exist" exit fi # Koppel de SD kaart aan de map /mnt/ mount $1p2 /mnt/ # Vervang de standaard samba netbiosnaam (raspberrypi) door de opgegeven hostname sed -i "s/raspberrypi/$2/" /mnt/etc/samba/smb.conf # Geef de sambaconfiguratie weer cat /mnt/etc/samba/smb.conf # Vervang de standaard hostname (raspberrypi) door de opgegeven hostname sed -i "s/raspberrypi/$2/" /mnt/etc/hostname # Geef de hostname weer cat /mnt/etc/hostname # Koppel de SD kaart los van de map /mnt/ umount /mnt/ # Bepaal de start van de root partitie PART_START=$(parted $1 -ms unit s p | grep "^2" | cut -f 2 -d: | sed 's/[^0-9]//g') echo $PART_START [ "$PART_START" ] || return 1 # De ontvangen waarde is een foutmelding, meestal veroorzaakt door een reeds gekoppelde root partitie # Verwijder en maak de root partitie terug aan zonder de gegevens te vernietigen fdisk $1 <<EOF p d $PART_NUM n p 2 $PART_START p w EOF # Controleer het bestandsysteem en herstel indien mogelijk eventuele fouten e2fsck -f $1p2 # Activeer de extra beschikbare opslagruimte op de root partitie resize2fs $1p2
Dit script in actie:
dany@laptop:~> sudo sh Documenten/SNT/Raspberry\ Pi/raspian-hostname-resize.sh /dev/mmcblk0 RPIDanPin
root's password:
[global]
workgroup = WORKGROUP
server string = Samba Server %v
netbios name = RPIDanPin
security = user
map to guest = bad user
dns proxy = no
RPIDanPin
137216
Welkom bij 'fdisk' (util-linux 2.25).
Wijzigingen worden alleen in het computergeheugen gemaakt,
tot het moment dat u besluit ze naar schijf te schrijven.
Wees voorzichtig vóór het gebruik van de schrijfopdracht.
Opdracht (m voor hulp): Schijf /dev/mmcblk0: 7,4 GiB, 7948206080 bytes, 15523840 sectoren
Eenheid: sectoren van 1 * 512 = 512 bytes
Sectorgrootte (logisch/fysiek): 512 bytes / 512 bytes
In-/uitvoergrootte (minimaal/optimaal): 512 bytes / 512 bytes
Schijflabeltype: dos
Schijf-ID: 0x00073f97
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 8192 137215 129024 63M c W95 FAT32 (LBA)
/dev/mmcblk0p2 137216 10590207 10452992 5G 83 Linux
Opdracht (m voor hulp): Partitienummer (1,2, standaard 2):
Partitie 2 is verwijderd.
Opdracht (m voor hulp): Partitietype
p primair (1 primair, 0 uitgebreid, 3 vrij)
e uitgebreid (container voor logische partities)
Selecteer (standaard is p): Partitienummer (2-4, standaard 2): Eerste sector (2048-15523839 standaard 2048): Laatste sector, +sectoren, of +grootte{K,M,G,T,P} (137216-15523839 standaard 15523839):
Nieuwe partitie 2 van type 'Linux' en grootte 7,3 GiB is aangemaakt.
Opdracht (m voor hulp): Schijf /dev/mmcblk0: 7,4 GiB, 7948206080 bytes, 15523840 sectoren
Eenheid: sectoren van 1 * 512 = 512 bytes
Sectorgrootte (logisch/fysiek): 512 bytes / 512 bytes
In-/uitvoergrootte (minimaal/optimaal): 512 bytes / 512 bytes
Schijflabeltype: dos
Schijf-ID: 0x00073f97
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 8192 137215 129024 63M c W95 FAT32 (LBA)
/dev/mmcblk0p2 137216 15523839 15386624 7,3G 83 Linux
Opdracht (m voor hulp): De partitietabel is gewijzigd.
Aanroepen van ioctl() om partitietabel opnieuw in te lezen...
Leegmaken van schijfbuffers...
e2fsck 1.42.11 (09-Jul-2014)
Stap 1: Controle van inodes, blokken, en groottes
Stap 2: Controle van mappenstructuur
Stap 3: Controle van verbindingen tussen mappen
Stap 4: Controle van verwijzingsaantallen
Stap 5: Controle van groepssamenvattingen
/dev/mmcblk0p2: 137075/326400 bestanden (0.1% niet-aaneengesloten), 1067730/1306624 blokken
resize2fs 1.42.11 (09-Jul-2014)
Van grootte veranderen van bestandssysteem op /dev/mmcblk0p2 naar 1923328 blokken (van 4K).
Het bestandssysteem op /dev/mmcblk0p2 is nu 1923328 blokken groot.