Vorbereitung der Speicherkarte ============================== .. english Like most other Linux Distributions, Pi-LFS is unually installed on a dedicated partition (or a set of partitions). You have the choice between creating partitions on your local harddisk, or using the Pis-SD card instead. The advantage of using the SD is that you dont have to copy things around later. Wie bei den meisten Linux Distributionen ist es sinnvoll, den Speicher in Partitionen aufzuteilen. So ist es in jedem Fall sinnvoll, eine spezielle Boot-Partition anzulegen und wenn man persönliche Daten über eine komplette Neuinstallation hinweg mitnehmen möchte, lagert man das Home-Verzeichnis aus dem Root Dateisystem aus. +----------------+------------------+--------------+----------------+-----------------+ | Mount-Point | Type | Dateisystem | bei 2GB SD | bei 16GB SD | +================+==================+==============+================+=================+ | /boot | Bios boot | fat32 (vfat) | 100 MB | 100 MB | +----------------+------------------+--------------+----------------+-----------------+ | / | Linux Filesystem | ext4 | 700 MB | 3GB | +----------------+------------------+--------------+----------------+-----------------+ | /home | Linux Filesystem | ext4 | all the rest | all the rest | +----------------+------------------+--------------+----------------+-----------------+ Zuerst gilt es also die Speicherkarte einzustecken und herauszufinden, welchen Gerätenamen sie hat, z.B. sdc .. code:: bash # List block devices lsblk .. english Start creating partitions: In der Ausgabe von lsblk kann zugleich überprüft werden, ob das Device bereits gemountet ist. Ist bei einer Partition ein Mountpoint angegeben, muss dieser Mountpoint ausgebunden werden. Häufige Ursache dafür sind die komfortablen automatischen Mount Funktionen der jeweiligen Distribution. Ubuntu verwendet hierfür das Gnome Virtual File System und mountet das Gerät mit Benutzerrechten mit Hilfe von ``gvfs-mount``. Der richtige weg um es wieder auszubinden wäre deshalb .. code:: bash # unmount on distros using gvfs gvfs-mount -u [mountpoint] Grundsätzlich gilt, eine Partition kann immer mit den selben Rechten entfernt werden, mit der sie eingebunden wurde. Bei manchen Distributionen mag es auch ausreichen, den normalen umount Befehl mit Benuterrechten auszuführen. .. code:: bash umount [mountpoint] Theoretisch kann eine Partition auch mehrfach gemountet sein und evtl. wird nur ein Mountpoint angezeigt. Funktioniert keiner der beiden oben genannten Möglichkeiten, kann man mit Root-Rechten die Partition an jedem Mountpoint ausbinden, indem man stattdessen direkt die Partition angibt. .. code:: bash sudo umount /dev/sdxX Häufig ist der Dateimanager auch so konfiguriert, dass er beim einstecken eines Massenspeichers jedes Mal direkt nach dem automatischen mounten den Inhalt im Dateimanger öffnet. Für ``nautilus`` kann man dieses Verhalten wie folgt abstellen. .. code:: bash $ gsettings set org.gnome.desktop.media-handling automount-open false Partitionierung --------------- .. english We recommend you to use a sd-card not less than 2GB. Create the partitions using **fdisk, cfdisk or cgdisk**: Wir empfehlen eine SD-Karte mit mindestens 2GB zu verwenden. Für die Partitionierung kann man z.B. ``fdisk``, ``cfdisk`` oder ``cgdisk`` verwenden. .. code:: bash sudo cfdisk -z /dev/sdX -z: create a new partition table, choose **gpt** Ansonsten sollte die graphische Ausgabe im Terminal selbsterklärend sein. Die Partitionsgröße angeben und danach den Typ anpassen. Wichtig ist vielleicht noch der Hinweis, dass auf der Speicherkarte nichts verändert wird, bis explizit der *Write* Vorgang angestoßen wird. Dann jedoch sind die alle Daten auf der Speicherkarte gelöscht und das neue Partitionslayout wurde geschrieben. Man kann nur wieder ``lsblk`` verwendenn oder mit ``fdisk`` das genaue Partitionslayout mit Sektorangaben ausgeben. .. code:: bash # using lsblk lsblk # or fdisk fdisk -l /dev/sdx # example output Gerät Anfang Ende Sektoren Größe Typ /dev/sdx1 2048 206847 204800 100M BIOS boot /dev/sdx2 206848 4401151 4194304 2G Linux-Dateisystem /dev/sdx3 4401152 15974366 11573215 5,5G Linux-Dateisystem Formatierung ------------ .. english After the partitions were created we have to format them with a suitable file-system. Start formatting the /boot-partition with fat32, but first we have to install the necessary tools: Nachdem die Partitionen angelegt wurden, müssen diese mit dem passendenn Dateisystem formatiert werden. Unter manchen Distributionen kann es notwendig sein, die Werkzeuge für ein Dateisystem vorher nachzuinstallieren. .. code:: bash # arch-linux sudo pacman -S dosfstools # ubuntu # seems to be already preinstalled dpkg -s dosfstools .. english now lets format the boot-partition with: Danach kann das FAT-Dateisystem bequem mit wie jedes anndere andere Dateisystem mit ``mkfs`` angewandt werden. ``mkfs.vfat`` wählt zwar selbstständig die scheinbar geeignetete Größe, auf der sicherenn Seite is man aber wenn man mit dem Parameter ``-F 32`` diese explizit angibt. .. code:: bash sudo mkfs.vfat -F 32 /dev/sdxX .. english after that, the "/"- and "/home"-partitions follow in a similar manner, but with ext4: Den selben Vorgang wiederholt man nun für die restlichen Partitionen. Meist wird hier das Linux typische ``ext``-Dateisystem verwendet. Version 2 kann aufgrundvon fehlendem Journaling evtl. zu Datenverlust führen, wenn während Schreibvorgängen das Gerät stromlos gemacht wird. Kein Problem stellt das für Read-only Partitionen. .. code:: bash mkfs.ext4 /dev/sdxX # / mkfs.ext4 /dev/sdxX # /home Fernzugriff auf gemountete Partitionen -------------------------------------- .. english: Partitions are not directly accessible over Ethernet, but you can share the device itself, its storage or place the files where they will be automatically processed (like a Printing Folder). Between Unix machines, Network File System (NFS) reaches best network performance and isn't that hard to configure. If you want to share with Windows clients, you have to take a look at Samba. Gemountete Partitionen sind nicht direkt über das Netzwerk erreichbar, aber man kann entweder das Gerät selbst oder ihren Speicher als virtuelles Dateisystem durchreichen. Zwischen UNIX-basierten Rechnern, erziehlt Network File System (NFS) die beste Netzwerk Performance und ist nicht besonders schwer einzurichten. Ist es gewünscht, Dateien mit Windows auszutauschen, sollte man einen Blick auf Samba werfen. Massenspeicher wie z.B. USB-Sticks und SD-Karten werden in der Regel automatisch gemountet. Probleme ergeben sich aber, wenn man den gemounteten Ordner dann teilen möchte. Eine etwas sauberere Lösung kann man mit ``autofs`` realisieren. Autofs _______ Dieser Punkt kann überschritten werden, wennn der Fernzugriff auf ein Verzeichnis gehen soll, dass auf dem Server immer eingebunden ist. Befindet sich das Verzeichnis auf einem externen Massenspeicher, lohnt sich ein Blick auf ``autofs`` .. code:: bash $ sudo apt install autofs .. english There is one master configuration file ``/etc/auto.master`` where you specify your sub-configurations. I added ``/automnt /etc/auto.automnt --timeout=5 --ghost`` to mount my device at ``/automnt`` with the option ghost, to prevent removing the directory after timeout. Autofs unbinds from raw device file after full sync and timeout and rebinds on access. I recommend to use a directory which isn't a subfolder. Nach der Installation gibt es eine Master Konfigurationsdatei ``/etc/auto.master`` in der man seine Unterkonfigurationen bekannt mancht. Beispielhaft habe ich hier ``/automnt /etc/auto.automnt --timeout=5 --ghost`` hinzugefügt um mein Gerät nach ``/automnt`` zu mounten. Die Option ``ghost``` verhindert, dass automatische generierte Mountpoints nach dem Timeout oder dem entfernen des Geräts nicht wieder verschwinden, sondern schlicht leer sind. Autofs löst (unbind) sich nach jedem abgeschlossenen Schreibvorgang (sync) vom eigentlichen Medium und verbindet sich für jeden Zugriff erneut. Es ist empfohlen diesen Ordner direkt im Wurzelverzeichnis und nicht in einem Unterverzeichnis zu erstellen. .. code:: bash $ sudo sh -c 'echo "/automnt /etc/auto.automnt --timeout=5 --ghost" >> /etc/auto.master' $ sudo mkdir /automnt $ sudo chmod 777 /automnt .. english I created the the folder in root directory because `autofs` blocks all subfolders. That's why you shouldn't use existing directories like `/media` or `/mnt` Der Grund warum man das Verzeichnis im Wurzelverzeichnis anlegen sollte ist, dass autofs alle Überordner blockiert. Man sollte also ``/media`` oder ``mnt`` verwenden, wenn diese von einem anderen Tool oder für andere Zwecke bereits verwendet werden. https://wiki.ubuntuusers.de/Autofs#Die-Master-Map-Datei .. english Now create sub-configuration file, where you have specified it above, and set mounting options. Nun können wir die Sub Konfigurationsdateien dort anlegen, wo sie oben angegeben wurden und die spezifischen Mount Optionen mitgeben. .. code:: bash $ sudo sh -c 'echo \ "BOOT -fstype=vfat,sync,uid=0,gid=46,umask=007 :/dev/disk/by-label/BOOT" \ >> /etc/auto.master' .. english `BOOT` is the partitions label and here used as mounting point, which has a FAT32 filesystem. Permissions are set for owner and group, owner to root and group to plugdev, which enables every registered user to access the mounted folder. There are many discussion about the options like "sync is slow and bad for flash devices" but for now it works. ``BOOT`` ist in diesem Fall die Partitionsbezeichnung (Label) und diese wird auch als Name des Mountpoints verwendet, was auf unserer SD-Karte ein FAT32 Dateisystem ist. Außerdem werden die Berechtigungen gesetzt. Beim Mountvorgang wird hier ``root`` wird als Besitzer und ``plugdev`` als Gruppe verwendet, was jedem registrierten Nutzer den Zugriff auf den gemounteten Ordner ermöglicht. Es wird viel darüber diskutiert, dass ``sync`` option langsam und schädlich für Flash-Speicher sein könnte, aber es wird damit sichergestellt, dass jeder Schreibvorgang auch sofort umgesetzt wird. .. english In most cases it is better to use /dev/disk/by-uuid/... but if there is only one device. The UUID is a identifier to select no other device than our microSD. With label, every microSD with this label is accepted. In den meisten Fällen is es besser ``/dev/disk/by-uuid/...`` zu verwenden, aber da wir vllt mehrere SD-Karten verwenden, die beim selben Label auch das gleiche Verhalten zeigen sollen macht diese Konfiguration so durchaus Sinn. Man sollte sich dieser Situation aber bewusst sein, da es zu Fehlern führen könnte, wenn mehrere Massenspeicher mit dem selben Label gleichzeitig verwendet werden. .. english After all configuration is done, enter Dieser Vorganng kann natürlich für weitere Partitionen verwendet werden. Nachdem alle Konfigurationen abgeschlossen sind, wird der Dienst neu gestartet. .. code:: bash $ sudo service autofs restart .. english and check if your device is mounted at /automnt/BOOT Man kann jetzt überprüfen ob das Gerät ordungsgemäß nach ``/automnt/BOOT`` gemountet wurde. .. english **Note:** Autofs can also be used with FTP, but I expect more delay and don't know if it is possible to force binary filetype. You can find a small guide on https://wiki.archlinux.org/index.php/Autofs#Remote_FTP. Kleine Randnotiz: Man kann autofs auch mit FTP nutzen, aber das Asprechverhalten könnte dadurch stark verzögert werden und ich habe noch keine Möglichkeit gefunden den filetype auf binary zu setzen, damit keine Probleme mit größeren Dateien auftreten. Mehr Informationen dazu finden sich auch https://wiki.archlinux.org/index.php/Autofs#Remote_FTP. NFS-Server ___________ .. ennglish There is a nice NFS How-To on https://help.ubuntu.com/community/SettingUpNFSHowTo Ein nettes How-To ist hier zu finden https://help.ubuntu.com/community/SettingUpNFSHowTo .. code:: bash $ sudo apt install nfs-kernel-server Lokales Verzeichnis ``````````````````` Will man z.B. das Root-Filesystem für den RaspberryPi bereitstellen, ist die Konfiguration besonders einfach. Nach der Installation legt man lediglich die Datei /etc/exports an und trägt dort das Verzeichnis und den berechtigten Client ein. .. code:: bash $ sudo vim /etc/exports # Freigabe gilt für alle IPs von 192.168.1.1 bis 192.168.1.255, mit Lese-/Schreibrechten: /pfad/zum/ROOTFS 192.168.1.0/255.255.255.0(rw,async) Verzeichnis liegt auf einem externen Massenspeicher ``````````````````````````````````````````````````` .. english Our aim is, to provide this share as soon as possible after it is connected to our NFS-Server. To add a solution which does not affect prior settings and private configuration, I suggest to use NFS in combination with autofs to mount the device. Unser Ziel ist es den Ordner so schnell wie möglich bereitzustellen, sobald der Massenspeicher mit dem NFS-Server verbunden wird. Um dies zu ermöglichen ohne dabei Einfluss auf bisherige Einstellungenn zu nehmen, macht gerade für NFS die Kombination mit autofs Sinn. .. english Read about autofs to dynamically mount USB Mass Storage to `/automnt/BOOT` on your NFS-Server, then you can share it with NFS. .. code:: bash $ sudo vim /etc/exports ... /automnt U64(rw,no_subtree_check,async,fsid=0,crossmnt) \ localhost(rw,no_subtree_check,async,fsid=0,crossmnt) \ 172.29.170.0/24(rw,no_subtree_check,async,fsid=0,crossmnt) \ 172.29.173.0/24(rw,no_subtree_check,async,fsid=0,crossmnt) /automnt/BOOT U64(rw,no_subtree_check,async) \ localhost(rw,no_subtree_check,async) \ 172.29.170.0/24(rw,no_subtree_check,async) \ 172.29.173.0/24(rw,no_subtree_check,async) In der exports wird der Zugriff auf die bereitgestellten NFS-Shares geregelt. Hier kann sowohl der Hostname des Rechners als auch desssen IP verwendet werden. Außerdem kann ein ganzer IP-Range freigegeben werden. .. english The option `fsid=0` enables to mount a main directory with multiple shares in it, but it is not necessary and `crossmnt` makes it possible that there are different filesystems mounted. Both, `localhost` and `U64`, are the server and just entered for testing. If hostname resolution works, use `U64` instead of the direct IP `172.29.170.162` to mount NFS-Shares. Die Option ``fsid=0`` erlaubt ein Hauptverzeichnis in dem sich unterschiedliche Shares finden, dies is jedoch für den Zugriff nicht notwendig. ``crossmnt`` erweitert diese Einstellung so, dass es möglich ist in diesem Hauptverzeichnis Shares zu haben die selbst wiederum auf unterschiedlichen Dateisystemen liegen. Nach einen Neustart des NFS-Server Dienstes sind die Shares verfügbar. .. code:: bash $ sudo service nfs-kernel-server restart .. english Now the destination is reachable for the NFS-Client but empty, if *autofs* hasn't already mounted the *Mass Storage*. In Verbindung mit dem zuvor beschriebenen ``autofs`` ist das Verzeichnis jetzt erreichbar aber leer, solange der Massenspeicher nicht verbunden wurde. .. english Maybe it is better to use `sync` instead of default `async` in combination with mounted USB Mass Storage, but it haven't tested it, yet. .. english The storage often gets disconnected and reconnected. We have configured a timeout of 5 seconds, but that does not completely unmount the device and the delay of automatically remount is to long then. Thats why I created an additional `udev` rule, which does umount triggered by removing/disconnecting USB device with label BOOT. Wird der Massenspeicher häufig getrennt und wieder neu verbunden, erweist sich der timeout teilweise als zu lang und unzuverlässig. Das Gerät wird nach einen Schreibvorgang nicht vollständig getrennt und so kann es teilweise lange dauern bis autofs einen remount erkennt. Um hier Abhilfe zu schaffen kann man eine zusätzliche ``udev`` Regel verwenden, die einen richtigen unmount auslöst, wenn der Massennspeicher entfernt wird. .. code:: bash $ sudo vim /etc/udev/rules.d/80-BOOT-unmount.rules .. code:: bash # Auto-unmount USB storage (on remove): ACTION=="remove", SUBSYSTEM=="block", ENV{ID_FS_LABEL}=="BOOT", RUN+="/usr/bin/logger auto umounting %k" ACTION=="remove", SUBSYSTEM=="block", ENV{ID_FS_LABEL}=="BOOT", RUN+="/bin/umount /automnt/BOOT" ACTION=="remove", SUBSYSTEM=="block", ENV{ID_FS_LABEL}=="BOOT", RUN+="/bin/umount -lf /automnt/BOOT" NFS-Client __________ .. english On client side it is as easy as mounting a local device. Auf der Client Seite ist das mounten eines NFS Share genauso einfach wie für eine lokale Partition. .. code:: bash $ sudo apt install nfs-common $ sudo mkdir /mnt/BOOT $ sudo mount [NFS-SERVER]:/automnt/BOOT /mnt/BOOT .. english Sometimes it could be necessary to unmount the device, e.g. your server was unreachable. Es kann vorkommen, dass ein Share nicht mehr erreichbar ist, z.B. wenn der Server zwischendurch nicht erreichbar war. Möchte man ein bereitgestelltes Root-Filesystem booten, muss man dies im Bootloader konfigurieren und dort als Bootargument übergeben. .. code:: bash $ sudo umount /mnt/BOOT