Wie root-device von unter chroot oder ROOT=x gestarteten Anwendung aufrufen ??

  • Thread starter Thread starter blob
  • Start date Start date
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.

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:
Back
Top