All pastes #885478 Raw Edit

Miscellany

public text v1 · immutable
#885478 ·published 2008-01-30 22:43 UTC
rendered paste body
#!/bin/bash


# Change the next two variables to save some mouse clicks if you always have your
# source.iso and chroot dir in the same locations. NO TRAILING SLASH!

DESTDIR=/tmp/chroot	# Change this to your preferred chroot destination.
SRCDIR=/home/$LOGNAME	# Change this to preferred iso source location.

app="VL2chroot"		# Name of this script.

unset MYGUI

  if [ "$DISPLAY" ] || ! skill -n "X" &>/dev/null; then
    MYGUI=1
    if [ -z $MYGUI ]; then
       echo "No X server running; we can't run zenity"
       exit 1
    fi
  fi

if [ ! -x /usr/bin/zenity ]; then
    echo "zenity is not installed or not executable"
    echo "This script is worthless without it.  Bye..."
    exit 1
fi

if [ $UID != 0 ]; then
	zenity --error --title "${app}" --text="You need to be root to run me."
	exit 1
fi

# Little "progress" thingie while extracting packages.

spanner(){
PROC=$1;COUNT=0
echo -n "Please wait  "
while [ -d /proc/$PROC ];do
  while [ "$COUNT" -lt 10 ];do
    echo -ne '\033[1;34m|' ; sleep 0.1
    ((COUNT++))
  done
  until [ "$COUNT" -eq 1 ];do
    echo -ne '\b\b\033[1;34m|' ; sleep 0.1
    ((COUNT -= 1))
  done
done
echo -e '\b\b\b\b\b\b\b\b\b\b\b\b\b\b\033[1;32m [DONE]                '
tput sgr0
}

CWD=$(pwd)

MNT=/mnt/loop
umount $MNT > /dev/null 2>&1

bail () {
  zenity --error --text="${1}\nAborting"
  umount $MNT > /dev/null 2>&1
  exit 1
}

HRLINE="_____________________________________________________________________________________\n\n\n"

text="This utility will help you create a clean chroot\nenviorment from a \
Vectorlinux iso.\n${HRLINE}Would you like to begin by selecting your \
ISO now? Click OK to continue, Cancel to abort."

zenity --question --title "${app}" --width 400 --height 250  --text "$text" || bail "Maybe next time ;)"
ISO=$(zenity --file-selection --title "${app}- Please select ISO file." --filename=$SRCDIR/) || bail "You closed the browser dialog"


while [ ${ISO/*./} != iso ]; do
    ISO=$(zenity --file-selection --title "${app}- Not valid .iso, please reselect." --filename=$SRCDIR/) || bail "You closed the browser dialog"
done



CHROOT="${DESTDIR}/$(basename $ISO .iso)"

text="You selected:\n$ISO\n\nBased on the iso name, your chroot will \
be:\n$CHROOT\n${HRLINE}Click OK to accept, Cancel to select your own directory."

zenity --question --title "${app}- Destination chroot dir" --width 400 --height 250  --text "$text" || CHROOT=$(zenity --file-selection --title "${app}- Select or create chroot dir." --directory --filename=$DESTDIR/) || bail "You closed the browser dialog"



mount -o loop $ISO $MNT || bail "Couldn't mount ISO"
. $MNT/veclinux/SETUP.CONF

STATUS=""

REQUIRED_BULK="veclinux.tlz vlconfig.tlz"
REQUIRED_BULK_LAST="vlconfig2.tlz"
OPTIONAL_BULK=$(cd $MNT/veclinux/optional; ls *t?z)
OPTIONAL_PACKAGES=$(cd $MNT/packages; ls -R */*t?z)


for OPTIONALPKGS in $OPTIONAL_PACKAGES; do
 OPTIONALPKGS_GUI="$OPTIONALPKGS_GUI TRUE $OPTIONALPKGS "
done

for OPTIONALBULK in $OPTIONAL_BULK; do
 OPTIONALBULK_GUI="$OPTIONALBULK_GUI TRUE $OPTIONALBULK "
done

STATUSUPDATE () {
  STATUS="$STATUS$1"
}

STATUSUPDATE "Source iso:\t\t$ISO\nDestination chroot:\t$CHROOT\n"

text="Please select all OPTIONAL BULK packages you would like to install. \
\nThe following bulk packages are required and will be installed:"

BULKPKGS=$(zenity --list --title "${app}- Select optional bulks" --width 400 --height 300 --text "${STATUS}${HRLINE}${text}\n\n\t\t\t$REQUIRED_BULK $REQUIRED_BULK_LAST" \
	--checklist --column "Pick" --column "Optional Bulk Packages"  $OPTIONALBULK_GUI --separator=" ") || bail

STATUSUPDATE "Required bulks:\t$REQUIRED_BULK $REQUIRED_BULK_LAST\nOptional bulks:\t\t$BULKPKGS\n"

text="Please select all packages you would like installed and click OK\nClicking \
Cancel will abort this Wizard.\n\nCareful not un-check needed packages!"

PKGS=$(zenity --list  --title "${app}- Select packages" --width 400 --height 500 --text "${STATUS}${HRLINE}${text}" \
	--checklist --column "Pick" --column "Packages"  $OPTIONALPKGS_GUI --separator=" ") || bail
PKGCOUNT=0
for PACK in $PKGS; do  
  TIDYPKGS="$TIDYPKGS\t\t\t\t$PACK\n"
  ((PKGCOUNT++))
done

STATUSUPDATE "\nAdditional packages:\n\n${TIDYPKGS}\n"

text="Enter your VectorLinux packager name.
\"export VL_ PACKAGER=YOURNAME\" 
Will be added to /etc/profile.d in your new chroot.

Leave blank or cancel to disregard."

VL_PACKAGER="$(zenity --entry  --title "${app}- Packager name" --text "$text" --entry-text="${VL_PACKAGER:-""}")"

if [ ! -z "$VL_PACKAGER" ]; then
   STATUSUPDATE "VL_PACKAGER:\t\t$VL_PACKAGER\n"
else
   STATUSUPDATE "VL_PACKAGER:\t\tUntouched\n"
   unset VL_PACKAGER
fi

if [ $(echo $VERSION | cut -d " " -f1 | sed 's|\.||') -ge "59" ]; then
   # toolchain is capable of handling gnu hash

   text="The LDFLAGS can be set to optimize with \"-Wl,--hash-style=gnu\". \
Click \"OK\" to have these flags exported in the chroot, or \
\"Cancel\" to leave them unchanged."

   zenity --question  --title "${app}- LDFLAGS" --width 400 --text "${STATUS}${HRLINE}${text}"

   if [ $? = "0" ]; then
      GNUHASH="yes"
      STATUSUPDATE "LDFLAGS:\t\t\t-Wl,--hash-style=gnu\n"
   else
      GNUHASH="no"
      STATUSUPDATE "LDFLAGS:\t\t\tUntouched\n"
   fi
fi

text="If your network is up when we create the chroot, we can install the \
\"requiredbuilder\" package. The new chroots /etc/slapt-get/slap-getrc \
will be modified to enable \"testing\", and then slapt-get will be run and \
updated, finally requiredbuilder will be installed. This will be done \
automatically for you when the chroot is created. To accept all this, \
click \"OK\" to decline, click \"Cancel\"."

zenity --question  --title "${app}- Ready chroot for action" --width 400 --text "${STATUS}${HRLINE}${text}"
if [ $? = "0" ]; then
   REQUIREDBUILDER="yes"
   STATUSUPDATE "slapt-get:\t\t\tTo be updated\nrequiredbuilder:\tTo be installed\n"
else
   REQUIREDBUILDER="no"
   STATUSUPDATE "slapt-get:\t\t\tUntouched\nrequiredbuilder:\tNot be installed\n"
fi

text="Please review all information above and click OK to proceed with chroot \
creation. Click Cancel to abort."

zenity --question  --title "${app}- Ready to create chroot?" --width 400 --text "${STATUS}${HRLINE}${text}" || bail

#make the chroot dir
mkdir -p $CHROOT

#change to the chroot dir
cd $CHROOT

CONFIGTXT="Enter-and-configure-new-chroot."

ALLPKGS="$REQUIRED_BULK $BULKPKGS $PKGS $REQUIRED_BULK_LAST $CONFIGTXT"





#extract the bulks
for BULKS in $REQUIRED_BULK; do
  echo -n "Extracting required bulk: $(basename $BULKS), "
  lzma -cd $MNT/veclinux/required/${BULKS} | tar xp > /dev/null 2>&1 & spanner $!
unset NUMLINE
done

#extract optional bulks
for OPTBULKS in $BULKPKGS; do
  echo -n "Extracting optional bulk: $(basename $OPTBULKS), "
  lzma -cd $MNT/veclinux/optional/${OPTBULKS} | tar xp > /dev/null 2>&1 & spanner $!
done


for PKG in $PKGS; do
  echo -n "Installing: $(basename $PKG), "
  installpkg -R $(pwd) $MNT/packages/$PKG > /dev/null 2>&1 & spanner $!
done


#extract the vlconfig2 bulk last
  echo -n "Extracting required bulk: $REQUIRED_BULK_LAST, "
  lzma -cd $MNT/veclinux/required/$REQUIRED_BULK_LAST | tar xp > /dev/null 2>&1 & spanner $!

CONFIGCHROOT () {
   # Setting timezone to your current settings.
   cp -a /etc/localtime* etc/

   # I can't access the network in chroot without it.
   cp -a /etc/resolv.conf etc/

   # Disable xmodmap in roots .bashrc.  Causes ugliness when chrooting.  And in this wizard.
   sed -i 's|xmodmap|#xmodmap|' root/.bashrc

   # create /etc/vector-version
   
   if [ "$VERSION" = '5.8 Standard Final' ]; then
      builddate='12-16-06'
   fi

   echo "$VERSION built on $builddate (chroot)" > etc/vector-version

   # Simple edit so hostname in chroot terminal is switched to "basename of iso (CHROOT)".
   # Less confusing when multiple terminal windows open.
   sed -i 's|PS_CYAN}\\h:|PS_CYAN}'"$(basename $ISO .iso)"' (CHROOT):|' etc/profile.d/vasm.sh

if [ ! -z "$VL_PACKAGER" ]; then
  echo "export VL_PACKAGER=\"$VL_PACKAGER\"" >> etc/profile.d/vasm.sh
fi

if [ $GNUHASH = "yes" ]; then
   echo 'export LDFLAGS="-Wl,--hash-style=gnu"' >> etc/profile.d/vasm.sh
fi

   # Create temporary script to run in chroot and setup stuff.
   cat > setup << EOF
#!/bin/bash

source /etc/profile
echo "Working as chroot for first time"
sleep 2
echo "caching fonts..."
/usr/bin/fc-cache
echo "updating libraries..."
/sbin/ldconfig
EOF

if [ $REQUIREDBUILDER  = "yes" ]; then
   VER=$(echo $VERSION | cut -d " " -f1)
   if [ $(ls var/log/packages/|grep bash|cut -d "-" -f3) = "x86_64" ]; then
      REPODIR=VL64-${VER}
   else
      REPODIR=veclinux-${VER}
   fi
   echo "SOURCE=ftp://ftp.osuosl.org/pub/vectorlinux/$REPODIR/testing/" >> etc/slapt-get/slapt-getrc
   echo "slapt-get --update" >> setup
   echo "slapt-get --install requiredbuilder" >> setup
fi

   cat >> setup << EOF
sleep 2
exit
EOF

   chmod +x setup

   # Entering chroot and running that script in new terminal.
   xterm -title "Setting up Chroot $CHROOT..." -geometry -0+0 -fa Mono -fs 12 -fg white -bg black -cr green -sb -rightbar -j \
         -e "chroot . ./setup" || bail
   # Not everyone will have xfce and Terminal. Comment out 2 above lines, and uncomment line below
   # if you prefer Terminal.
   #terminal -e "chroot . ./setup" --title="Setting up Chroot $CHROOT..." || bail
}



echo -n "Configuring new chroot, "
CONFIGCHROOT > /dev/null 2>&1  & spanner $!

# Done, now cleanup.
rm setup
cd $CWD
umount $MNT

text="Your new chroot is ready in:\n$CHROOT\nEnter the directory in a \
terminal and run: \"chroot . /bin/bash\""

zenity --info  --title "${app}- Chroot complete" --text "$text"