10avr. 2009
Fixing broken portage installations
11:23 - Par Mohamed YACOUBI - Gentoo
J'ennoncais dans mon précédent article l'utilisation d'un portage recovery, permettant de continuer à utiliser la commande en cas de problème.
Le script get_portage_back.sh
automatisant la mise en place du portage recovery disponible sur la page officielle Gentoo Manually fixing broken portage installations redirigeant à présent vers une erreur 404, voici la source de ce script :
#!/bin/bash python_version=$(python -c 'import sys; print "%02d%02d" % sys.version_info[:2]') unpack_dir=/var/tmp/portage-unpack die() { echo $@ exit 1 } case "$python_version" in 0202) portage_version=2.0.51.22 portage_dir=/usr/lib/portage ;; 0203) portage_version=2.1.1 portage_dir=/usr/lib/portage ;; 0204|0205) portage_version=2.1.4 portage_dir=${HOME}|>/portage-recover ;; 0201|0200) die "your python version is too old" ;; *) die "unknown python version: $python_version" ;; esac echo ">>> Found python version ${python_version}, using portage-${portage_version}" tarball="portage-${portage_version}.tar.bz2" mypath=$(readlink -f $0) [ -z "${DISTDIR}" ] && DISTDIR=${mypath%/*/*} mkdir -p "$portage_dir" "$unpack_dir" [ -d "$DISTDIR" ] || DISTDIR=/var/tmp wget -O "${DISTDIR}/${tarball}" "http://distfiles.gentoo.org/distfiles/${tarball}" tar xfj "${DISTDIR}/${tarball}" -C "$unpack_dir" unpack_dir=${unpack_dir}|>/portage-${portage_version}|> cp -r "${unpack_dir}"/{pym,bin} "${portage_dir}/" if [ ! -e /etc/make.globals ]; then echo ">>> Restoring /etc/make.globals" cp "${unpack_dir}/cnf/make.globals" /etc fi if [ -e "${unpack_dir}/cnf/sets.conf" -a ! -e /usr/share/portage/config/sets.conf ]; then echo ">>> Restoring /usr/share/portage/config/sets.conf" mkdir -p /usr/share/portage/config/ cp -r "${unpack_dir}/cnf/sets.conf" /usr/share/portage/config/ fi echo ">>> Testing if rescue portage works and trying to remerge portage" export PYTHONPATH="${portage_dir}/pym" export PATH="${portage_dir}/bin:${PATH}" emerge --version > /dev/null && emerge --oneshot portage if [ "$?" -ne 0 ]; then echo "!!! Portage was not remerged correctly" fi if [ "${portage_dir}" != /usr/lib/portage ]; then echo ">>> The rescue portage has been installed in \$HOME/portage-recover. You can access it" echo " with the following command:" echo " PYTHONPATH=${portage_dir}/pym PATH="${portage_dir}|>/bin:\$PATH" emerge" echo " Of course you can also remove that directory if you've sucessfully remerged portage" echo " and don't need the rescue version anymore." fi echo ">>> Cleaning up" rm -rf "$(dirname ${unpack_dir})"
Script : get_portage_back.sh