nafanja |
|
Темы:
94
Сообщения:
9252
Участник с: 02 июня 2012
заблокирован
|
Не знаю как вы, но я храню кэш установленных пакетов, как часть бекапа системы. Вот тут понадобилось узнать все ли пакеты сохраняются, но штатной команды не нашел. Пришлось написать маленький скриптик. functions - библиотечка #!/bin/bash # # functions (pacman-save-sys) # # Copyright (c) 2012 ArchAnTavr <[email protected]> # http://archlinux.antavr.ru # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # TEXTDOMAIN="$SCRNAME" TEXTDOMAINDIR='/usr/share/locale' # Цвет и вид текста сообщений BLDRED='\e[1;31m' # Red BLDGRN='\e[1;32m' # Green BLDYLW='\e[1;33m' # Yellow BLDBLU='\e[1;34m' # Blue BLDWHT='\e[1;37m' # White TXTRST='\e[0m' # Text Reset # Параметры по умолчанию D_PACMANCONF='/etc/pacman.conf' # Пути укаываются без последнего слеша, кроме '/' D_PACMANROOT='/' D_PACMANDB='/var/lib/pacman' D_PACMANCACHE='/var/cache/pacman/pkg' T_PACMANCONF= T_PACMANROOT= T_PACMANDB= T_PACMANCACHE= PACMANCONF=$D_PACMANCONF PACMANROOT=$D_PACMANROOT PACMANDB=$D_PACMANDB PACMANCACHE=$D_PACMANCACHE PACMANOPT= PROOT= OPTION= OPTARG= echo_help1() { echo -e "${BLDYLW}$(gettext "Использование: $SCRNAME <опции> [...]")${TXTRST}" >&2 echo -e "${BLDWHT}$(gettext 'ОПЦИИ:')${TXTRST}" >&2 echo -e "\t${BLDWHT}-h${TXTRST} \t\t$(gettext 'вывод помощи')\n" >&2 echo -e "\t${BLDWHT}-p <file>${TXTRST} \t\t$(gettext 'использовать альтернативный конфигурационный файл') \t\t\t$(gettext 'по умолчанию:') $D_PACMANCONF\n" >&2 echo -e "\t${BLDWHT}-r <dir>${TXTRST} \t\t$(gettext 'указать альтернативный корневой каталог') \t\t\t$(gettext 'по умолчанию:') $D_PACMANROOT\n" >&2 echo -e "\t${BLDWHT}-b <dir>${TXTRST} \t\t$(gettext 'указать альтернативное расположение базы данных') \t\t\t$(gettext 'по умолчанию:') $D_PACMANDB\n" >&2 echo -e "\t${BLDWHT}-e <dir>${TXTRST} \t\t$(gettext 'указать альтернативное расположение кэша') \t\t\t$(gettext 'по умолчанию:') $D_PACMANCACHE\n" >&2 } # Убираем из пути последний слеш если он не единственный delslpath() { if [ "$1" == '/' ] then echo -n "/" else echo -n "$1" | sed 's/\/$//g' fi } # Получаем параметр из конфига getcfgopt() { local TEMP=$(grep -e "^$2" "$1" \ | awk -F '=' '{print $2}' \ | sed 's/^[ \t]*//;s/[ \t]*$//') echo -n "$(delslpath "$TEMP")" } # Проверяем параметры choption() { local OPTARG="$2" case "$1" in p) if [ ! -f "$OPTARG" ] then echo -e "${BLDRED}$(gettext 'Ошибка!!!')${TXTRST} $(gettext 'Файл не найден') '$OPTARG'" >&2 exit 1 fi T_PACMANCONF="$OPTARG" ;; r|b|e) OPTARG="$(delslpath "$OPTARG")" if [ ! -d "$OPTARG" ] then echo -e "${BLDRED}$(gettext 'Ошибка!!!')${TXTRST} $(gettext 'Каталог не найден') '$OPTARG'" >&2 exit 1 fi case "$1" in r) T_PACMANROOT="$OPTARG" ;; b) T_PACMANDB="$OPTARG" ;; e) T_PACMANCACHE="$OPTARG" ;; esac ;; h) echo_help exit 0 ;; \?) echo_help exit 1 ;; esac } # Устанавливаем параметры setoption() { # Если есть парамерт -r то устанавливаем if [ "$T_PACMANROOT" ] then PACMANROOT="$T_PACMANROOT" fi PROOT="$PACMANROOT" if [ "$PACMANROOT" ] \ && [ "$PACMANROOT" == '/' ] then PROOT= fi if [ "$T_PACMANCONF" ] then PACMANCONF="$T_PACMANCONF" else PACMANCONF="$PROOT$PACMANCONF" fi # Получаем DBPath RootDir CacheDir из конфиг файла local ROOT=$(getcfgopt "$PACMANCONF" 'RootDir') local DB=$(getcfgopt "$PACMANCONF" 'DBPath') local CACHE=$(getcfgopt "$PACMANCONF" 'CacheDir') # Устанавливаем значения из параметров if [ "$T_PACMANROOT" ] then PACMANROOT="$T_PACMANROOT" else if [ "$ROOT" ] then PACMANROOT="$ROOT" fi fi PROOT="$PACMANROOT" if [ "$PACMANROOT" ] \ && [ "$PACMANROOT" == '/' ] then PROOT= fi if [ "$T_PACMANDB" ] then PACMANDB="$T_PACMANDB" else if [ "$DB" ] then PACMANDB="$DB" fi PACMANDB="$PROOT$PACMANDB" fi if [ "$T_PACMANCACHE" ] then PACMANCACHE="$T_PACMANCACHE" else if [ "$CACHE" ] then PACMANCACHE="$CACHE" fi PACMANCACHE="$PROOT$PACMANCACHE" fi # добавляем опции к пакмену if [ "$PACMANCONF" != "$D_PACMANCONF" ] then PACMANOPT+=" --config '$PACMANCONF'" fi if [ "$PACMANROOT" != "$D_PACMANROOT" ] \ && [ "$PACMANROOT" != "$ROOT" ] then PACMANOPT+=" --root '$PACMANROOT'" fi if [ "$PACMANDB" != "$D_PACMANDB" ] \ && [ "$PACMANDB" != "$DB" ] then PACMANOPT+=" --dbpath '$PACMANDB'" fi if [ "$PACMANCACHE" != "$D_PACMANCACHE" ] \ && [ "$PACMANCACHE" != "$CACHE" ] then PACMANOPT+=" --cachedir '$PACMANCACHE'" fi } pacman-pkg-list - скрипт выводящий списки пакетов #!/bin/bash # # pacman-pkg-list (pacman-save-sys) # # Copyright (c) 2012 ArchAnTavr <[email protected]> # http://archlinux.antavr.ru # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # Имя текущего скрипта SCRNAME=$(basename "$BASH_SOURCE") # Путь к папке со скриптом SCRDIR=$(dirname "$BASH_SOURCE") source "$SCRDIR/functions" # Переключатели параметров VER='q' DEP='e' LOC=0 VERCACH=0 CACHE=0 # Функция вывода помощи echo_help() { echo_help1 echo -e "\t${BLDWHT}-v${TXTRST} \t\t$(gettext 'выводить версии пакетов') \t\t\t$(gettext 'по умолчанию:') $(gettext 'не выводить')\n" >&2 echo -e "\t${BLDWHT}-c${TXTRST} \t\t$(gettext 'вывести пакеты отсутствующие в кэше') \t\t\t$(gettext 'по умолчанию:') $(gettext 'из базы данных')\n" >&2 echo -e "\t${BLDWHT}-d${TXTRST} \t\t$(gettext 'вывести пакеты установленные как зависимости') \t\t\t$(gettext 'по умолчанию:') $(gettext 'явно установленные')\n" >&2 echo -e "\t${BLDWHT}-l${TXTRST} \t\t$(gettext 'вывести пакеты установленные локально или из AUR') \t\t\t$(gettext 'по умолчанию:') $(gettext 'зарегистрированные репозитории')\n" >&2 } # Функция проверки существования файлов из передаваемого списка в кэше testcahe() { local LINE echo -e "${BLDYLW}$(gettext 'проверяю существование пакетов в кэше')${TXTRST}" >&2 while read LINE do eval "LINE=($LINE)" if [ ! -f "$PROOT$PACMANCACHE/"${LINE[0]}-${LINE[1]}-*.pkg.tar.[gx]z ] then if [[ $VERCACHE -ne 0 ]] then echo ${LINE[@]} else echo ${LINE[0]} fi fi done } # Функция получения списков пакетов get_pkg() { echo -e "${BLDYLW}$(gettext 'получаю список пакетов'), pacman -Qm$DEP$VER$PACMANOPT${TXTRST}" >&2 if [[ $LOC -ne 0 ]] then eval "pacman -Qm$DEP$VER$PACMANOPT" | sort else comm -13 <(eval "pacman -Qm$DEP$VER$PACMANOPT" | sort) <(eval "pacman -Q$DEP$VER$PACMANOPT" | sort) fi } # Обработка параметров командной строки while getopts hp:r:b:e:cvdl OPTION do case $OPTION in h|\?|p|r|b|e) choption "$OPTION" "$OPTARG" ;; c) VER= CACHE=1 ;; v) VER= VERCACHE=1 ;; d) DEP='d' ;; l) LOC=1 ;; esac done setoption # Выполняем if [[ $CACHE -ne 0 ]] then get_pkg | testcahe else get_pkg fi Пример использования # Списки установленных пакетов bash pacman-pkg-list > pkg-official.list bash pacman-pkg-list -d > pkg-official-dep.list bash pacman-pkg-list -l > pkg-local.list bash pacman-pkg-list -ld > pkg-local-dep.list # Списки пакетов отсутствующих в кеше bash pacman-pkg-list -c > pkg-no-cache-official.list bash pacman-pkg-list -cd > pkg-no-cache-official-dep.list bash pacman-pkg-list -cl > pkg-no-cache-local.list bash pacman-pkg-list -cld > pkg-no-cache-local-dep.list
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874 |