X-Git-Url: http://git.tremily.us/?a=blobdiff_plain;f=targets%2Fsupport%2Fchroot-functions.sh;h=0705b5b63f92f35d1aaf92f835815d9d00c9edc4;hb=6c0a577deaf6cdfb188abe1ce2f263122eaa8935;hp=89f0c96455869f583344bbc58345cd164455f5b7;hpb=b79d06a3700ea725481d149906a9c66fa681a5ab;p=catalyst.git diff --git a/targets/support/chroot-functions.sh b/targets/support/chroot-functions.sh old mode 100755 new mode 100644 index 89f0c964..0705b5b6 --- a/targets/support/chroot-functions.sh +++ b/targets/support/chroot-functions.sh @@ -1,5 +1,8 @@ #!/bin/bash +# Set the profile +eselect profile set ${clst_target_profile} + # Trap these signals and kill ourselves if recieved # Force ourselves to die if any of these signals are recieved # most likely our controlling terminal is gone @@ -61,46 +64,47 @@ get_libdir() { setup_myfeatures(){ setup_myemergeopts + export FEATURES="-news clean-logs" if [ -n "${clst_CCACHE}" ] then export clst_myfeatures="${clst_myfeatures} ccache" - #if [ "${clst_AUTORESUME}" = "1" -a -e /tmp/.clst_ccache ] - #then - # echo "CCACHE Autoresume point found not emerging ccache" - #else - clst_root_path=/ run_emerge --oneshot --nodeps ccache || exit 1 - # touch /tmp/.clst_ccache - #fi + clst_root_path=/ run_merge --oneshot --noreplace dev-util/ccache || exit 1 fi if [ -n "${clst_DISTCC}" ] then export clst_myfeatures="${clst_myfeatures} distcc" export DISTCC_HOSTS="${clst_distcc_hosts}" - #if [ "${clst_AUTORESUME}" = "1" -a -e /tmp/.clst_distcc ] - #then - # echo "DISTCC Autoresume point found not emerging distcc" - #else - USE="-gtk -gnome" clst_root_path=/ run_emerge --oneshot --nodeps distcc || exit 1 - #touch /tmp/.clst_distcc - #fi + [ -e /etc/portage/make.conf ] && \ + echo 'USE="${USE} -avahi -gtk -gnome"' >> /etc/portage/make.conf + # We install distcc to / on stage1, then use --noreplace, so we need to + # have some way to check if we need to reinstall distcc without being + # able to rely on USE, so we check for the distcc user and force a + # reinstall if it isn't found. + if [ "$(getent passwd distcc | cut -d: -f1)" != "distcc" ] + then + clst_root_path=/ run_merge --oneshot sys-devel/distcc || exit 1 + else + clst_root_path=/ run_merge --oneshot --noreplace sys-devel/distcc || exit 1 + fi + sed -i '/USE="${USE} -avahi -gtk -gnome"/d' /etc/portage/make.conf mkdir -p /etc/distcc echo "${clst_distcc_hosts}" > /etc/distcc/hosts # This sets up automatic cross-distcc-fu according to # http://www.gentoo.org/doc/en/cross-compiling-distcc.xml CHOST=$(portageq envvar CHOST) - # TODO: change to use get_libdir - cd /usr/lib/distcc/bin + LIBDIR=$(get_libdir) + cd /usr/${LIBDIR}/distcc/bin rm cc gcc g++ c++ 2>/dev/null - echo -e '#!/bin/bash\nexec /usr/lib/distcc/bin/'${CHOST}'-g${0:$[-2]} "$@"' > ${CHOST}-wrapper - chmod a+x /usr/lib/distcc/bin/${CHOST}-wrapper + echo -e '#!/bin/bash\nexec /usr/'${LIBDIR}'/distcc/bin/'${CHOST}'-g${0:$[-2]} "$@"' > ${CHOST}-wrapper + chmod a+x /usr/${LIBDIR}/distcc/bin/${CHOST}-wrapper for i in cc gcc g++ c++; do ln -s ${CHOST}-wrapper ${i}; done fi if [ -n "${clst_ICECREAM}" ] then - clst_root_path=/ run_emerge --oneshot --nodeps sys-devel/icecream || exit 1 + clst_root_path=/ run_merge --oneshot --noreplace sys-devel/icecream || exit 1 # This sets up automatic cross-icecc-fu according to # http://gentoo-wiki.com/HOWTO_Setup_An_ICECREAM_Compile_Cluster#Icecream_and_cross-compiling @@ -114,7 +118,7 @@ setup_myfeatures(){ export PATH="/usr/lib/icecc/bin:${PATH}" export PREROOTPATH="/usr/lib/icecc/bin" fi - export FEATURES="${clst_myfeatures}" + export FEATURES="${clst_myfeatures} -news" } setup_myemergeopts(){ @@ -123,62 +127,61 @@ setup_myemergeopts(){ clst_myemergeopts="--verbose" else clst_myemergeopts="--quiet" + bootstrap_opts="${bootstrap_opts} -q" fi if [ -n "${clst_FETCH}" ] then - export bootstrap_opts="-f" + export bootstrap_opts="${bootstrap_opts} -f" export clst_myemergeopts="${clst_myemergeopts} -f" - elif [ -n "${clst_PKGCACHE}" ] + elif [ -n "${clst_PKGCACHE}" -a -z "${clst_update_seed}" ] then export clst_myemergeopts="${clst_myemergeopts} --usepkg --buildpkg --newuse" - export bootstrap_opts="-r" + export bootstrap_opts="${bootstrap_opts} -r" fi } -setup_portage(){ - # portage needs to be merged manually with USE="build" set to avoid frying - # our make.conf. emerge system could merge it otherwise. -# if [ "${clst_AUTORESUME}" = "1" -a -e /tmp/.clst_portage ] -# then -# echo "Portage Autoresume point found not emerging portage" -# else - USE="build" run_emerge --oneshot --nodeps portage -# touch /tmp/.clst_portage || exit 1 -# fi -} - -setup_gcc(){ - if [ -x /usr/bin/gcc-config ] +setup_binutils(){ + if [ -x /usr/bin/binutils-config ] then - mythang=$( cd /etc/env.d/gcc; ls ${clst_CHOST}-* | head -n 1 ) + mythang=$( cd /etc/env.d/binutils; ls ${clst_CHOST}-* | head -n 1 ) if [ -z "${mythang}" ] then mythang=1 fi - gcc-config ${mythang}; update_env_settings + binutils-config ${mythang}; update_env_settings fi } -setup_binutils(){ - if [ -x /usr/bin/binutils-config ] +setup_gcc(){ + if [ -x /usr/bin/gcc-config ] then - mythang=$( cd /etc/env.d/binutils; ls ${clst_CHOST}-* | head -n 1 ) + mythang=$( cd /etc/env.d/gcc; ls ${clst_CHOST}-* | head -n 1 ) if [ -z "${mythang}" ] then mythang=1 fi - binutils-config ${mythang}; update_env_settings + gcc-config ${mythang}; update_env_settings fi } +setup_pkgmgr(){ + # We need to merge our package manager with USE="build" set in case it is + # portage to avoid frying our /etc/portage/make.conf file. Otherwise, we could + # just let emerge system could merge it. + # Use --update or portage won't reinstall the same version. + [ -e /etc/portage/make.conf ] && echo 'USE="${USE} build"' >> /etc/portage/make.conf + run_merge --oneshot --nodeps --update sys-apps/portage + sed -i '/USE="${USE} build"/d' /etc/portage/make.conf +} + cleanup_distcc() { + LIBDIR=$(get_libdir) rm -rf /etc/distcc/hosts for i in cc gcc c++ g++; do - # TODO: change to use get_libdir - rm -f /usr/lib/distcc/bin/${i} - ln -s /usr/bin/distcc /usr/lib/distcc/bin/${i} + rm -f /usr/${LIBDIR}/distcc/bin/${i} + ln -s /usr/bin/distcc /usr/${LIBDIR}/distcc/bin/${i} done - rm -f /usr/lib/distcc/bin/*-wrapper + rm -f /usr/${LIBDIR}/distcc/bin/*-wrapper } cleanup_icecream() { @@ -191,6 +194,7 @@ cleanup_icecream() { } cleanup_stages() { + make_destpath if [ -n "${clst_DISTCC}" ] then cleanup_distcc @@ -200,7 +204,15 @@ cleanup_stages() { cleanup_icecream fi case ${clst_target} in - stage1|stage2|stage3) + stage3|system) + run_merge --depclean --with-bdeps=y + ;; + *) + echo "Skipping depclean operation for ${clst_target}" + ;; + esac + case ${clst_target} in + stage1|stage2|stage3|system) rm -f /var/lib/portage/world touch /var/lib/portage/world ;; @@ -210,19 +222,10 @@ cleanup_stages() { esac rm -f /var/log/emerge.log /var/log/portage/elog/* - rm -rf /var/tmp/* } update_env_settings(){ - which env-update > /dev/null 2>&1 - ret=$? - if [ $ret -eq 0 ] - then - ENV_UPDATE=`which env-update` - ${ENV_UPDATE} - else - echo "WARNING: env-update not found, skipping!" - fi + [ -x /usr/sbin/env-update ] && /usr/sbin/env-update source /etc/profile [ -f /tmp/envscript ] && source /tmp/envscript } @@ -233,24 +236,26 @@ die() { } make_destpath() { - if [ "${1}" = "" ] + # ROOT is / by default, so remove any ROOT= settings from make.conf + sed -i '/ROOT=/d' /etc/portage/make.conf + export ROOT=/ + if [ "${1}" != "/" -a -n "${1}" ] then - export ROOT=/ - else + echo "ROOT=\"${1}\"" >> /etc/portage/make.conf export ROOT=${1} - if [ ! -d ${ROOT} ] - then - install -d ${ROOT} - fi + fi + if [ ! -d ${ROOT} ] + then + install -d ${ROOT} fi } -run_emerge() { +run_merge() { # Sets up the ROOT= parameter # with no options ROOT=/ make_destpath ${clst_root_path} - - export EMERGE_WARNING_DELAY=0 + + export EMERGE_WARNING_DELAY=0 export CLEAN_DELAY=0 export EBEEP_IGNORE=0 export EPAUSE_IGNORE=0 @@ -282,27 +287,30 @@ show_debug() { echo "Profile/target info:" echo "Profile inheritance:" python -c 'import portage; print portage.settings.profiles' + echo + # TODO: make this work on non-portage + emerge --info # TODO: grab our entire env # to get see the ebuild env you can do something like: # `set > /tmp/env_dump.${EBUILD_PHASE}` inside /etc/portage/bashrc + # XXX: Also, portageq does *not* source profile.bashrc at any time. echo - echo "STAGE1_USE: $(portageq envvar STAGE1_USE)" + echo "BOOTSTRAP_USE: $(portageq envvar BOOTSTRAP_USE)" echo echo "USE (profile): $(portageq envvar USE)" - echo "USE (stage1): ${USE}" echo "FEATURES (profile): $(portageq envvar FEATURES)" - echo "FEATURES (stage1): ${FEATURES}" echo echo "ARCH: $(portageq envvar ARCH)" echo "CHOST: $(portageq envvar CHOST)" echo "CFLAGS: $(portageq envvar CFLAGS)" echo - echo "PROFILE_ARCH: $(portageq envvar PROFILE_ARCH)" - echo + echo "These should be blank on non-multilib profiles." echo "ABI: $(portageq envvar ABI)" echo "DEFAULT_ABI: $(portageq envvar DEFAULT_ABI)" echo "KERNEL_ABI: $(portageq envvar KERNEL_ABI)" + echo "LIBDIR: $(get_libdir)" echo "MULTILIB_ABIS: $(portageq envvar MULTILIB_ABIS)" + echo "PROFILE_ARCH: $(portageq envvar PROFILE_ARCH)" echo fi } @@ -344,7 +352,7 @@ function copy_symlink() { STACK=${2} [ "${STACK}" = "" ] && STACK=16 || STACK=$((${STACK} - 1 )) - if [ ${STACK} -le 0 ] + if [ ${STACK} -le 0 ] then echo "WARNING : ${TARGET} : too many levels of symbolic links !" return @@ -354,7 +362,7 @@ function copy_symlink() { mkdir -p ${clst_root_path}/`dirname ${1}` [ ! -e ${clst_root_path}/${1} ] && \ cp -vfdp ${1} ${clst_root_path}/${1} - + if [[ -n $(type -p realpath) ]]; then TARGET=`realpath ${1}` else @@ -407,4 +415,3 @@ Icon=text-editor" > /usr/share/applications/gentoo-handbook.desktop # We do this everywhere, so why not put it in this script run_default_funcs -