diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2d96ba3 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.kate-swp diff --git a/gentchroot.sh b/gentchroot.sh index 218c412..e5a522f 100755 --- a/gentchroot.sh +++ b/gentchroot.sh @@ -1,5 +1,6 @@ #!/bin/bash #Setting up color codes +SCRIPT_NAME=$0 Black='\033[0;30m' Red='\033[0;31m' Green='\033[0;32m' @@ -17,15 +18,131 @@ Light_Purple='\033[1;35m' Light_Cyan='\033[1;36m' White='\033[1;37m' NC='\033[0m' +edebug () { + einfo $@ +} einfo () { -echo -e " ${Green}*${NC} ${@:1}${NC}" + echo -e " ${Green}*${NC} ${@:1}${NC}" } ewarn () { -echo -e " ${Yellow}*${NC} ${@:1}${NC}" + echo -e " ${Yellow}*${NC} ${@:1}${NC}" } eerror () { -echo -e " ${Red}*${Light_Red} ${@:1}${NC}" + echo -e " ${Red}*${Light_Red} ${@:1}${NC}" +} +die () { + echo + eerror die called, ending. + exit 1 +} +end () { + exit 0 +} +show_help () { + echo -e "USAGE : ${Light_Green}${SCRIPT_NAME}${NC} ${Yellow}[options]${NC} ${Light_Red}${NC} " + echo -e + echo -e "${Yellow}OPTIONS :${NC}" + echo -e " -h --help Show this help." + echo -e " -u --userland,--no-root Allow the script to run in userland." + echo -e " -p --profile Use the specified profile." + echo -e " This value will be used in a eselect profile set command." + echo -e "${Light_Red}TARGET :${NC}" + echo -e " Path to the future chroot installation," + echo -e " can be . to install in the current directory" } -echo -e ${Light_Blue} -- Welcome to Gentoo Chroot Helper -- +getopt --test +if [ $? != 4 ]; then + eerror "Your installation doesn't support enhanced getopt." + die +fi +#Setting up the getopt parser +echo -e ${Light_Blue} -- Welcome to Gentoo Chroot Helper -- ${NC} +echo + +SHORT="hup:" +LONG="help,userland,no-root,profile:" + +OPTS=$(getopt --options $SHORT --long $LONG --name "$0" -- "$@") +if [ $? != 0 ] + then eerror Failed to parse options + die +fi +eval set -- "$OPTS" +#Setting default values +NO_ROOT=false +TARGET=false +PROFILE="12" +#Extracting arguments +while true + do case "$1" in + -h | --help ) + show_help + end + shift + ;; + -u | --userland | --no-root ) + NO_ROOT=true + shift + ;; + -p | --profile ) + PROFILE="$2" + shift 2 + ;; + -- ) + shift + ;; + *) + TARGET=$1 + break + ;; + esac +done +if [ -z ${TARGET} ] + then eerror Please specify a target. + ewarn Run ${SCRIPT_NAME} --help for more info. + die +fi +if [ ${NO_ROOT} != true ] + then + if [ "$EUID" -ne 0 ] + then eerror This script should be ran as root. + ewarn If you want to run the script anyway use the --no-root argument. + ewarn Warning : Userland chroot generation has not been tested yet. + die + fi +fi +if [ ${NO_ROOT} == true ] + then ewarn Warning : NO_ROOT is experimental. +fi + +PROFILE_CHECK=$(eselect profile list |grep ${PROFILE}) +if [ -z "${PROFILE_CHECK}" ] + then eerror Invalid profile specified : ${PROFILE} + die +fi + +PORTAGE_RSYNC_OPTS=$(emerge --info|grep PORTAGE_RSYNC_OPTS) +PORTAGE_RSYNC_OPTS=${PORTAGE_RSYNC_OPTS:20} +PORTAGE_RSYNC_OPTS=${PORTAGE_RSYNC_OPTS%\"*} + +einfo Installing @system in ${Red}${TARGET}${NC} +einfo Profile selected : ${Light_Green}${PROFILE_CHECK}${NC} +echo + +mkdir -p ${TARGET}/etc/portage || (eerror Could not create the directory; die) +cd ${TARGET} || die +TARGET=$(pwd) +edebug Entered ${Light_Blue}${TARGET}${NC} + +mkdir -p ${TARGET}/usr/portage/ + +export ROOT=${TARGET} +export PORTAGE_CONFIGROOT=${TARGET} +export PORTDIR=${TARGET}/usr/portage +einfo Syncing /usr/portage and ${TARGET} Gentoo Repositories. +rsync ${PORTAGE_RSYNC_OPTS} /usr/portage/ ${PORTDIR} || (eerror Could not rsync .; die) +ln -s ../../usr/portage/profiles/default/linux/amd64/17.0 ${TARGET}/etc/portage/make.profile +eselect profile set ${PROFILE} || (eerror Could not set profile.; die) +FEATURES="buildpkg" emerge -k -j8 @system || (eerror Could not emerge @system ; die)