B
blob
Guest
Wie kann man denn, nach dem Starten einer Anwendung mit ROOT=/mnt/... anwendung ... oder innerhalb chroot, die root-device /dev/hdaX erhalten ??
In meinem Skript unten, Zeile 177 ff., wird ein skript install.sh gemacht, was dann von einem Programm aufgerufen wird, mit ROOT=/mnt/... installpkg ... oder aber via #chroot /mnt/... ; # installpkg . Momentan habe ich mangels besserer Idee für die Variable RDEV=/dev/hda2 fest vorgegeben, aber für vollständiges Funktionieren muß stattdessen die momentane root-device angegeben werden.
Das Haupt-Skript dient dazu, Pakete von Programmen zu machen, die dann typischerweise von dem Programm installpkg installiert werden, wobei dann aber die root-device anders sein kann als momentan verwendet; dazu wird dann selbige entweder durch vorigen Aufruf von chroot oder per ROOT=... vorgegeben. Es funktioniert soweit, läuft momentan für ein Paket vom Kernel 2.6.22 der gerade rauskam, hat aber noch kleine Probleme wie dieses.
In meinem Skript unten, Zeile 177 ff., wird ein skript install.sh gemacht, was dann von einem Programm aufgerufen wird, mit ROOT=/mnt/... installpkg ... oder aber via #chroot /mnt/... ; # installpkg . Momentan habe ich mangels besserer Idee für die Variable RDEV=/dev/hda2 fest vorgegeben, aber für vollständiges Funktionieren muß stattdessen die momentane root-device angegeben werden.
Das Haupt-Skript dient dazu, Pakete von Programmen zu machen, die dann typischerweise von dem Programm installpkg installiert werden, wobei dann aber die root-device anders sein kann als momentan verwendet; dazu wird dann selbige entweder durch vorigen Aufruf von chroot oder per ROOT=... vorgegeben. Es funktioniert soweit, läuft momentan für ein Paket vom Kernel 2.6.22 der gerade rauskam, hat aber noch kleine Probleme wie dieses.
Code:
#! /bin/bash
#
# Wo etwas zu ersetzen ist: mit %%% gekennzeichnet
#
DISTRO=mn # :) Paket von W.Landgraf MONKEYNET LINUX http://www.monkey.is-a-geek.net/tgz
# Pakete kompatibel mit Slackware current
#
#
# Das zu bauende Programm muß als <name-version>.tar.bz2 oder .tar.gz im Ordner $TARBZ2DIR (=/downloads/Programs normalerweise) sein,
# dazu eine Beschreibung in <>.slack-desc und vorliegende Datei entsprechend benannt und angepaßt <>.SlackBuild.
# Beim Kernel zusätzlich noch config-<version> (darin lokale_version geändert falls nicht -1mn)
# Falls ein patch vorhanden und anzuwenden, ferner noch patch-<version-patch> ; in diesem Fall m
# am Anfang sind dann Fragen zur Konfiguration des Kernels zu beantworten.
# Die den Bau von Kernel-Paketen betreffenden Punkte sind mit #### gezeichnet und so schnell auffindbar/aktivier- bzw desaktivierbar;
# zur Vermeidung verschiedener SlackBuild-Skripte und Fallunterscheidungen betrifft das nur unbedingt nötige Änderungen,
# Fehlermeldungen wegen sonstigen Nebensächlichkeiten ignorieren.
# Achtung: Der Paketname wird definitiv aus nachfolgenden Angaben zu NAMETGZ=$NAME-$VERSION$ZUSATZ-$ARCH-$BUILD gebildet;
# alle Dateien $NAME-$VERSION*.tgz oder .bz2 werden dazu zusammengesetzt und verwendet, ebenso egal der Name des darin
# enthaltenen Ordners !!!
# Nach Installierung der hier gebauten Pakete des Kernels nötig:
# * /etc/rc.d/rc.modules.new überprüfen, in ./rc.modules umwandeln ; * #rdev /boot/vmlinuz* /dev/hda1 ;
# * ggf. initrd bilden: #mkinitrd -c -k 2.6.22-rc7-git8-1mn -m jbd2:ext4dev:ext2:ext3:minix:reiserfs -r /dev/hda1 -f ext4dev ;
# * Eintrag in /etc/lilo.conf ; * #lilo ausführen/installieren ;
# * zur leichteren Benutzung ggf. in /boot links zu vmlinuz, System.map, config, initrd.gz ohne Version-Nr setzen
#
#
### ================ Paket zu bilden: Name, Version, Art, Hersteller
NAME=linux # %%% Name des Quelltextes .tar.bz2 NAME=linux
VERSION=2.6.22-rc7 # %%% [minimaler Teil von] Version des Quelltextes .tar.bz2 VERSION=2.6.22-rc7
ZUSATZ=-git7 #### # meist ="": Zusatz MIT -, im Namen .tgz gewünscht aber in NAME,VERSION der .tar.bz2 ggf nicht enthalten ZUSATZ=-git8
ARCH=i486 # %%% ARCH=i486
BUILD=1 # %%% BUILD=1mn #### !!! Achtung, für Kernel -$ARCH-$BUILD$DISTRO in config eingeben !!!
VERSIONTGZ=$VERSION$ZUSATZ-$ARCH-$BUILD$DISTRO # Version des Paketes VERSIONTGZ=2.6.22-rc7-git8-i486-1mn
NAMETGZ=$NAME-$VERSIONTGZ # kpl. Name des Paketes NAMETGZ=linux-2.6.22-rc7-git8-i486-1mn
NAMEVERSIONTARBZ2=$NAME-$VERSION # [minim. Teilmenge von] Name+Version des .tar.bz2 NAMEVERSIONTARBZ2=linux-2.6.22-rc7
echo "Paket: " $NAMETGZ
### ================ Ort von Quellpaket usw. .tar.bz2 TARBZ2; Baustelle TMP ; Quell-Entpackung SOURCEDIR
TARBZ2DIR=/downloads/Programs # später ohne /bsp Wo die downgeladenen *.tar.bz2 oder *.tar.gz sind
TMP=/tmp # nur für Kernel linux-
echo "Baustelle Quell-Entpackung / Paketbildung: " $TMP
# mkdir -p $TMP ... aber als schon vhd angenommen, bzw durch nachfolgende rekursive Anweisung erstellt
rm -r $TMP/src
mkdir -p $TMP/src # dorthin vorläufiges Entpacken, da Fallunterscheidung jenachdem wie Ordner im .tar.bz2 benannt
echo "Entpackung von Programm in: " $TMP/src
SRCSDIR=/usr/src #### Ordner, wo Sources sind, falls Kernel =/usr/src
####SRCSDIR=/usr/local/src #### NICHT Kernel =/usr/local/src
SOURCEDIR=$SRCSDIR/$NAMETGZ #### wohin .tar.bz2 entpakt wird: SOURCEDIR=/usr/src/ linux-2.6.22-rc7-i486-1mn
#rm -r $SOURCEDIR
mkdir -p $SOURCEDIR
echo "entpackter Quellkode kommt in: " $SOURCEDIR
PKG=$TMP/pkg
rm -r $PKG #### beim Kernel löschen # falls nicht Kernel, nicht löschen da/falls schon vorher getestet wurde ob Programm ok
mkdir -p $PKG/usr
echo "Struktur vom Paket kommt in Ordner: " $PKG
TGZ=$TARBZ2DIR/$NAMETGZ.tgz
rm -f $TGZ
echo "zu erstellendes Paket: " $TGZ
### ================ Entpacken
echo "relevante Eingabedateien: "
ls -l $TARBZ2DIR/*$VERSION*
echo "Entpacken nach: " $TMP " , vorläufig nach: " $TMP/src
tar -C $TMP/src -zxf $TARBZ2DIR/$NAMEVERSIONTARBZ2*.tar.gz # /downloads/Programs/prg-1.0.tar.gz --> /tmp/prg-1.0
tar -C $TMP/src -jxf $TARBZ2DIR/$NAMEVERSIONTARBZ2*.tar.bz2 # entweder .gz oder .bz2 , daher beide lassen
# Quellcode ist jetzt entpackt in: $TMP/src ohne Ordner; $TMP/src/NAME* ; oder sonstwo; nach besser definierten Ort $SOURCEDIR verschieben:
mv $TMP/src/$NAME*/* $SOURCEDIR # sehr wichtig , falls Version-Nr fehlt, oder Name Paket anders als Ordner
rm -r $TMP/src/$NAME*
mv $TMP/src/* $SOURCEDIR
### ================== Übersetzen, Installieren, Optimieren
echo "in Ordner vom entpackten Quellkode gehen : " $SOURCEDIR
cd $SOURCEDIR # cd /downloads/Programs/SlackBuild/prg-1.0 , --> .../pkg prg-1.0-i486-1mn.tgz erzeugen
cp /boot/config $SOURCEDIR/.config #### falls kein anderes config vhd , das vom lfnd. System verwenden
cp $TARBZ2DIR/config-$VERSION* $SOURCEDIR/.config #### ./config muss schon auf neuen Kernel angepasst sein, in .bz2 -Ordner
cp $TARBZ2DIR/patch-$VERSION* $SOURCEDIR
bzip2 -d $SOURCEDIR/patch-$VERSION*
patch -p 1 < $SOURCEDIR/patch-$VERSION*
ls -l
echo "make machen, make install nach .../pkg. "
echo "Konfiguration überprüfen - incl. Name/Patch, lokale Bezeichng - , ggf, korrigieren"
####CFLAGS="-march=$ARCH -mcpu=$ARCH" ./configure # --prefix=/usr # ergänzen durch geeignete Parameter
make silentoldconfig #### Kernel.
#sleep 9
make menuconfig #### Kernel, nochmals Chance die Einstellungen zu überprüfen, weg falls batch-Betrieb
make ### Kernel mit Option -kiB, übersetzen selbst wenn einige neue Module Probleme haben ...
make htmldocs #### Kernel
####make DESTDIR=$PKG install # NICHT Kernel; entweder/oder: DESTDIR= ; ROOT= ; prefix=
make install #### Kernel, normal installieren, evtl -kiB
make modules_install #### Kernel, Module installieren, evtl -kiB
make headers_install
make clean
rm /.config.old
cp -f $SOURCEDIR/.config /boot/config ### Kernel
cp /boot/config /boot/config-$VERSIONTGZ #### Kernel
cp /boot/vmlinuz /boot/vmlinuz-$VERSIONTGZ #### Kernel
cp /boot/System.map /boot/System.map-$VERSIONTGZ ### Kernel
#### ===================== Kernel: kopieren von Source, Kernel, Modules, rc-Skripts nach PKG=/tmp/pkg
echo "KERNEL SOURCE: kopieren: $SOURCEDIR nach $PKG$SRCSDIR"
echo " und link: ln -sf $SOURCEDIR $PKG$SRCSDIR/linux"
echo "$SOURCEDIR : "
ls $SOURCEDIR
mkdir -p $PKG$SRCSDIR #### Kernel: Quell-Kode $PKG/usr/src machen
cp -a $SOURCEDIR $PKG$SRCSDIR #### "
echo "ln -sf $SOURCEDIR $PKG$SRCSDIR/linux"
ln -sf $SOURCEDIR $PKG$SRCSDIR/linux #### link von /usr/src/linux-<Version> nach /usr/src/linux machen
echo "KERNEL MODULES: kopieren: /lib/modules/*$VERSIONTGZ* nach $PKG/lib/modules "
echo "/lib/modules/*$VERSIONTGZ* : "
ls /lib/modules/*$VERSIONTGZ*
mkdir -p $PKG/lib/modules #### Kernel: Module machen
cp -a /lib/modules/$VERSIONTGZ $PKG/lib/modules
echo "KERNEL MODULES KONFIG: kopieren: /etc/rc.d/rc.modules nach $PKG/etc/rc.d/rc.modules.new"
echo "/etc/rc.d/rc.modules : "
ls /etc/rc.d/rc.modules
mkdir -p $PKG/etc/rc.d #### Kernel: /etc/rc.d/rc.modules kopieren
cp /etc/rc.d/rc.modules $PKG/etc/rc.d/rc.modules.new
echo "KERNEL PROGRAMM: kopieren: /boot/$VERSIONTGZ* nach $PKG/boot"
echo "/boot/*$VERSIONTGZ* : "
ls /boot/*$VERSIONTGZ*
mkdir -p $PKG/boot #### Kernel: ausführbarer Kernel in /boot kopieren
cp /boot/*$VERSIONTGZ* $PKG/boot #### alle Kernel mit gl.Version kopieren da ggf. mehrere gebaut wurden
echo "KERNEL HEADER: move $PKG$SOURCEDIR/include nach $PKG$SRCSDIR/usr "
echo " und link ln -sf /usr/include $PKG$SOURCEDIR/include "
echo "$PKG$SOURCEDIR/include :"
ls $PKG$SOURCEDIR/include
#mkdir -p $PKG/usr #### Kernel: header kopieren
mv -f $PKG$SOURCEDIR/include $PKG/usr
echo "ls $PKG/usr/include : "
ls $PKG/usr/include
#rm $PKG$SOURCEDIR/include
ln -sf /usr/include $PKG$SOURCEDIR/include
#
############################
rdev -R $PKG/boot/vmlinuz* 0
rdev -v $PKG/boot/vmlinuz* 0
rdev -r $PKG/boot/vmlinuz* 0
#### Kernel fertig kopiert. Den Kernel nicht strippen, auch sonst nichts im Kernel-Paket
strip $PKG/bin/*
strip $PKG/sbin/*
strip --strip-unneeded $PKG/lib/*.so
strip $PKG/usr/bin/*
strip $PKG/usr/sbin/*
strip --strip-unneeded $PKG/usr/lib/*.so
strip $PKG/usr/local/bin/*
strip $PKG/usr/local/sbin/*
strip --strip-unneeded $PKG/usr/local/lib/*.so
#strip --strip-unneeded $PKG/usr/lib/$NAME/plugins/1.0.0/*.so # %%%
#strip --strip-unneeded $PKG/usr/lib/$NAME/plugins/1.0.0/post/*.so # %%%
#strip --strip-unneeded $PKG/usr/lib/$NAME/plugins/1.0.0/vidix/*.so # %%%
### ================== Dokumente: entweder nach /usr/doc (normal) oder nach prefix/doc
mv -f $PKG/usr/local/doc $PKG/usr/ # nach Standard-Platz kopieren
mv -f $PKG/usr/share/doc $PKG/usr/ # nach Standard-Platz kopieren
mv -f $PKG/usr/local/share/doc $PKG/usr/ # nach Standard-Platz kopieren
DOCDIR=$PKG/usr/doc/$NAMETGZ
mkdir -p $DOCDIR
mv -f $PKG/usr/doc/$NAME/* $DOCDIR # falsch
echo "Dokumente nach: " $DOCDIR
#cd $SOURCEDIR
cp -a \
AUTHORS COPYING CREDITS ChangeLog INSTALL NEWS README TODO \
$DOCDIR
gzip $PKG/usr/man/man1/* # man-pages zippen
### ================== SlackBuild und Text-File .txt kopieren
mkdir -p $PKG/install
cat $TARBZ2DIR/$NAMEVERSION*.SlackBuild > $DOCDIR/$NAMETGZ.SlackBuild # letztes *.SlackBuild --> /usr/doc/...
cat $TARBZ2DIR/$NAMEVERSION*.slack-desc > $PKG/install/slack-desc # /downloads/Programs/prog-1.0.slack-desc nach .../install
cat $TARBZ2DIR/$NAMEVERSION*.slack-desc > $TARBZ2DIR/$NAMETGZ.txt # " nach /downloads/Programs/prog-1.0-i486-1mn
### ================= Anweisungen im Skript der Installierung
cat << EOF > $PKG/install/doinst.sh
#
RDEV=/dev/hda2 # root-device wohin Kernel oder System installiert wird
RDEV0=/dev/hda # zugehöriges Gerät
rdev /boot/vmlinuz-$VERSIONTGZ $RDEV
echo "#
# hinzugefügt vom MonkeynetLinux Install-Programm
image = /boot/vmlinuz-$VERSIONTGZ
root = $RDEV
label = $VERSION$ZUSATZ
read-only
vga=791" >> /etc/lilo.conf # lilo config-File machen
lilo -b $RDEV0 # lilo installieren
linux_logo > /etc/issue
linux_logo > /etc.issue.net
cp -f /boot/map /boot/map-$VERSIONTGZ
echo "Kernel " $VERSIONTGZ "installiert nach " $RDEV " , LILO nach " $RDEV0 ":)"
echo "Nicht vergessen /etc/rc.d/rc.modules[.neu] zu überprüfen"
echo " und ggf. in /etc/lilo.conf automatischen Zusatz umbenennen/umsortieren"
echo " und #lilo nochmal laufen lassen"
echo "ggf. initrd bilden: #mkinitrd -c -k $VERSIONTGZ "
echo " -m jbd2:ext4dev:ext2:ext3:minix:reiserfs -r $RDEV -f ext4dev "
echo " danach Eintrag in /etc/lilo.conf: initrd=initrd.gz ; und #lilo ausführen"
#
EOF
### ================= Attribute setzen
chmod -R 755 $PKG/etc/rc.d/rc.modules.new
#chown -R root.root $PKG/usr/doc
#chmod -R 644 $PKG/usr/doc/$NAMEVERSIONTARBZ2/*
#chown -R root.root $PKG/usr/include
#chown -R root.root $PKG/usr/man
#chown -R root.root $PKG/usr/share
chown -R root.root $PKG
chown -R root.bin $PKG/bin # verschiedene Prioritäten setzen
chown -R root.bin $PKG/usr/bin # verschiedene Prioritäten setzen
chown -R root.bin $PKG/usr/local/bin # verschiedene Prioritäten setzen
### ==================== Paket aus Paket-Struktur ./pkg bilden
echo "Paket bilden: " $TGZ
cd $PKG
makepkg -l y -c n $TGZ # makepkg ... /downloads/Programs/prog-1.0-i486-1mn.tgz
cd $TARBZ2DIR
md5sum $TGZ > $TGZ.md5
### ==================== Falls mit --cleanup aufgerufen, säubern
if [ "$1" = "--cleanup" ]; then
rm -rf $SOURCEDIR
#rm -rf $PKG # schon in vorigem
fi
Last edited by a moderator: