Hallo zusammen,
irgendwie hatte mich der Hinweis von meigrafd wegen der Möglichkeit eines netinstallers ( -> hier <- ) nicht mehr losgelassen, und so habe ich das mal ausprobiert.
Das Teil finde ich in der Tat äusserst praktisch. Anschliessend habe ich mit "apt-get install" das System "aufgebohrt". Mein Ziel war, eine Plattform für eine komplexe Steuerung zu haben, die sowohl I2C, SPI und rs232 unterstützt und das Kameramodul inklusive raspistill, raspivid und vor allem vlc zur Verfügung stellen.
Zudem wollte ich mindestens zwei Versionen gcc und g++ haben, screen sollte funktionieren, die git-Tools sowie die Entwickler-Tools wie make, cmake, ... sollten ebenfalls vorhanden sein.
Als Libraries mussten die wiringPi, die bcm2835 und die pigpio auch noch drauf und dazu ffmpeg sowohl als packet als auch als Source.
Schliesslich sollte noch ein HTTP-Server sowie eine mysql-Datenbank zur Verfügung stehen.
Ich habe jetzt die einzelnen Schritte mal dokumentiert und hin und wieder einen Zwischenbilanz der SD-Kartenbelegung gemacht.
Als SD-karte habe ich eine 4GB Sandisk verwendet ... also, auf geht's
Schritt 1: Netinstaller - SD-Karte vorbereiten, Installation duchlaufen lassen, Grundeinstellungen vornehmen
Die Installation des Minimal-System nach der Anleitung Anleitung auf raspbian-ua-netinst durchführen:
Spoiler anzeigen
- Image downloaden:
https://github.com/debian-pi/rasp…releases/latest - Image auf die SD-Karte flashen:
xzcat /path/to/raspbian-ua-netinst-<latest-version-number>.img.xz > /dev/sdX
Nach abgeschlossener Installation ein paar Grundeinstellungen vornehmen:
Spoiler anzeigen
- login
user root, password raspbian - Neues root pw setzen
passwd - Locales konfigurieren:
dpkg-reconfigure locales - timezone einstellen:
dpkg-reconfigure tzdata - Optimale Einstellungen der cmdline.txt installieren:
apt-get install raspi-copies-and-fills - Swap erzeugen:
dd if=/dev/zero of=/swap bs=1M count=512 && mkswap /swap - Swap einhängen in fstab (and Ende der fstab folgende Zeile anfügen):
/swap none swap sw 0 0
Schritt 2: Das System aktualisieren und die i2c-tools installieren
Spoiler anzeigen
- apt-get update
- apt-get upgrade
- apt-get dist-upgrade
- apt-get install -y i2c-tools
Dann die Datei /etc/modules anpassen:
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.
#
# sound devices
snd-bcm2835
# SPI devices
spi-dev
# I2C devices
i2c-dev
# 1-Wire devices
#w1-gpio
# 1-Wire thermometer devices
#w1-therm
Alles anzeigen
Schritt 3: Verschiedene Versionen von gcc und g++ sowie diverse Tools installieren
gcc-4.7, gcc-4.8, gcc-4.9 sowie g++-4.7, g++-4.8, g++-4.9 und gcc installieren:
Spoiler anzeigen
- jessi aktivieren - folgende Zeile als /etc/apt/sources.list.d/jessie.list abspeichern:
deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi - Packages aktualisieren
apt-get update - gcc-4.7 und g++-4.7 installieren
apt-get install -y gcc-4.7 g++-4.7 - gcc-4.8 und g++-4.8 installieren
apt-get install -y gcc-4.8 g++-4.8 - gcc-4.9 und g++-4.9 installieren
apt-get install -y gcc-4.9 g++-4.9 - gcc installieren
apt-get install -y gcc
Die einzelnen gcc- und g++-Versionen umschaltbar machen:
Spoiler anzeigen
- gcc-4.7
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 40 - gcc-4.8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 20 - gcc-4.9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 50 - g++-4.7
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.7 40 - g++-4.8
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 20 - g++-4.9
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 50
Die automatisch beim Aufruf von gg verwendete gcc-Version kann mit
eingestellt werden.
Jetzt noch ein paar Entwickler-Tools wie make, automake, ncurses5-dev sowie netcat und die apt-utils installieren:
Spoiler anzeigen
- automake
apt-get install -y automake - make
apt-get install -y make - apt-utils
apt-get install -y apt-utils - libncurses5-dev
apt-get install -y libncurses5-dev - netcat-traditional
apt-get install -y netcat-traditional
Das war jetzt mal ein Teil der von mir gewollten packages. Die C- und C++-Compiler sowie die I2C Tools sind schon mal drauf.
Karten-Belegung: an diesem Punkt der Installation sind etwa 36% der 4GB Karte belegt.
Schritt 4: HTTP-Server, PHP und mysql installieren
Spoiler anzeigen
- lighttpd installieren
apt-get install -y lighttpd - lighttpd-Installation prüfen
/etc/init.d/lighttpd status - PHP5 installieren
apt-get install -y php5-common php5-cgi php5 - php in lighttpd aktivieren
lighty-enable-mod fastcgi-php - cgi in lighttpd aktivieren
lighty-enable-mod cgi - lighttpd restarten
/etc/init.d/lighttpd force-reload - mysql installieren
apt-get install -y mysql-server mysql-client php5-mysql
Achtung: Bei der Passwort-Vergabe für den user DB-root wird nichts (auch keine Sternchen oder Leerzeichen) angezeigt - zumindest nicht, wenn die Installation über ssh läuft.
Das Passwort wird aber trotzdem angenommen.
Karten-Belegung: an diesem Punkt der Installation sind etwa 41% der 4GB Karte belegt.
Schritt 5: pigpio-, wiringPi- und bcm2835-Library, einige weitere Tools installieren und mal alles aufräumen und updaten
Spoiler anzeigen
Weitere Tools wie unzip, git-core, ... installieren
- unzip installieren
apt-get install -y unzip - git-core installieren
apt-get install -y git-core - build-essential installieren
apt-get install -y build-essential - cmake installieren
apt-get install -y cmake - flex installieren
apt-get install -y flex - bison installieren
apt-get install -y bison
Libraries installieren - pigpio
- ins home Verzeichnis wechseln
cd - pigpio downloaden
wget http://abyz.co.uk/rpi/pigpio/pigpio.zip - pigpio entpacken
unzip pigpio.zip - Verzeichnis wechseln
cd PIGPIO - pigpio erzeugen
make - Makefile ändern
alle sudo entfernen, python Zeile auskommentieren - pigpio installieren
make install
Libraries installieren - wiringPi
- ins home Verzeichnis wechseln
cd - wiringPi Download vorbereiten
git clone git://http://git.drogon.net/wiringPi - Verzeichnis wechseln
cd wiringPi - wiringPi downloaden
git pull origin - build-script editieren
alle sudo entfernen - wiringPi erzeugen und installieren
./build
Libraries installieren - bcm2835
- ins home Verzeichnis wechseln
cd - bcm2835 downloaden
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.37.tar.gz - bcm2835 entpacken
tar zxvf bcm2835-1.37.tar.gz - Verzeichnis wechseln
cd bcm2835-1.37 - Konfigurations-script aufrufen
./configure - bcm2835 Library erzeugen
make - den build überprüfen
make check - bcm2835 installieren
make install
Achtung: die bcm2835-Version kann abweichen!
Jetzt mal etwas aufräumen, die Paketlisten aktualisieren und alle ausstehenden Updates installieren. das mache ich in einem Aufwasch.
Achtung: Bei Abfrage der Passwort-Authentifizierung diese nicht deaktivieren!
Karten-Belegung: an diesem Punkt der Installation sind etwa 45% der 4GB Karte belegt.
Es ist Zeit den RPi mal neu zu starten ...
Schritt 6: raspi-config, vlc, einiges an Video- und anderen Tools sowie raspistill und raspivid installieren. User pi und user robot anlegen und konfigurieren
Spoiler anzeigen
vlc, sudo, screen, raspi-config und ffmpeg installieren
- vlc installieren
apt-get install -y vlc - sudo installieren
apt-get install -y sudo - screen installieren
apt-get install -y screen - raspi-config installieren
apt-get install -y raspi-config - ffmpeg installieren
apt-get install -y ffmpeg
Die Benutzer pi und robot will ich für die Entwicklung verwenden. Beide sollen aber notfalls (durch sudo) mit root-Rechten ausgestattet sein.
- Benutzer robot anlegen
Adduser robot - Benutzer pi anlegen
adduser pi - sudo einrichten für pi und robot
visudo - folgende Zeile für user robot hinzufügen:
robot ALL=NOPASSWD:ALL - folgende Zeile für user robot hinzufügen:
pi ALL=NOPASSWD:ALL - user robot zu Gruppe sudo hinzufügen
usermod robot --group sudo - user pi zu Gruppe sudo hinzufügen
usermod pi --group sudo
Jetzt raspistill und raspivid installieren.
Ich nehme da die Sourcen, damit ich notfalls was ändern kann. Das Erzeugen dauert so ca. eine gute Stunde.
- Verzeichnis wechseln
cd /usr/src - Sourcen downloaden
git clone git://http://github.com/raspberrypi/userland.git - Verzeichnis wechseln
cd userland - arm-linux.cmake mit sed editieren
sed -i 's/if (DEFINED CMAKE_TOOLCHAIN_FILE)/if (NOT DEFINED CMAKE_TOOLCHAIN_FILE)/g' makefiles/cmake/arm-linux.cmake - build Verzeichnis erstellen
mkdir build - Verzeichnis wechseln
cd build - Makefile(s) erzeugen
cmake -DCMAKE_BUILD_TYPE=Release .. - Programme erzeugen
make - Die Programme liegen im Unterverzeichnis bin
ls bin - raspivid und raspistill installieren
make install
Jetzt noch mal sicherheitshalber aufräumen und updaten (wieder auf einen Schlag)
Karten-Belegung: an diesem Punkt der Installation sind etwa 63% der 4GB Karte belegt.
Es ist Zeit den RPi runter zu fahren und eine Image-Sicherung zu machen
Schritt 7: letzte Pakete installieren, Endkonfiguration durchführen
Spoiler anzeigen
ffmpeg als Sourcen installieren. Die wurden vorher schon auf dem RPi übersetzt, da der Compilerlauf über sieben Stunden dauert. Ich habe das Ergebis mit tar rachiviert und dann nach /usr/src/ffmpeg entpackt. Dieses Archiv hat komprimiert ca. 300 MB - ist also entpackt ein ganz schöner Klotz
// ffmpeg sourcen
// tar xvzf Archiv
Dann hätte ich gerne noch die Möglichkeit gehabt, Kernel Module mit der neuen Methode rpi-source neu zu erzeugen bzw. zu ändern.
Wie sich im Laufe der Installation aber herausstellte, gibt es für den jetzt aktuellen Kernel leider (noch?) keine passenden Sourcen. Ich hätte mir diese Schritte also schenken können. Trotzdem werde ich das von Zeit zu Zeit mal überprüfen.
- rpi-source installieren
sudo wget https://raw.githubusercontent.com/notro/rpi-source/master/rpi-source -O /usr/bin/rpi-source && sudo chmod +x /usr/bin/rpi-source && /usr/bin/rpi-source -q --tag-update - rpi-source aufrufen
rpi-source - meldet fehler wegen gcc ... gcc-Version umschalten
update-alternatives --config gcc - rpi-source aufrufen
rpi-source - meldet Fehler no source ... gcc-Version zurückschalten
update-alternatives --config gcc - raspi-config aufrufen um Kamera zu aktivieren
raspi-config - Kamera aktivieren
enable camera
reboot
Karten-Belegung: an diesem Punkt der Installation sind etwa 82% der 4GB Karte belegt.
Das jetzt aktuelle auf der SD installierte System ist Version 3.12-1-rpi
//EDIT
Nachtrag:
Ich habe jetzt mal ein wenig recherchiert, weil mir das mit den Kernel-Sourcen keine Ruhe gelassen hat.
Die aktuellen Kernel-Sourcen scheint man mit
- apt-get install linux-source-3.12
- apt-get install linux-headers-3.12
installieren zu können. Ich fürchte, dass raspi-source wohl gar nicht funktionieren wird, weil diese Sourcen aus einem anderen Repository sind.
Spoiler anzeigen
pi@pi:~$ sudo apt-get install linux-source-3.12
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
Die folgenden zusätzlichen Pakete werden installiert:
bc
Vorgeschlagene Pakete:
libqt4-dev pkg-config
Die folgenden NEUEN Pakete werden installiert:
bc linux-source-3.12
0 aktualisiert, 2 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Es müssen 80,2 MB an Archiven heruntergeladen werden.
Nach dieser Operation werden 80,3 MB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren? [J/n] J
Holen: 1 http://mirrordirector.raspbian.org/raspbian/ jessie/main bc armhf 1.06.95-9 [96,3 kB]
Holen: 2 http://mirrordirector.raspbian.org/raspbian/ wheezy/main linux-source-3.12 all 3.12.9-1+rpi1 [80,1 MB]
Es wurden 80,2 MB in 5 min 28 s geholt (244 kB/s).
Vormals nicht ausgewähltes Paket bc wird gewählt.
(Lese Datenbank ... 33593 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von .../bc_1.06.95-9_armhf.deb ...
Entpacken von bc (1.06.95-9) ...
Vormals nicht ausgewähltes Paket linux-source-3.12 wird gewählt.
Vorbereitung zum Entpacken von .../linux-source-3.12_3.12.9-1+rpi1_all.deb ...
Entpacken von linux-source-3.12 (3.12.9-1+rpi1) ...
Trigger für man-db (2.7.0.2-1) werden verarbeitet ...
bc (1.06.95-9) wird eingerichtet ...
linux-source-3.12 (3.12.9-1+rpi1) wird eingerichtet ...
pi@pi:~$ sudo apt-get install linux-headers-3.12
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
Note, selecting 'linux-headers-3.12-1-rpi' for regex 'linux-headers-3.12'
Note, selecting 'linux-headers-3.12-1-all-armhf' for regex 'linux-headers-3.12'
Note, selecting 'linux-headers-3.12-1-all' for regex 'linux-headers-3.12'
Note, selecting 'linux-headers-3.12-1-common' for regex 'linux-headers-3.12'
Die folgenden zusätzlichen Pakete werden installiert:
linux-compiler-gcc-4.7-arm linux-kbuild-3.12
Die folgenden NEUEN Pakete werden installiert:
linux-compiler-gcc-4.7-arm linux-headers-3.12-1-all
linux-headers-3.12-1-all-armhf linux-headers-3.12-1-common
linux-headers-3.12-1-rpi linux-kbuild-3.12
0 aktualisiert, 6 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Es müssen 5.454 kB an Archiven heruntergeladen werden.
Nach dieser Operation werden 30,4 MB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren? [J/n] J
Holen: 1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main linux-compiler-gcc-4.7-arm armhf 3.12.9-1+rpi1 [232 kB]
Holen: 2 http://mirrordirector.raspbian.org/raspbian/ wheezy/main linux-headers-3.12-1-common armhf 3.12.9-1+rpi1 [4.368 kB]
Holen: 3 http://mirrordirector.raspbian.org/raspbian/ jessie/main linux-kbuild-3.12 armhf 3.12.6-1+rpi1+b2 [140 kB]
Holen: 4 http://mirrordirector.raspbian.org/raspbian/ wheezy/main linux-headers-3.12-1-rpi armhf 3.12.9-1+rpi1 [251 kB]
Holen: 5 http://mirrordirector.raspbian.org/raspbian/ wheezy/main linux-headers-3.12-1-all-armhf armhf 3.12.9-1+rpi1 [232 kB]
Holen: 6 http://mirrordirector.raspbian.org/raspbian/ wheezy/main linux-headers-3.12-1-all armhf 3.12.9-1+rpi1 [232 kB]
Es wurden 5.454 kB in 23 s geholt (234 kB/s).
Vormals nicht ausgewähltes Paket linux-compiler-gcc-4.7-arm wird gewählt.
(Lese Datenbank ... 33666 Dateien und Verzeichnisse sind derzeit installiert.)
Vorbereitung zum Entpacken von .../linux-compiler-gcc-4.7-arm_3.12.9-1+rpi1_armhf.deb ...
Entpacken von linux-compiler-gcc-4.7-arm (3.12.9-1+rpi1) ...
Vormals nicht ausgewähltes Paket linux-headers-3.12-1-common wird gewählt.
Vorbereitung zum Entpacken von .../linux-headers-3.12-1-common_3.12.9-1+rpi1_armhf.deb ...
Entpacken von linux-headers-3.12-1-common (3.12.9-1+rpi1) ...
Vormals nicht ausgewähltes Paket linux-kbuild-3.12 wird gewählt.
Vorbereitung zum Entpacken von .../linux-kbuild-3.12_3.12.6-1+rpi1+b2_armhf.deb ...
Entpacken von linux-kbuild-3.12 (3.12.6-1+rpi1+b2) ...
Vormals nicht ausgewähltes Paket linux-headers-3.12-1-rpi wird gewählt.
Vorbereitung zum Entpacken von .../linux-headers-3.12-1-rpi_3.12.9-1+rpi1_armhf.deb ...
Entpacken von linux-headers-3.12-1-rpi (3.12.9-1+rpi1) ...
Vormals nicht ausgewähltes Paket linux-headers-3.12-1-all-armhf wird gewählt.
Vorbereitung zum Entpacken von .../linux-headers-3.12-1-all-armhf_3.12.9-1+rpi1_armhf.deb ...
Entpacken von linux-headers-3.12-1-all-armhf (3.12.9-1+rpi1) ...
Vormals nicht ausgewähltes Paket linux-headers-3.12-1-all wird gewählt.
Vorbereitung zum Entpacken von .../linux-headers-3.12-1-all_3.12.9-1+rpi1_armhf.deb ...
Entpacken von linux-headers-3.12-1-all (3.12.9-1+rpi1) ...
linux-compiler-gcc-4.7-arm (3.12.9-1+rpi1) wird eingerichtet ...
linux-headers-3.12-1-common (3.12.9-1+rpi1) wird eingerichtet ...
linux-kbuild-3.12 (3.12.6-1+rpi1+b2) wird eingerichtet ...
linux-headers-3.12-1-rpi (3.12.9-1+rpi1) wird eingerichtet ...
linux-headers-3.12-1-all-armhf (3.12.9-1+rpi1) wird eingerichtet ...
linux-headers-3.12-1-all (3.12.9-1+rpi1) wird eingerichtet ...
pi@pi:~$
Karten-Belegung: an diesem Punkt der Installation sind etwa 88% der 4GB Karte belegt.
Ich denke, mit ca. 500 MB freiem Speicher auf der SD-Karte sollte die Steuerungs-Software inkl. aller Sourcen locker noch Platz haben. So komplex kann die gar nicht werden ...
//EDIT
Fazit: Für meine Zwecke passt alles wunderbar auf eine 4GB Karte. Das hat den Riesen-Vorteil, dass ein Backup weniger Platz braucht und z.B. auf eine DVD passt. Sollte alles problemlos laufen und meine Sourcen sich übersetzen und ausführen lassen, wird auch kein Update mehr gemacht. Wozu auch? Wenn ich mir jetzt noch unbedingt eine GUI für die Steuerungs-Software einbilde, sollte ein kleines Desktop-Package auch noch Platz haben. Wenn nicht, wäre es eine durchaus denkbare Option z.B. die Kernel- und/oder ffmpeg-Sourcen auf einen USB-Stick oder eine kleine USB-Platte auszulagern.
Als nächstes werde ich mal versuchen, das Profil selbst zu definieren und damit praktisch die komplette Installation inkl. der meisten Zusatzpakete zu automatisieren.
Wie ich feststellen konnte, kann ich einige Pakete weglassen, das reduziert dann den benötigten Platz noch einmal.
Ich geb' dann wieder bescheid, wie es mir ergangen ist.
Viel Spass beim Nachbauen ...
-ds-
Quellen:
https://github.com/debian-pi/raspbian-ua-netinst
http://www.stuffaboutcode.com/2013/08/compil…d-raspivid.html
http://www.airspayce.com/mikem/bcm2835/
http://abyz.co.uk/rpi/pigpio/download.html
http://wiringpi.com/download-and-install/
http://www.gtkdb.de/index_36_2452.html
http://mirrors.fe.up.pt/raspbian/raspb…n/l/linux-3.12/