Advertisement
Guest User

Untitled

a guest
Apr 15th, 2010
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.01 KB | None | 0 0
  1. #!/bin/bash -Eu
  2. # dependencies: avfs
  3.  
  4. STAGE3_URL="http://distfiles.gentoo.org/releases/x86/autobuilds/current-iso/stage3-i686-20100216.tar.bz2"
  5. SNAPSHOT_URL="http://distfiles.gentoo.org/releases/snapshots/current/portage-latest.tar.bz2"
  6.  
  7. function usage {
  8.   echo Usage: $0 CMD
  9.   echo where CMD in
  10.   echo init PATH        Create new GentooUSB in PATH
  11.   echo enter PATH   Enter GentooUSB env in PATH
  12. }
  13.  
  14.  
  15. function setup_vars {
  16.   CLEANING_UP=
  17.   DSTPATH=$1
  18.   STAGE3=$DSTPATH/downloads/stage3
  19.   SNAPSHOT=$DSTPATH/downloads/portagesnapshot
  20.   DISTFILES=$DSTPATH/downloads/distfiles
  21.   ROOT=$DSTPATH/rootfs
  22.  
  23.   DATA=$DSTPATH/data
  24.   DATA_STAGE3=$DATA/stage3
  25.   DATA_SNAPSHOT=$DATA/snapshot/usr
  26.   DATA_SNAPS=$DATA/snaps
  27.  
  28.   # list of temporary directories (are stored in DATA_TMP)
  29.   TMP_DIRS="tmp var/tmp"
  30. }
  31.  
  32.  
  33. function init {
  34.   setup_vars $1
  35.  
  36.   if [ -z $DSTPATH ]; then
  37.     echo ERROR: Please specify path!
  38.     usage
  39.     return
  40.   fi
  41.  
  42.   echo "Creating directory $DSTPATH (if it does not already exists)..."
  43.   mkdir -p $DSTPATH
  44.   mkdir -p $ROOT
  45.   rm -Rf $DATA
  46.   mkdir -p $DATA_SNAPS
  47.   mkdir -p $DATA_STAGE3
  48.   mkdir -p $DATA_SNAPSHOT
  49.   mkdir -p $DISTFILES/usr/portage/distfiles
  50.  
  51.   # get and unpack stage3
  52.   if [ ! -e $STAGE3 ]; then
  53.     echo Downloading latest stage3...
  54.     wget $STAGE3_URL -O $STAGE3
  55.   fi
  56.   echo tar xjvpf -C $DATA_STAGE3 $STAGE3
  57.   tar xjvpf $STAGE3 -C $DATA_STAGE3
  58.  
  59.   # get and unpack portage snapshot
  60.   if [ ! -e $SNAPSHOT ]; then
  61.     echo Downloading latest Portage snapshot...
  62.     wget $SNAPSHOT_URL -O $SNAPSHOT
  63.   fi
  64.   tar xjvpf $SNAPSHOT -C $DATA_SNAPSHOT
  65. }
  66.  
  67.  
  68. function prepare_chroot {
  69.   echo "Preparing chroot..."
  70.  
  71.   # prepare cleanup trap
  72.   trap cleanup_chroot ERR
  73.    
  74.   # build unionfs args
  75.  
  76.   # standard dirs
  77.   FS=""
  78.   FS="$FS:$DATA_SNAPSHOT/..=RO" # portage needs to be in /usr, thats why '..'
  79.   FS="$FS:$DATA_STAGE3=RO"
  80.   FS="$FS:$DISTFILES=RW"
  81.  
  82.   # append existings snaps
  83.   SNAP_LIST=`ls -1 $DATA_SNAPS | sort -n`
  84.   for i in $SNAP_LIST; do FS="$DATA_SNAPS/$i=RO:$FS"; done
  85.   # create new snap
  86.   LAST_SNAP=`ls -1 $DATA_SNAPS | sort -n | tail -n 1 | awk -F- {'print $1'}`
  87.   NEWSNAP=$DATA_SNAPS/$[$LAST_SNAP + 1]
  88.   mkdir $NEWSNAP
  89.   FS="$NEWSNAP=RW:$FS:"
  90.  
  91.   # some output
  92.   echo Using these overlays:
  93.   echo "$FS" | tr : '\n'
  94.   unionfs-fuse -o cow $FS $ROOT
  95.  
  96.   # mount standard directories
  97.   mount -t proc proc $ROOT/proc
  98.   mount -o bind /dev $ROOT/dev
  99.   cp -L /etc/resolv.conf $ROOT/etc/
  100. }
  101.  
  102. function cleanup_chroot {
  103.   if [ -z $CLEANING_UP ]; then
  104.     set -e
  105.     CLEANING_UP=1
  106.     umount $ROOT/proc
  107.     umount $ROOT/dev
  108.     umount $ROOT
  109.     set +e
  110.   fi
  111. }
  112.  
  113. function enter {
  114.   setup_vars $1
  115.  
  116.   prepare_chroot
  117.  
  118.   chroot $ROOT /bin/bash  
  119.   cleanup_chroot
  120. }
  121.  
  122. ### main ###
  123.  
  124. # check if root
  125. if [ `id -u` -ne 0 ]; then
  126.   echo "Please start this program as root!"
  127.   exit
  128. fi
  129.  
  130. # check if any parameter is given
  131. if [ $# == 0 ]; then
  132.   usage
  133.   exit
  134. fi
  135.  
  136. # dispatch
  137. case $1 in
  138. init)
  139.   init $2;;
  140. enter)
  141.   enter $2;;
  142. *)
  143.   usage;;
  144. esac
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement