tazwok diff chroot-scripts/cook-toolchain @ rev 315
Move tazwok-related chroot scripts from tazchroot to tazwok sources
author | Antoine Bodin <gokhlayeh@slitaz.org> |
---|---|
date | Fri Feb 18 18:13:38 2011 +0100 (2011-02-18) |
parents | |
children | 32b8fbc44418 |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/chroot-scripts/cook-toolchain Fri Feb 18 18:13:38 2011 +0100 1.3 @@ -0,0 +1,173 @@ 1.4 +#!/bin/bash 1.5 +# 1.6 +# An attempt to cook a new toolchain from scratch. 1.7 + 1.8 +# Important settings and variables. 1.9 +source /usr/lib/slitaz/libtaz 1.10 +source /etc/slitaz/tazwok.conf 1.11 +source_lib report 1.12 +report start 1.13 + 1.14 +report step "Cooking temporary toolchain" 1.15 +report open-bloc 1.16 + 1.17 +report step "Initializing tools & environment" 1.18 + 1.19 +# Theses fours packages will be needed later. 1.20 +for p in libtaz tazwok-experimental slitaz-base-files tazpkg; do 1.21 + tazwok cook $p 1.22 +done 1.23 + 1.24 +set +h 1.25 +umask 022 1.26 +PS1='\u:\w\$ ' 1.27 +LANG=POSIX 1.28 +LC_ALL=POSIX 1.29 + 1.30 +# Set BUILD_HOST to something like $ARCH-tmp-linux-gnu to enable 1.31 +# of the temporary toolchain. 1.32 +BUILD_HOST=$(echo $BUILD_HOST | sed 's/\(.*\)-\(.*\)-linux-gnu/\1-tmp-linux-gnu/') 1.33 + 1.34 +PATH=/tools/bin:/tools/usr/bin:/tools/sbin:/tools/usr/sbin:/bin:/usr/bin:/sbin:/usr/sbin 1.35 +CONFIG_SITE="/etc/config.site.tmptoolchain" 1.36 +echo 'prefix=/tools' > /etc/config.site.tmptoolchain 1.37 + 1.38 +export LANG LC_ALL PATH PS1 MAKEFLAGS CONFIG_SITE 1.39 +unset CC CXX CPP CFLAGS CXXFLAGS LD_LIBRARY_PATH LD_PRELOAD DESTDIR 1.40 + 1.41 +# Create the dir for the temporary toolchain and link in root of host 1.42 +# system. 1.43 +[ -d /tools ] && rm -r /tools 1.44 +mkdir /tools 1.45 + 1.46 +# Use some tweaked code from tazwok. 1.47 +prepare_package() 1.48 +{ 1.49 + tazwok clean $PACKAGE 1.50 + tazwok get-src $PACKAGE 1.51 + unset SOURCE VERSION EXTRAVERSION CATEGORY SHORT_DESC \ 1.52 + MAINTAINER WEB_SITE WGET_URL DEPENDS BUILD_DEPENDS WANTED 1.53 + . $WOK/$PACKAGE/receipt 1.54 + src=$WOK/$PACKAGE/$PACKAGE-$VERSION 1.55 + cd $WOK/$PACKAGE 1.56 +} 1.57 +LOCAL_REPOSITORY=$SLITAZ_DIR/$SLITAZ_VERSION 1.58 +[ "$undigest" ] && LOCAL_REPOSITORY=$SLITAZ_DIR/$undigest 1.59 +WOK=$LOCAL_REPOSITORY/wok 1.60 + 1.61 +report end-step 1.62 + 1.63 +# Binutils and gcc need to be compiled twice. 1.64 +for PACKAGE in binutils gcc; do 1.65 + rm $LOCAL_REPOSITORY/log/tmp-toolchain-$PACKAGE-firstpass.html 2>/dev/null 1.66 + report sublog $LOCAL_REPOSITORY/log/tmp-toolchain-$PACKAGE-firstpass.html 1.67 + report step "Compiling $PACKAGE, first pass" 1.68 + report open-bloc 1.69 + prepare_package 1.70 + report step "Running compilation rules" 1.71 + precook_tmp_toolchain 1.72 + report end-step || exit 1 1.73 + report close-bloc 1.74 + report end-sublog 1.75 +done 1.76 + 1.77 +# Compile temporary toolchain using the $TOOLCHAIN variable. 1.78 +for PACKAGE in $SLITAZ_TOOLCHAIN; do 1.79 + rm $LOCAL_REPOSITORY/log/tmp-toolchain-$PACKAGE.html 2>/dev/null 1.80 + report sublog $LOCAL_REPOSITORY/log/tmp-toolchain-$PACKAGE.html 1.81 + report step "Compiling $PACKAGE" 1.82 + report open-bloc 1.83 + prepare_package 1.84 + report step "Running compilation rules" 1.85 + 1.86 + # Use compile_rules if there's not function cook_tmp_toolchain in 1.87 + # the receipt. Works well if both functions are the same, as 1.88 + # cook-toolchain use it's own config.site to set different defaults 1.89 + # pathes. 1.90 + if grep -q ^cook_tmp_toolchain\(\)$ $WOK/$PACKAGE/receipt; then 1.91 + cook_tmp_toolchain 1.92 + else 1.93 + compile_rules 1.94 + fi 1.95 + 1.96 + report end-step || exit 1 1.97 + report close-bloc 1.98 + report end-sublog 1.99 +done 1.100 + 1.101 +# Now we erase previous chroot tools and we switch to temporary 1.102 +# toolchain. 1.103 + 1.104 +report step "Setting up temporary toolchain environnment" 1.105 + 1.106 +PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin:/tools/usr/bin:/tools/sbin:/tools/usr/sbin 1.107 +export PATH 1.108 + 1.109 +# Ajout manuel de libtaz et tazwok dans ce chroot. 1.110 +cp -a /etc/slitaz/tazpkg.conf /tmp/tazpkg.conf 1.111 +mkdir -p /tmp/backup/var/lib/tazpkg 1.112 +cp -a /var/lib/tazpkg/* /tmp/backup/var/lib/tazpkg 1.113 +sed 's/^AUTO_INSTALL_DEPS="yes"/AUTO_INSTALL_DEPS="no"/' -i \ 1.114 + /etc/slitaz/tazpkg.conf 1.115 +BASE_PKGS="tazpkg tazwok-experimental slitaz-base-files libtaz" 1.116 +for i in $BASE_PKGS; do 1.117 + echo N | tazpkg get-install $i --root=/tmp/backup --forced 1.118 +done 1.119 +mkdir -p /tmp/backup/var/log/slitaz /tmp/backup/etc/slitaz 1.120 +if [ -d /var/log/slitaz ]; then 1.121 + cp -a /var/log/slitaz/* /tmp/backup/var/log/slitaz 1.122 +fi 1.123 +cp -a /etc/slitaz/* /tmp/backup/etc/slitaz 1.124 +cp -a /tmp/tazpkg.conf /tmp/backup/etc/slitaz 1.125 +cp -a /etc/resolv.conf /tmp/backup/etc 1.126 +# make sure that if /bin/sh link is not delete we use bash in tools for sh 1.127 +# otherwise you may get sigment fail 1.128 +mkdir -p /tmp/backup/bin 1.129 +ln -s /tools/bin/bash /tmp/backup/bin/sh 1.130 + 1.131 +rm -r /bin /etc /lib /sbin /usr /var 1.132 +cp -a /tmp/backup/* / 1.133 +#rm -r /tmp/backup 1.134 + 1.135 +case $ARCH in 1.136 + x86_64) ln -sv lib /lib64 && ln -sv lib /usr/lib64 ;; 1.137 +esac 1.138 + 1.139 +mkdir -p /bin /usr/bin /usr/lib 1.140 +# doing a loop so we don't get {bash,cat,echo,pwd,stty} softlink 1.141 +BASIC_APPS="bash cat echo pwd stty" 1.142 +for i in $BASIC_APPS; do 1.143 + ln -s /tools/bin/$i /bin/$i 1.144 +done 1.145 +BASIC_LIBS="libgcc_s.so libgcc_s.so.1 libstdc++.so libstdc++.so.6" 1.146 +for i in $BASIC_LIBS; do 1.147 + ln -sf /tools/lib/$i /usr/lib/$i 1.148 +done 1.149 + 1.150 +ln -s /tools/bin/perl /usr/bin 1.151 +ln -s /tools/bin/gettext.sh /usr/bin 1.152 + 1.153 +report end-step 1.154 + 1.155 +# Finally, cook final* version of the toolchain packages. 1.156 +# * : recook toolchain against itself minus linux-api-headers 1.157 +# glibc binutils & gcc can be a good idea to make things 1.158 +# more robust & stable; in some cases it solves dependencies 1.159 +# loops. 1.160 + 1.161 +# Incoming packages as the only source for packages. 1.162 +rm -r /var/lib/tazpkg/undigest 1.163 +tazpkg setup-mirror $SLITAZ_DIR/${undigest:-$SLITAZ_VERSION}/packages-incoming 1.164 +tazpkg recharge 1.165 + 1.166 +# Get toolchain cooklist. 1.167 +tazwok gen-cooklist ${undigest:+--undigest=$undigest} > /tmp/toolchain.list 1.168 + 1.169 +# Next cook packages one by one. 1.170 +# Cooking the list doesn't works because sh wouldn't take care 1.171 +# of the presence of new executables even if they're first in 1.172 +# $PATH. 1.173 + 1.174 +cat /tmp/toolchain.list | while read PACKAGE; do 1.175 + tazwok cook $PACKAGE || exit 1 1.176 +done