LINUX.ORG.RU

Сообщения aslok

 

инфо о репах на bash (/etc/apt/sources.list.d/)

Первый раз написал на баш что-то длиннее пары строк, помогите пожалуйста найти ошибки и прочие моветоны..

Общий смысл работы скрипта:

  1. информация о том, какие репы из списка /etc/apt/sources.list.d/*.list реально используются (список установленных пакетов из данного репозитория)
  2. информация о том, какие репы из списка /etc/apt/sources.list.d/*.list устарели и не используются
  3. информация о том, какие репы из списка /etc/apt/sources.list.d/*.list не могут быть использованы (список пакетов пуст или строка deb закомментирована)

Для работы требуются права на чтение /etc/apt/sources.list.d/*.list и /var/lib/apt/lists/*

#!/usr/bin/env bash
DPKG_L="$(dpkg -l)"
INSTALLED=$(echo "$DPKG_L" | sed '1,+6d' | cut -c 5-51)
INSTALLED_VERSIONS=($(echo "$DPKG_L" | sed '1,+6d' | cut -c 52-108))
for FILE in /etc/apt/sources.list.d/*.list
do
        echo $(basename $FILE)
        FILE_LINE=$(grep '^deb ' "$FILE")
        if [[ $FILE_LINE == "" ]]
        then
                echo -e "\t" DISABLED
                continue
        fi
        PACKAGES_CACHE_FILE=/var/lib/apt/lists/$(echo $FILE_LINE | sed 's|/|_|g; s|deb http:__\([^ ]*\) \([^ ]*\) \([^ ]*\).*|\1_dists_\2_\3_binary-amd64_Packages|; s|_\+|_|g;')
        if [[ $(echo $PACKAGES_CACHE_FILE | wc -w) > 1 ]]
        then
                PACKAGES_CACHE_FILE=/var/lib/apt/lists/$(echo $FILE_LINE | sed 's|/|_|g; s|deb http:__\([^ ]*\) \([^ ]*\).*|\1_\2_Packages|; s|_\+|_|g;')
        fi
        PACKAGES=($(grep ^Package: "$PACKAGES_CACHE_FILE" | cut -f 2 -d ' '))
        PACKAGES_VERSIONS=($(grep ^Version: "$PACKAGES_CACHE_FILE" | cut -f 2 -d ' '))
        FROM_CURRENT=''
        FROM_OTHER=''
        NOT_INSTALLED=''
        PACKAGE_KEY=-1
        for PACKAGE in ${PACKAGES[*]}
        do
                PACKAGE_KEY=$[$PACKAGE_KEY+1]
                PACKAGE_INSTALLED=$(echo "$INSTALLED" | grep -w -n $PACKAGE)
                if [[ $PACKAGE_INSTALLED == "" ]]
                then
                        if [[ $(echo $NOT_INSTALLED | wc -w) < 5 ]]
                        then
                                NOT_INSTALLED="$NOT_INSTALLED $PACKAGE"
                        fi
                        continue
                fi

                PACKAGE_INSTALLED_KEY=$[$(echo $PACKAGE_INSTALLED | sed -n 's/\([^:]\+\).*/\1/p') - 1]
                if [[ ${PACKAGES_VERSIONS[$PACKAGE_KEY]} == ${INSTALLED_VERSIONS[$PACKAGE_INSTALLED_KEY]} ]]
                then
                        FROM_CURRENT="$FROM_CURRENT $PACKAGE"
                        if [[ $(echo $FROM_CURRENT | wc -w) < 5 ]]
                        then
                                continue
                        fi
                        break
                fi
                if [[ $(echo $FROM_OTHER | wc -w) < 5 ]]
                then
                        FROM_OTHER="$FROM_OTHER $PACKAGE"
                fi
        done
        echo -e -n "\t "
        if [[ $(echo $FROM_CURRENT | wc -w) != 0 ]]
        then
                echo -e "\t \t\t\t $FROM_CURRENT"
                continue
        fi
        if [[ $(echo $FROM_OTHER | wc -w) != 0 ]]
        then
                echo -e "OBSOLETE \t\t\t $FROM_OTHER"
                continue
        fi
        if [[ $(echo $NOT_INSTALLED | wc -w) != 0 ]]
        then
                echo -e "NOT INSTALLED \t\t\t $NOT_INSTALLED"
                continue
        fi
        echo -e "NO PACKAGES"
done

Результат работы, в консоли правда поровнее чем на форуме:

[aslok@3r]2011.04.14-02:18:20:~$ aptrepotree 
amule-trunk-ppa-maverick.list
                                          amule-common amule amule-utils amule-utils-gui
andrew-crew-kuznetsov-xneur-stable-maverick.list
         DISABLED
atareao-atareao-maverick.list
                                          picapy
debfx-virtualbox-maverick.list
         NOT INSTALLED                    virtualbox-ose virtualbox-ose-dbg virtualbox-ose-fuse virtualbox-ose-guest-utils virtualbox-ose-guest-x11
gnome3-team-gnome3-maverick.list
         NO PACKAGES
hydr0g3n-ppa-maverick.list
         DISABLED
kubuntu-ppa-beta-maverick.list
                                          amarok-common amarok-utils amarok libmygpo-qt1
kubuntu-ppa-ppa-maverick.list
         OBSOLETE                         jovie kmag kmousetool kcron kdeadmin
openoffice-pkgs-ppa-maverick.list
         NO PACKAGES
opera.list
                                          opera
rarewares.org.list
         NOT INSTALLED                    cpp-3.0 g++-3.0 gcc-3.0 gcc-3.0-base libcurl2
ripps818-coreavc-maverick.list
                                          mplayer
tuxonice-ppa-maverick.list
         OBSOLETE                         linux-headers-2.6.35-27 linux linux-source linux-image linux-source-2.6.35
webupd8team-y-ppa-manager-maverick.list
                                          y-ppa-manager yad ppa-purge
[aslok@3r]2011.04.14-02:19:32:~$ 

aslok
()

RSS подписка на новые темы