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