Etwa einmal im Jahr setze ich einen neuen Raspberry Pi auf. Einerseits überraschend oft, andererseits doch so selten, dass ich einige wichtige Installationsschritte (Mist...wieso interpretiert Apache die .htaccess-Datei nicht?) immer wieder nachgoogeln muss.

Anbei mein Raspberry-Standard-Use-Case, der hoffentlich auch noch in einem Jahr seine Gültigkeit hat.
Ich setze hierbei auf das Standard-Raspbian von raspberry.org, benötige nur Zugriff via SSH (kein Bildschirm angeschlossen/Headless) auf den Raspberry und so Standard-Kram wie mySQL...

System herunterladen und auf SD-Karte installieren

Ich lade immer das neuste Standard-Raspbian-Image von https://www.raspberrypi.org/software/operating-systems/ herunter und verzichte auf Noobs.
Die heruntergeladene .zip-Datei entpacken.

Mit Hilfsprogramm/AppleScript installieren

Am einfachsten bekommt man die Image-Datei mit dem AppleScript-Droplet PiFiller auf die SD-Karte.

Allerdings wollte das Droplet bei mir nicht so recht funktionieren. Ich musste erst folgende Zeilen im eigentlichen Skript

Contents > Resources > Scripts > main.scpt
mit vorangestellten -- auskommentieren.
Natürlich muss man nach dem Auskommentieren der Zeilen selbst sicher gehen, dass man eine .img-Datei auf das Droplet zieht und keine .zip-Datei, da die Prüfung auf passende Dateien de-aktiviert ist.

-- tell application "Finder" to set osStr to ((name of OSImageFile) as string)
-- if (osStr ends with ".zip") or (osStr ends with ".tgz") or (osStr ends with ".gz") or (osStr ends with ".z") or (osStr ends with ".bz") or (osStr ends with ".bz2") or (osStr ends with ".tar") then
-- display dialog "The operating system image file \"" & osStr & "\" is compressed. Please uncompress it by double-clicking it in the Finder, then run Pi Filler again using the resulting .img file." buttons "Quit" default button "Quit" with icon stop
-- error number -128
-- end if

Danach heruntergeladene .img-Datei auf das Droplet ziehen und den Anweisungen folgen.

Via Kommandozeile

# Nach (eingesteckter!) SD-Karte im Dateisystem suchen
df -h

# Karte identifizieren und auswerfen
umount /dev/disk1s2

# Als root die Image-Datei auf die Karte übertragen
dd bs=4M if=/pfad/zum/image.img of=/dev/disk1s2

Grundlegende Einrichtung

SSH

Früher hatte das Raspbian-System, welches man auf der oben genannten Seite herunterlädt und installiert, einen aktiven SSH-Zugriff.
Seit einiger Zeit ist der SSH-Zugriff im Raspbian-System allerdings werksseitig de-aktiviert.
Wie sinnvoll diese Sicherheitsmaßnahme ist, darüber lässt sich streiten. Will man einen Raspberry Pi ohne angeschlossenen Bildschirm und Tastatur einrichten, hat man jedenfalls ein Problem, sofern man folgenden kleinen Kniff nicht kennt:

So lange die SD-Karte noch im Computer (und noch nicht im Raspberry Pi) steckt, eine Datei mit dem Namen ssh (ohne Datei-Endung; Datei-Inhalt nicht notwendig) auf der Boot-Partition anlegen.
Diese sorgt beim ersten Booten dafür, dass SSH aktiviert wird und wird danach automatisch gelöscht.

WLAN

Hat man einen neueren Raspberry Pi mit On-Board-WLAN, macht es natürlich Sinn, auch diesen vor der ersten Inbetriebnahme einzurichten. Dafür die Datei wpa_supplicant.conf analog zur ssh-Datei auf der Boot-Partition der SD-Karte anlegen. Dieses Mal allerdings mit Inhalt:

wpa_supplicant.conf
country=DE
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
       ssid="wlan-bezeichnung"
       psk="passwort"
       key_mgmt=WPA-PSK
}

Neuster Stand

Nun kann's losgehen. SD-Karte in den Raspberry Pi stecken und eben jenen mit Netzwerk und Stromnetz verbinden, dann via SSH verbinden (Benutzername pi, Passwort raspberry) und erst einmal das System auf den neusten Stand bringen.

sudo apt-get update
sudo apt-get dist-upgrade

Pi einrichten

Das Öffnen des rasp-config-Programmes ist Pflicht, da man hier nicht nur Zeitzone und Landeseinstellungen vornehmen, sondern auch das Standard-Kennwort "raspberry" ändern kann...äh...sollte...äh...muss:

sudo raspi-config

Installation Standards

PHP

Apache ist standardmäßig in Raspbian enthalten, PHP leider nicht.

sudo apt-get install php
sudo apt-get install libapache2-mod-php7.0
sudo a2enmod rewrite # ModRewrite aktivieren

Damit .htaccess-Dateien interpretiert werden, folgende Zeilen zum VirtualHost *:80 hinzufügen:

/etc/apache2/sites-enabled/000-default.conf
<Directory /var/www/html>
   AllowOverride All
   Order allow,deny
   allow from all
</Directory>

sudo service apache2 restart

mySQL

sudo apt-get install mysql-server mysql-client php-mysql
sudo mysqladmin -u root password "neues_admin_passwort" # Passwort setzen
sudo mysql --user=root --password=neues_admin_passwort  # mysql-User einrichten

Nachdem sich die mySQL-Shell geöffnet hat, zwei Standard-Benutzer für den phpMyAdmin-pma-User und PHP/Apache-Zugriff einrichte:

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON *.* TO 'apache'@'localhost'  IDENTIFIED BY 'apache_passwort' WITH GRANT OPTION;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON pma.* TO 'pma'@'localhost'  IDENTIFIED BY 'pma_passwort' WITH GRANT OPTION;
exit

Samba / SMB

sudo apt-get install samba
sudo smbpasswd -a pi # SMB-Passwort für User "pi" setzen, da hier
                     # nicht automatisch das Account-Passwort verwendet wird

Meine Standard-Vorgaben und die zwei Samba-Freigaben für den Home- und Apache-Web-Ordner:

/etc/samba/smb.conf
[global]
   workgroup = NONE
   server string = %h Mein neuer Pi
   dns proxy = no
   security = user
   guest account = nobody
   map to guest = bad user
   encrypt passwords = true
   invalid users = root
   username map = /etc/samba/smbusers
   obey pam restrictions = yes
   unix password sync = yes
   unix extensions = no
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes

[homes]
   comment = Home Directories
   browseable = no
   read only = no
   valid users = %S

[www]
   comment = Web-root
   path = /var/www/html/
   public = no
   guest ok = no
   browsable = yes
   writeable = yes
   available = yes
   veto files = /.DS_Store/._.DS_Store/.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/
   delete veto files = yes

sudo service smbd restart

Sollen neben dem pi-User noch weitere Benutzer Samba-Zugriff haben, die aber ansonsten nichts mit dem Pi zu tun haben (also keinen SSH-Zugriff etc benötigen), lassen sich auf die folgende Weise noch weitere Accounts mit beschnittenen Rechten anlegen, die zum Zwecke des Samba-Zugriff genutzt werden können:

sudo adduser --no-create-home --disabled-login --shell /bin/false <benutzername>
sudo smbpasswd -a <benutzername>

phpMyAdmin

Für die Verwaltung der Datenbanken mein persönliches Muss.
Die neuste Version des phpMyAdmin lade ich immer in der .tar.gz-Version von meinem Computer aus herunter und schiebe sie per scp auf den Pi. Manche Dinge sind mit einem GUI einfach schneller erledigt, als per Kommandozeile.

Danach muss das Archiv auf dem Pi nur noch an die richtige Stelle entpackt und einige Abhängigkeiten installiert werden, bevor man das phpMyAdmin-Setup startet.

# In das Web-Root-Verzeichnis entpacken, umbenennen
# und für Setup erforderliches Config-Verzeichnis erstellen
sudo tar -xzf phpMyAdmin-x.x.x-all-languages.tar.gz -C /var/www/html/
rm phpMyAdmin-x.x.x-all-languages.tar.gz
cd /var/www/html/
sudo mv phpMyAdmin-x.x.x-all-languages phpMyAdmin
sudo mkdir phpMyAdmin/config
sudo chown www-data:root phpMyAdmin/config

# Ohne diese PHP-Erweiterungen läuft phpMyAdmin nicht...
sudo apt-get install php7.0-mbstring php7.0-mysqli php7.0-bz2 php7.0-zip
sudo service apache2 restart

Nun das Setup http://raspberry-ip/phpMyAdmin/setup im Browser aufrufen und nach Abschluss die generierte Konfiguration in das phpMyAdmin-Hauptverzeichnis schieben.

sudo mv /var/www/html/phpMyAdmin/config/config.inc.php /var/www/html/phpMyAdmin/
sudo rm -r /var/www/html/phpMyAdmin/config

FTP-Server

sudo apt-get install proftpd-basic

/etc/proftpd/proftpd.conf
UseIPv6 off
ServerName "Mein neuer Server"

/etc/proftpd/conf.d/proftp-custom.conf
# Ftp user doesn't need a valid shell
<Global>
    RequireValidShell off
</Global>
 
# Default directory is ftpusers home
DefaultRoot ~ ftpuser
 
# Limit login to the ftpuser group
<Limit LOGIN>
    DenyGroup !ftpuser
</Limit>

Separaten User erstellen, der für FTP-Zugriffe verwendet werden kann

sudo adduser ftpuser --shell /bin/false --home /var/www/upload

Und neu starten:

sudo service proftpd restart

Neuen Benutzer erstellen

Ggf. möchte man sich nicht oder nicht nur mit dem pi-User am Raspberry anmelden:
sudo useradd -d /home/apfelzuser -m apfelzuser # Neuen Benutzer inklusive Home-Directory anlegen
sudo passwd  apfelzuser                        # Passwort für Benutzer vergeben
sudo usermod -aG sudo apfelzuser               # Mit su-Rechten ausstatten
                                                # ...und noch anderen interessanten Gruppen hinzufügen...
sudo usermod -aG adm,dialout,cdrom,sudo,audio,video,games,users,input,netdev,spi,i2c,gpio apfelzuser
# ( mit dem Befehl `groups pi` könnte man ansonsten in Erfahrung )
# (  bringen, welchen Gruppen der Standard-Pi-User angehört      )
sudo chsh -s /bin/bash apfelzuser              # Login-Shell von sh auf bash umstellen

# Aus Sicherheitsgründen wäre es empfehlenswert, nach dem Anlegen
# des neuen Users sich als dieser anzumelden und dann den
# Standard-Pi-User zu löschen, da der Benutzername pi und das
# Passwort raspberry nicht sonderlich schwer zu erraten sind
sudo userdel -r pi