Собственно сам код скрипта:
#!/bin/bash
# Скрипт может принимать:
# 1. URL страницы репозитория (например, https://launchpad.net/~troorl/+archive/pino)
# 2. URL хранилища репозитория (например, http://ppa.launchpad.net/troorl/pino/ubuntu)
# 3. спец. URL, в формате add-apt-repository (например, ppa:troorl/pino)
[ -z "$1" ] && echo "usage: `basename $0` [-i|--import-key] url [url ...]" 1>&2 && exit 1
isEXEC=0
[ "$1" = "-i" -o "$1" = "--import-key" ] && isEXEC=1 && shift
CMD='sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys'
reEXEC=''
for i in $@ ; do
if [[ x"${i:0:4}" = x"ppa:" ]]; then
URL=`echo "$i" | sed 's/^ppa:\(.\+\)\/\(.\+\)$/https:\/\/launchpad.net\/~\1\/+archive\/\2/'`
else
if [[ x"${i:0:11}" = x"http://ppa." ]]; then
URL=`echo "$i" | sed -e 's/ppa\.//' | awk -F'/' '{print "https://"$3"/~"$4"/+archive/"$5}'`
else
URL=$i
fi
fi
HTML=`wget -qO- "$URL"`
TITLE=`echo "$HTML" | sed -ne 's/^.\+<title>\(.\+\):\ .\+$/\1/p'`
DESC=`echo "$HTML" | sed -ne 's/^.\+text\"><p>\(.\+\)<\/p.\+$/\1/p'`
CODE=`echo "$HTML" | sed -ne 's/^.\+<code>.\+\/\(.\+\)<\/.\+$/\1/p'`
PPA=`echo "$HTML" | sed -ne 's/^\ *\(deb \)<a href=\"\(.\+\)\">.\+$/printf "%-1s %s %s %s" \1 \2 $(lsb_release -cs) main/ep'`
if [ $isEXEC -eq 1 ]; then
$CMD $CODE &>/dev/null
if [ $? -eq 0 ]; then
reEXEC=' [ADDED]'
else
reEXEC=' [FAIL]'
fi
fi
echo -e "
### $TITLE :: $DESC
## $URL
# Add key$reEXEC: $CMD $CODE
$PPA\t\t# $TITLE"
reEXEC=''
done
Скрипт выводит на stdout 4 строки:
1. Название репозитория :: Описание репозитория
2. Страница репозитория
3. Команда для добавления ключа
4. Строка необходимая для /etc/apt/sources.list
Взгляните сами, так будет понятнее:
$ ppaadd -i ppa:troorl/pino https://launchpad.net/~troorl/+archive/pino http://ppa.launchpad.net/troorl/pino/ubuntu ### pino :: Pino is Twitter client for Linux desktop. It's simple and fast. Pino is written in Vala language and compiled to the native binary code. ## https://launchpad.net/~troorl/+archive/pino # Add key [ADDED]: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ECF4C854 deb http://ppa.launchpad.net/troorl/pino/ubuntu lucid main # pino ### pino :: Pino is Twitter client for Linux desktop. It's simple and fast. Pino is written in Vala language and compiled to the native binary code. ## https://launchpad.net/~troorl/+archive/pino # Add key [ADDED]: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ECF4C854 deb http://ppa.launchpad.net/troorl/pino/ubuntu lucid main # pino ### pino :: Pino is Twitter client for Linux desktop. It's simple and fast. Pino is written in Vala language and compiled to the native binary code. ## https://launchpad.net/~troorl/+archive/pino # Add key [ADDED]: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ECF4C854 deb http://ppa.launchpad.net/troorl/pino/ubuntu lucid main # pinoКак видите, скрипт понимает как "спец. урл" (в формате add-apt-repository), так и урлы страницы и хранилища репозитория. А параметр "-i" позволяет сразу импортировать ключ репозитория в систему, при этом, если при импорте не возникнет ошибок, то в третьих строках вывода появится надпись (без ключа ее не будет) "[ADDED]", а если произойдет ошибка, то - "[FAIL]".
На последок приведу пример использования:
$ ppaadd -i ppa:troorl/pino | sudo tee -a /etc/apt/sources.list ### pino :: Pino is Twitter client for Linux desktop. It's simple and fast. Pino is written in Vala language and compiled to the native binary code. ## https://launchpad.net/~troorl/+archive/pino # Add key [ADDED]: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ECF4C854 deb http://ppa.launchpad.net/troorl/pino/ubuntu lucid main # pinoРезультат был выведен на экран и добавлен в /etc/apt/sources.list, а так же был импортирован ключ репозитория:
$ grep -A 3 '### pino' /etc/apt/sources.list ### pino :: Pino is Twitter client for Linux desktop. It's simple and fast. Pino is written in Vala language and compiled to the native binary code. ## https://launchpad.net/~troorl/+archive/pino # Add key [ADDED]: sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys ECF4C854 deb http://ppa.launchpad.net/troorl/pino/ubuntu lucid main # pinoТ.ж. мне лично скрипт полезен тем, что бывает на просторах сети встречаешь статью, в которой рассказывается о какой-то софтине, и показано как ее ставить, но приведен не URL репозитория, а "спец. урл" (в формате add-apt-repository) или урл хранилища репозитория, а хочется получить URL страницы репозитория. Тут данный скрипт экономит время :)
Информация с сайта http://angel2s2.blogspot.com/.









3 коммент.:
а чем вам не угодила add-apt-repository ?
нет, ну, правда, зачем писать новый а не поправить старый, тем паче, что он все одно на питоне, который вполне себе ничего в плане правки?
Не угодил тем, что, как я уже писал, "предпочитаю хранить все репозитории в одном файле, а не разбрасывать их по разным файлам в каталоге /etc/apt/sources.list.d/", что и делает add-apt-repository. К тому же add-apt-repository не записывает "дополнительную" информацию в файл-настройку репозитория, например, как добавить ключ вручную и страница репозитория, что может быть полезно, когда нужно переустановить систему (ну мало ли что) или хочется этот же файл-настройку кинуть на другую машину.
Нуууууу... просто так, захотелось :)))
Питон я только не давно начал изучать, пока особо и не знаю его %)
Отправить комментарий