Instalar paquetes con pacman desde http://www.archlinux.org/packages/

por jnavarretesanchez

Hoy he creado un chroot en mi Arch para compilar unas cosillas. Pacman ha montado bien los paquetes base pero cuando he querido instalar algunos de repositorios extra o comunity me ha saltado este error “error: failed to prepare transaction (package architecture is not valid ….. does not have a valid architecture).

El chroot lo arranco con linux32 pero aun así he cambiado en /etc/pacman.conf de “auto” a “i686”. Pero nada, sigue saltando el mismo error.

El caso es que si vas a la pagina de arch http://www.archlinux.org/packages/$repo/i686/$paquete si que los puedes descargar.

Un poco extraño, arch esta centrado en 64 y seguramente tendran un poco olvidados los repos de 32, cuando tenga un rato me pongo y miro cual es exactamente el problema.

El caso es que hoy no tenia tiempo y despues de descargar el tercer paquete con wget e instalar he visto que lo mejor seria hacer un script. Esta hecho un poco a lo bruto, saco las dependencias de un paquete y de manera recursiva saco las dependencias de estos, así hasta que llego a “sh” o algún paquete sin entrada en los repositorios.

#!/bin/bash

function trim() { echo $1; }

function extract_info()
{

	INFO=$(pacman -Si $1 | egrep "^$2")
	INFO=${INFO#*:}
	INFO=$(trim "$INFO")
	echo $INFO
}

function install_file()
{

	pacman --noconfirm -U $1
	if [ "$?" == "0" ]
	then
		rm $1
		exit 0
	fi
}

function install_from_url()
{
	pacman -Qi $1 1> /dev/null
	if [ "$?" == 0 ]
	then
		echo "The package $1 is alrealy installed"
		exit 0
	fi

	DEPEN_ARRAY=$(extract_info $1 "Depends On")
	REPO=$(extract_info $1 "Repository")

	if [ "$DEPEN_ARRAY" != "None" ]
	then
		for DEPEN in $DEPEN_ARRAY
		do
			DEPEN=${DEPEN%>=*}
			pacman -Qi $DEPEN 1> /dev/null
			if [ "$?" != "0" ]
			then
				$( install_from_url "$DEPEN" )
			fi
		done
	fi

	if [ -f $1 ]
	then
		install_file $1
	fi

	wget http://www.archlinux.org/packages/$REPO/i686/$1/download/ -O $1

	if [ -f $1 ]
	then
		if [ ! -s $1 ]
		then
			rm $1
		else
			install_file $1
		fi
	fi

}

PACKAGE="$1"

if [ ! "$PACKAGE" ]
then
	echo "A package is needed"
	exit
fi

install_from_url $PACKAGE
Anuncios