Hier schildere ich meine Erfahrungen bei der Installation und Konfiguration eines Raspberry Pi2 mit der Linux-Distribution Arch Linux und dem anschliessenden Betrieb einer 2TB-USB-Festplatte als NAS.
Ein paar Angaben zu den vorhandenen Geräten in meinem Netzwerk
Router: O2 Box 6431 Notebook 1: Win7 Notebook 2: Linux Manjaro Netbook: WinXP Smartphone 1: Android Smartphone 2: Android
in einen Linux-Rechner SDcard einstecken und Device der SD-Card herausfinden
sudo blkid
oder
sudo lsblk
unmounten (hier im Beispiel /dev/sda) alle Parition unmounten, SD-Card nicht auswerfen!
sudo umount /dev/sda1
falls mehrere Partitionen vorhanden, Beispiel für Partition Nr.1 und Nr.2
sudo umount /dev/sda{1,2}
GParted starten eventuell vorhandene Partition(en) löschen erste Partition (Bootpartition) als FAT32 mit 100MB anlegen zweite Partition (/) als ext4 anlegen GParted schliessen
formatieren
sudo mkfs.vfat /dev/sdi1 sudo mkfs.ext4 /dev/sdi2
installieren
mkdir mnt sudo mount /dev/sdi2 mnt sudo mkdir mnt/boot sudo mount /dev/sdi1 mnt/boot wget http://archlinuxarm.org/os/ArchLinuxARM-rpi-2-latest.tar.gz sudo bsdtar -xpf ArchLinuxARM-rpi-2-latest.tar.gz -C mnt rm ArchLinuxARM-rpi-2-latest.tar.gz sync sudo umount mnt/boot mnt rmdir mnt
mit angeschlossenem Monitor als
root:root
oder via
ssh alarm@alarmpi password: alarm su password: root
Tastaturlayout temporär auf Deutsch umstellen
loadkeys de
hostname einstellen
hostnamectl set-hostname raspbpi2
/etc/locale.gen für die Schweiz einstellen: deCH.UTF-8 UTF-8 auskommentieren deCH.UTF-8 UTF-8:
sed -i 's/.\(de_CH.UTF-8*.\)/\1/g' /etc/locale.gen
kommentieren en_US.UTF-8 UTF-8:
sed -i 's/en_US.UTF-8.*/#&/g' /etc/locale.gen
Tastaturlayout permanent für die Schweiz einstellen
echo LANG=de_CH.UTF-8 > /etc/locale.conf echo KEYMAP=sg-latin1 > /etc/vconsole.conf ln -s /usr/share/zoneinfo/Europe/Zurich /etc/localtime
HardwareUhr auf UTC stellen. Lokalzeit kommt von Zeitzonenangabe
timedatectl set-local-rtc 0
Nach der Konfiguration werden die Locales generiert
locale-gen
Zeit überprüfen
timedatectl status
systemctl status systemd-timesyncd
ODER mit journalctl
journalctl -u systemd-timesyncd.service
pacman -Syy pacman -S archlinux-keyring pacman-key --init pacman-key --populate archlinux
nano /etc/pacman.d/mirrorlist
gewünschte Spiegelserver z.B. Deutschland auskommentieren CTRL-X = beenden
pacman -Scc pacman -Sy pacman -S wget rsync
nano /etc/pacman.conf /etc/pacman.conf bearbeiten
UseDelta = 0.7
System aktualisieren
pacman -Syu
FIX boot/config.txt
cat /boot/config.txt | grep gpu
Ausgabe: gpumem=64 auf gpumem=320 ändern und USB Stromversorgung sicherstellen
nano /boot/config.txt
gpu_mem=320 max_usb_current=1
reboot
OPTIONAL User „alarm“ mit der UID=1000 löschen USER alarm löschen nicht über ssh möglich!!! über Bildschirm (tty) als root anmelden, password: root
userdel -rf alarm
USER einrichten (mit gelöschtem „alarm“)
useradd -m -G wheel -u 1000 -s /bin/bash neuerBenutzer
Passwort für neuen USER vergeben
passwd neuerBenutzer
optional Gruppen vergeben (je nach Bedarf)
usermod -aG games,rfkill,users neuerBenutzer usermod -aG storage,network,video,audio,power,log neuerBenutzer usermod -aG systemd-journal neuerBenutzer
für bluetooth
usermod -aG lp neuerBenutzer
Sudo kann ein Sicherheitsrisiko sein. Nur installieren wenn man es wirklich braucht.
pacman -S sudo
EDITOR=nano visudo
Auskommentieren für Mitglieder der Gruppe wheel ausführen von Befehlen erlauben
%wheel ALL=(ALL) ALL
ssh neuerBenutzer@raspbpi2
Passwort: wie oben vergeben Message-of-the-day löschen oder ändern
sudo nano /etc/motd
BASH helper
sudo pacman -S bash-completion
SCREEN
sudo pacman -S screen
HTOP
sudo pacman -S htop lsof strace
diverse Archiver
sudo pacman -S unace unarj unrar zip p7zip mtools cabextract
base-devel = develop Voraussetzungen (14 von 25 Paketen schon installiert gewesen)
sudo pacman -S abs base-devel
Netctl installieren
pacman -S netctl
Konfigurationsdatei kopieren und bearbeiten
sudo cp /etc/netctl/examples/ethernet-static /etc/netctl
sudo nano /etc/netctl/ethernet-static
Address=('192.168.1.61/24')
Gateway= '192.168.1.1'
DNS='192.168.1.1'
Gestartete Dienste anzeigen
systemctl --typ=service
Network.service beenden und deaktivieren
systemctl stop systemd-networkd.service systemctl disable systemd-networkd.service
Netzwerkadapter stoppen
sudo ip link set down dev eth0
Netctl starten und aktivieren
sudo netctl start ethernet-static sudo netctl enable ethernet-static
Bei Änderungen an netctl, Dienst neu aktivieren
sudo netctl reenable ethernet-static
USB-HDD anschliessen und mit blkid die UUID auslesen
sudo blkid
bei mir wird folgendes angezeigt
/dev/sda1: LABEL="WinDaten" UUID="A4A0-44AF" TYPE="vfat" PARTUUID="0005a791-01" /dev/sda2: LABEL="LinuxDaten" UUID="db3bacd1-c55c-49b1-9799-a148eaacfd5d" SEC_TYPE="ext2" TYPE="ext3" PARTUUID="0005a791-02
Die ermitellten UUID's mit den Mountpoints in /etc/fstab eintragen
sudo nano /etc/fstab
UUID=145188C22601432A /mnt/Win ntfs defaults,rw 0 0 UUID=4fa08102-f8b1-4664-8264-f07a56ccee0e /mnt/Linux ext4 defaults,rw 0 0
Hier mal den Raspi neu starten schadet nicht
sudo reboot
Jetzt die USB-HDD einbinden
sudo mount -a
sudo pacman -S samba
Samba verwendet Systembenutzer. Daher legen wir einen neuen Benutzer ohne Login und ohne Passwort an
sudo adduser --disabled-password --disabled-login BenutzerName
Diesen Benutzer auch in Samba anlegen
sudo smbpasswd -a BenutzerName
sudo cp /etc/samba/smb.conf.default /etc/samba/smb.conf
sudo nano /et/samba/smb.conf
folgendes soll angepasst werden
# Global Parmeters
[Global]
workgroud = Workgroup
netbios name = <HOSTNAME-DES-RASPI>
security = User
# Share
[Verzeichnisname]
path = /mnt/Win/Verzeichnisname
valid users = <DER-ZUVOR-ANGELEGTE-BENUTZER>
read only = No
create mask = 0777
directory mask = 0777
sudo systemctl start smbd.service testparm -s
Für den externen Zugriff auf das NAS benötigen wir als erstes eine Port-Weiterleitung. Diese richten wir komfortabel in unserem Router ein.
Port 22 (SSH) soll auf unseren Raspi weitergeleitet werden.
Der externe Zugriff funktioniert nur über die Öffentliche-IP. Da diese aber meistens in der Nacht geändert wird, behelfen wir uns einem Skript und senden die öffentliche IP an unsere E-Mail-Adresse.
Als erstes aber ermitteln wir die IP
curl -s http://canhazip.com
Damit wir das Skript versenden können, benötigen wir ssmtp.
sudo pacman -S ssmtp
sudo nano /etc/ssmtp/ssmtp.conf
# # /etc/ssmtp.conf -- a config file for sSMTP sendmail. # # The person who gets all mail for userids < 1000 # Make this empty to disable rewriting. root=DEIN-ABSENDER-NAME@DOMAIN.TLD # The place where the mail goes. The actual machine name is required # no MX records are consulted. Commonly mailhosts are named mail.domain.com # The example will fit if you are in domain.com and you mailhub is so named. mailhub=SMTP-SERVER:465 # Where will the mail seem to come from? rewriteDomain=DOMAIN.TLD # The full hostname hostname=(none) AuthUser=BENUTZERNAME-VON-MAILADRESSE AuthPass=PASSWORT-VON-MAILADRESSE FromLineOverride=YES UseTLS=YES
Mit der öffentlichen IP und dem ssmtp können wir jetzt unsere Benachrichtigung einrichten.
Als erstes erstellen wir ein Skript „ExtIP.sh“.
#/bin/bash sleep 2m curl -s http://canhazip.com | mail -s "externeIP" dein@mailadress.tld
Jetzt konfigurieren wir einen Cronjob
crontab -e
Der Raspi soll uns drei mal am Tag (7:00, 12:00, 20:00) die IP mitteilen. Dazu schreiben wir in den Crontab folgendes:
0 7,12,20 * * * curl -s http://canhazip.com | mail -s "externeIP" dein@mailadress.tld
Wir speichern CTRL+O und schliessen CTRL+X nano.
Wollen wir das Skript auch beim booten ausführen, müssen wir einen Cronjob als root erstellen
su crontab -e
Hier nehmen wir jetzt das Skript mit dem sleep 2m und tragen es in den cronjob ein. Hier wird auch die USB-Platte beim booten eingebunden.
@reboot /home/pitom/ExtIP.sh @reboot root mount -a
Wenn wir jetzt unseren Raspi rebooten, können wir testen ob das Skript funktioniert.