Portage: Install multi-distribution
Installation sur une distribution quelconque
Prérequis
Dans tous les cas vous devez impérativement posséder Python d'un version égale ou supérieure à la 2.2.0. Si ce n'est pas le cas récupérer le sur le site officiel :
http://www.python.orgOu sur http://tuxfinder.com au format que vous préférez.
Installation manuelle à partir d'un script
Créer un script bash avec ces lignes de codes :
#!/bin/bash
#
# call with one argument "again" or call it with no arguments at all
# call it with no arguments first time.
# call it again with "again" to bypass some operations.
#
if [ "$#" == "1" ]; then
again=$1
else
again=""
fi
if [ "`id -u`" != "0" ]; then
echo ""
echo "Su as root and try again."
echo ""
fi
pythonV=`python -V 2>&1`
if [ "$pythonV" \< "Python 2.2.0" ]; then
echo ""
echo "Install python 2.2 and then try again"
echo ""
exit 1
fi
if [ "$again" == "" ]; then
mkdir -p /usr/lib/portage/bin
mkdir -p /usr/lib/portage/pym
mkdir -p /usr/portage/profiles
mkdir /etc/env.d
wget ftp://gentoo.mirrors.pair.com/distfiles/portage-2.0.50-r6.tar.bz2 -O /tmp/portage-2.0.50-r6.tar.bz2
cd /tmp
if [ ! -f portage-2.0.50-r6.tar.bz2 ]; then
echo ""
echo "Mirror error. Try this script again after a while without any args".
echo ""
exit 1
fi
tar jxf portage-2.0.50-r6.tar.bz2
cd portage-2.0.50-r6/bin
cp * /usr/lib/portage/bin
export PATH=/usr/lib/portage/bin:$PATH
cd ../pym ; cp * /usr/lib/portage/pym/
cd ../man ;cp *.1 /usr/man/man1 ; cp *.5 /usr/man/man5
cd ../src/python-missingos
./setup.py install
cd ../sandbox-1.1
make && make install
cd ../../cnf; cp * /etc
if [ "`id portage`" == "" ]; then
groupadd -g 250 portage
useradd -d /var/tmp/portage -g portage -u 250 portage
fi
cd /usr/sbin
ln -s ../lib/portage/bin/regenworld .
ln -s ../lib/portage/bin/pkgmerge .
ln -s ../lib/portage/bin/fixpackages .
ln -s ../lib/portage/bin/etc-update .
ln -s ../lib/portage/bin/env-update .
ln -s ../lib/portage/bin/emerge-webrsync .
ln -s ../lib/portage/bin/ebuild.sh .
ln -s ../lib/portage/bin/ebuild .
ln -s ../lib/portage/bin/dispatch-conf .
ln -s ../lib/portage/bin/archive-conf .
cd /usr/bin
ln -s ../lib/portage/bin/xpak .
ln -s ../lib/portage/bin/repoman .
ln -s ../lib/portage/bin/quickpkg .
ln -s ../lib/portage/bin/portageq .
ln -s ../lib/portage/bin/g-cpan.pl .
ln -s ../lib/portage/bin/emerge .
fi
export PATH=/usr/lib/portage/bin:$PATH
echo "CC=gcc;CXX=g++" > /etc/env.d/compilers.sh
echo "LDPATH=\"/lib:/usr/lib:/usr/local/lib:/usr/X11R6/lib:/usr/kerberos/lib\"" > /etc/env.d/10ldpath
. /etc/env.d/compilers.sh
emerge sync
#
# emerge sync should get /usr/portage/profiles
#
if [ -d /usr/portage/profiles/default-x86-1.4 ];then
ln -s /usr/portage/profiles/default-x86-1.4 /etc/make.profile
else
echo ""
echo "Something wrong. Get /usr/portage/profiles dir from a working"
echo "Gentoo system and try again."
echo ""
exit 1
fi
# inject the "dangerous" packages first.
glibcP=`emerge -p -O glibc|grep ebuild|cut -d" " -f8`
emerge inject $glibcP
gccP=`emerge -p -O gcc|grep ebuild|cut -d" " -f8`
emerge inject $gccP
binP=`emerge -p -O binutils|grep ebuild|cut -d" " -f8`
emerge inject $binP
# fetch the baselayout.
emerge -f -O baselayout
# now inject it too.
baseP=`emerge -p -O baselayout|grep ebuild|cut -d" " -f8`
emerge inject $baseP
#was inject success
ret=`emerge -p baselayout|grep "ebuild R"`
if [ "$ret" == "" ] ;then
echo "Inject has failed. Please verify and continue with cut & paste of rest of the steps"
echo "ERROR."
exit 1
fi
# if it fails with some errors, its fine.
emerge -O portage
cd /tmp
cp /usr/portage/distfiles/rc-scripts*.tar.bz2 .
tar xjpf rc-scripts*.tar.bz2
cd rc-scripts*/sbin
cp depscan.sh /sbin; cp functions.sh /sbin
mkdir -p /lib/rcscripts/awk
cd ../src/awk
cp *.awk /lib/rcscripts/awk/
cd /etc/init.d
ln -s /sbin/depscan.sh .
ln -s /sbin/functions.sh .
emerge -O gawk
# FOLLOWING SHOULD NOT GIVE ANY ERRORS HERE. You screwed up if it did.
emerge -O portage
if ! fgrep -q "/etc/profile.env" /etc/profile ; then
echo ". /etc/profile.env" >> /etc/profile
fi
echo ""
echo "#############################################################"
echo "You are now free to enjoy portage. Make sure you tune"
echo "/etc/make.conf and other portage configuration files to take"
echo "advantage of portage. If you screwed up, its OK. Pick yourself"
echo "up and give it another go."
echo "#############################################################"
echo ""
Pour l'utiliser enregistrez le en srcipt.sh et modifier ses droits :
$ chmod +x script.sh
Un fois installer portage nous ne sommes hélas pas encore au bout du tunnel, en effet car à présent il va falloir lui mémoriser tous vos packages que vous posséder déjà, à moins que recompiler tout votre système ne vous dérange point !
Voici donc pour commencer un petit script qui à l'aide d'un fichier où l'on écrira tous les programmes installés, injectera ceux-ci dans portage :
#!/bin/bash
emerge sync
emerge -p -uD world > /tmp/world.update
for i in `cat /etc/portage/package.mask.ORG` ;
do
matching=`grep "$i" /tmp/world.update`
if [ -n "$matching" ]; then
toInject=`echo $matching|cut -d " " -f 4`;
echo "Injecting $toInject"
'emerge' inject $toInject
fi
done
echo "# #"
echo "################# UPDATES #######################"
echo "# #"
cat /tmp/world.update
Ce script fonctionne avec le fichier /etc/portage/package.mask.ORG (exemple) :
#Begin
sys-apps/baselayout
sys-fs/devfsd
sys-kernel/linux-headers
sys-libs/pwdb
sys-libs/pam
sys-libs/pam-login
gnome-base/gdm
sys-apps/kbd
sys-devel/bin86
sys-devel/binutils
net-misc/iputils
sys-apps/shadow
net-misc/dhcpcd
sys-apps/modutils
sys-libs/glibc
sys-devel/gcc
sys-libs/ncurses
sys-apps/cronbase
x11-base/opengl-update
net-mail/mailbase
net-www/epiphany
net-nds/portmap
net-fs/samba
dev-lang/python
sys-fs/e2fsprogs
#End list
Voila une fois ceci terminer vous avez votre emerge perso sur votre distrib préféré ! Cependant vous le remarquerez assez tôt, même si la plupart du temps cela fonctionnera assez bien, il arrivera que certains package soit récalcitrants, dans ce cas lisez la partie sur les erreurs ci-dessous. En général ces erreurs sont dues au fait que tous vos packages précédemment installés avant l'arrivé de portage n'ont pas été installés par celui-ci.
Les erreurs :
Le plus simple est de récupérer soi-même le paquets qui pose problème et de l'installer à la main. Ensuite un simple 'emerge inject'suffit.
Exemple :
$ emerge inject sys-apps/cronbase-1.2
Vérifiez bien que votre système connaît le chemin de toutes vos librairies importantes (/etc/lib.so.conf) et de vos binaires (variable PATH)
Il s'agit souvent aussi d'un problème de dépendance, n'hésitez pas à mettre à jour avec emerge un paquet qui était déjà présent avant l'installation de portage.
Éditez le script d'installation du package posant problème (dans /usr/portage/'categ'/'package'), vérifier comme vous pouvez la cohérence des paramètres avec ceux de votre système.
Le forum du labo-linux ! http://forum.labo-linux.org
Installation par le projet Emerde
Le projet Emerde est une adaptation de portage pour slackware qui en est à sa version 1.2.2 Beta mais le plus intéressant c'est que les développeurs de ce projet ont prévu son installation pour une distribution autre. Bref si vous préférez opter pour une cette méthode rendez-vous sur : http://emerde.freaknet.org