Ajuda com Script e co-autoria.

1. Ajuda com Script e co-autoria.

Alberto Federman Neto.
albfneto

(usa openSUSE)

Enviado em 03/03/2013 - 19:06h

Olá. Traduzí para Português este Script de desmascarar Pacotes Gentoo:


http://ds3k.wordpress.com/2008/10/26/unmask-packages-in-gentoo/

Eis a minha tradução:


#!/bin/bash

#
# SCRIPT PARA DESMASCARAR PACOTES DE PORTAGE A SEREM INSTALADOS EM SABAYON OU GENTOO.
#

# Código de Autoria de: Alex, DeathSquad 3000, Suécia, 2008.
# https://ds3k.wordpress.com/

# Publicado diretamente em Domínio Público,
# portanto livre para uso e modificações.

# Tradução para Português do Brasil e modificação por
# Alberto Federman Neto, albfneto <albfneto@fcfrp.usp,br>, Brasil, 2013.
# http://va.mu/AP1

#
# Este Script desmascara pacotes e suas dependências.
# Ele não funcionará com pacotes hardmasked ou com EAPI ou SLOT diferentes,
# Somente funcionará em Portage versão 2.2_rc12 ou mais recente.
# e somente para as máscaras padrão por Palavra-Chave,
# como as dos pacotes estáveis ou instáveis,
# Ex. x86 ou ~amd64.

# Antes de usar este Script, lembre-se de sincronizar e atualizar
# o Portage e instalar as dependências necessárias:

# $ sudo emerge --sync
# $ sudo emerge av --oneshot portage PortageXS


# Código:

#
# Esta função checa se um pacote é mascarado por palavra chave ou não:
#
check_if_keyworded() {
if [[ $(emerge --pretend --quiet $package_to_emerge | grep 'masked by:' | cut -d ' ' -f 5 | head -n 1) == "missing" ]]; then
return 1
else
return 0
fi
}

#
# Esta função o desmascara:
#
do_unmasking() {
echo 'Aguarde um momento, desmascarando o (os) pacote (os)...'

while ! emerge --pretend --quiet $package_to_emerge &> /dev/null; do
spin
package_to_unmask=$(emerge --pretend --quiet $package_to_emerge | grep 'masked by: ~' | cut -d ' ' -f 2 | head -n 1)
echo "=$package_to_unmask" >> $outputpath/$outputfile
done

endspin

echo "Desmascarado. Checar em $outputpath/$outputfile."
}

#
# Assegurar que está locado como Superusuário, somente o Root pode executar o Script
#
if [[ $EUID -ne 0 ]]; then
echo "Este Script só pode ser executado em modo Root" 1>&2
exit 1
fi


if [[ -z "$1" ]]; then
echo 'Vôce precisa colocar o pacote na forma de Argumento, Assim,'
echo 'sh desmasc.sh Argumento. Ex:'
echo './desmasc.sh =categoria/package-versão'
exit
fi

#
# Variáveis necessárias:
#
typeset package_to_emerge=$1
typeset package_to_unmask
typeset -i count=1
typeset outputfile
typeset outputpath=/etc/portage/package.keywords

#
#Spinner que roda durante o tempo do desmascaramento
# Thanks a http://wooledge.org pelo código
#
typeset sp="/-\|"
typeset -i sc=0

spin() {
printf "\b${sp:sc++:1}"
((sc==${#sp})) && sc=0
}
endspin() {
printf "\r%s\n" "$@"
}

#
# Criando e renomeando o pacote desmascarado
# (Nome do Pacote no diretório adequado '/' )
#
outputfile=${package_to_emerge#*/}
# Thanks http://anton.lr2.com :-), pelo código

#
# Se não existir Palavra-Chave em /etc/portage/package.keywords, cria-la.
# Se existir, somente migrar conteúdo.
#
if [[ ! -e "$outputpath" ]]; then
echo "Criando Diretórios e Arquivos..."
mkdir -p $outputpath
touch $outputpath/$outputfile
fi

if [[ -f "$outputpath" ]]; then
echo "$outputpath é um arquivo."
echo "Criando diretório $outputpath"
echo 'e movendo o conteúdo antigo para o arquivo old'
echo 'aguarde por uns instantes'
echo "$outputpath/keywords-old"
sleep 3s
mv $outputpath /etc/portage/keywords-old
mkdir -p $outputpath
touch $outputpath/$outputfile
mv /etc/portage/keywords-old $outputpath
fi

#
# Verificar se o pacote foi desmascarado e caso não tenha sido, abortar.
#
if ! check_if_keyworded; then
echo 'Pacote sem Palavra-Chave manipulável. Não Desmascarável, Desculpe'
exit
else
do_unmasking
fi

# Fim do Código


Porém tanto na tradução como no Script Original, ele dá erros com o Portage novo...

"destrói" o arquivo /etc/portage/package.keywords (ao invés de editá-lo), e o deixa renomeado para package.keywords~

e aí, claro, o Portage não funciona. A pasta Backup com o arquivo antigo é criada normalmente.

O problema é no script original, abaixo

, pq os erros ocorrem tanto no original como na minha tradução. Não sou programador, assim não sei como corrigir o erro.

Gostaria de publicar aquo no VOL o Script, porisso, a quem se dispuser a corrigir o Erro, ofereço uma co-autoria.


  


2. Script Original

Alberto Federman Neto.
albfneto

(usa openSUSE)

Enviado em 03/03/2013 - 19:08h

\\\\\\\\este é o Script Original


#!/bin/bash

#
# This package unmasks a package and all its
# dependencies. It will not work with hard masked
# packages, only keyworded ones (~x86, ~amd64 for example).
# Also, it will not work if you try to unmask a package
# that requires a different EAPI than your installed portage version
# supports. You must then first manually install a newer portage
# version before trying to unmask.
#


#
# This function checks if a package is keyworded or not
# and returns a value depending on the result.
#
check_if_keyworded() {
if [[ $(emerge --pretend --quiet $package_to_emerge | grep 'masked by:' | cut -d ' ' -f 5 | head -n 1) == "missing" ]]; then
return 1
else
return 0
fi
}

#
# This function does the actual unmasking.
#
do_unmasking() {
echo 'Unmasking packages, this might take a while...'

while ! emerge --pretend --quiet $package_to_emerge &> /dev/null; do
spin
package_to_unmask=$(emerge --pretend --quiet $package_to_emerge | grep 'masked by: ~' | cut -d ' ' -f 2 | head -n 1)
echo "=$package_to_unmask" >> $outputpath/$outputfile
done

endspin

echo "Unmasking done. Check $outputpath/$outputfile."
}

#
# Make sure only root can run our script
#
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root" 1>&2
exit 1
fi


if [[ -z "$1" ]]; then
echo 'You need to supply the package you want to'
echo 'unmask as an argument. Ex:'
echo './unmasked.sh =category/package-x.y.z'
exit
fi

#
# Variables we need
#
typeset package_to_emerge=$1
typeset package_to_unmask
typeset -i count=1
typeset outputfile
typeset outputpath=/etc/portage/package.keywords

#
# A spinner that shows while unmasking is taking place
# Thanks http://wooledge.org
#
typeset sp="/-\|"
typeset -i sc=0

spin() {
printf "\b${sp:sc++:1}"
((sc==${#sp})) && sc=0
}
endspin() {
printf "\r%s\n" "$@"
}

#
# Create unmasking file, naming it after the package to emerge
# (Split the package name at the '/' character)
#
outputfile=${package_to_emerge#*/} # Thanks http://anton.lr2.com :-)

#
# If /etc/portage/package.keywords does not exist, create it.
# If it exists and is a file, migrate contents.
#
if [[ ! -e "$outputpath" ]]; then
echo "Creating necessary directories and files..."
mkdir -p $outputpath
touch $outputpath/$outputfile
fi

if [[ -f "$outputpath" ]]; then
echo "$outputpath is a file."
echo "I will now create a directory $outputpath"
echo 'and move the contents of your old file into'
echo "$outputpath/keywords-old"
sleep 3s
mv $outputpath /etc/portage/keywords-old
mkdir -p $outputpath
touch $outputpath/$outputfile
mv /etc/portage/keywords-old $outputpath
fi

#
# Make sure package is keyworded. If not, abort.
#
if ! check_if_keyworded; then
echo 'Package is missing keyword. I will not unmask this package'
exit
else
do_unmasking
fi




3. Re: Ajuda com Script e co-autoria.

Alberto Federman Neto.
albfneto

(usa openSUSE)

Enviado em 08/03/2013 - 16:31h

UP


4. Re: Ajuda com Script e co-autoria.

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 14/04/2013 - 17:20h

Execute o script com o comando:

bash -x nome_do_script

Assim vc poderá ver onde o problema ocorre, facilitando fazer a correção.

Obs.: Não o fiz, porque precisaria ter o Gentoo ;-)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts