#!/bin/bash # Script to setup the LinHES development enviroment # ./setup_env.sh ( i686|x86_64 ) devID # This script assumes that /tmp is usable. START_DIR=`pwd` TS=`date +%Y%h%d_%H%M%S` function arg_check { case $1 in i686) ARCH=$1 ;; x86_64) ARCH=$1 ;; *) echo "invalid arch specified" echo "valid options include i686 and x86_64" echo "EX: ./setup_env.sh i686 " echo "EX: ./setup_env.sh x86_64 " exit 1 ;; esac case $2 in release) BENV="release" ;; testing) BENV="testing" ;; *) echo "invalid env specified" echo "valid options include release, testing" echo "EX: ./setup_env.sh i686 testing" echo "EX: ./setup_env.sh x86_64 testing" exit 1 ;; esac if [ ! x$3 = x ] then USER=$3 #check if developer template is present fi } function pacman_check { for i in pacman pacstrap do which $i status=$? if [ ! $status = 0 ] then echo "Can not find $i in the path." exit 1 fi done } function checkout_repo { mkdir -p $BENV/$ARCH cd $BENV/$ARCH git clone git@linhes.org:linhes_dev git clone git@linhes.org:linhes_pkgbuild # git clone $USER@knoppmyth.net:linhes_pkgbuild # git clone $USER@knoppmyth.net:linhes_dev if [ $BENV == "testing" ] then echo "=====================================" echo "switching linhes_pkgbuild to testing" cd linhes_pkgbuild git checkout -b testing origin/testing cd - echo "=====================================" fi if [ $BENV == "testing" ] then echo "=====================================" echo "switching linhes_dev to testing" cd linhes_dev git checkout -b testing origin/testing cd - echo "=====================================" fi } create_pkg_mirror_dir(){ #create the local pkg dir's for mirror and creating pkg's [ -e $MIRROR_DIR ] || mkdir -p $MIRROR_DIR for i in i686 x86_64 do [ -e $MIRROR_DIR/$i ] || mkdir -p $MIRROR_DIR/$i for y in core extra core-testing extra-testing do [ -e $MIRROR_DIR/$i/$y ] || mkdir -p $MIRROR_DIR/$i/$y [ -e $MIRROR_DIR/src_packages/$y ] || mkdir -p $MIRROR_DIR/src_packages/$y done done [ -e $MIRROR_DIR/sources ] || mkdir -p $MIRROR_DIR/sources [ -e $MIRROR_DIR/packages ] || mkdir -p $MIRROR_DIR/packages } create_container(){ #correct pacman.conf to use the correct ARCH to build the chroot cd $START_DIR/$BENV/$ARCH/linhes_dev sed -e "s/REPLACEME/$ARCH/g" templates/pacman.conf.chroot > /tmp/pacman.conf.chroot #create the container cd $START_DIR #mkdir -p $START_DIR/$BENV/$ARCH/linhes_container_root.$ARCH mkdir -p $CONTAINER_DIR pacstrap -i -c -d -C /tmp/pacman.conf.chroot $CONTAINER_DIR base base-devel openssh unison status=$? if [ ! $status = 0 ] then printf "\n" printf "%s\n" "********************************************************" printf "*** %-48s ***\n" " An error occured creating the container" printf "%s\n" "********************************************************" exit 1 fi } copy_custom_developer_file(){ cd $START_DIR/$BENV/$ARCH/linhes_dev if [ -d templates/developers/$USER ] then #check for login run if [ -f templates/developers/$USER/loginrun.sh ] then echo "copy loginrun.sh for $USER" cp -f templates/developers/$USER/loginrun.sh $CONTAINER_DIR/root/loginrun.sh fi if [ -f templates/developers/$USER/custom_chroot.sh ] then echo "running custom_chroot.sh for $USER" cd templates/developers/$USER BROOT=$CONTAINER_DIR ./custom_chroot.sh $ARCH cd - fi fi } create_entry_files() { #create custom enter_dev_chroot.sh script cp templates/enter_dev_container.sh ../enter_dev_container.$ARCH.$TS sed -i "s/REPLACE_ARCH/$ARCH/" ../enter_dev_container.$ARCH.$TS sed -i "s/REPLACE_TS/$TS/" ../enter_dev_container.$ARCH.$TS chmod 755 ../enter_dev_container.$ARCH.$TS printf "%s\n" "********************************************************" printf "** %-50s **\n" " To enter the container (linhes_container_root.$ARCH.$TS) run:" printf "** %-50s **\n" " cd $BENV/$ARCH" printf "** %-50s **\n" " ./enter_dev_container.$ARCH.$TS" printf "%s\n" "********************************************************" #copy makepkg.conf into the chroot sed -e "s/REPLACEME/$ARCH/g" templates/makepkg.conf > ../linhes_container_root.$ARCH.$TS/etc/makepkg.conf #copy pacman.conf into the chroot sed -e "s/REPLACEME/$ARCH/g" templates/pacman.conf.chroot > ../linhes_container_root.$ARCH.$TS/etc/pacman.conf } #----------------------------------------------- arg_check $1 $2 $3 #checkout_repo pacman_check MIRROR_DIR=$START_DIR/$BENV/pkg_repo create_pkg_mirror_dir CONTAINER_DIR=$START_DIR/$BENV/$ARCH/linhes_container_root.$ARCH.$TS create_container copy_custom_developer_file create_entry_files