В сообщении от Четверг 26 апреля 2007 14:41 Attid написал(a):
> подпишусь в тему
> хочу скриптик установленых пакетов в системе у которых в зависимотях ничего
> нет. смотрел на dpkg но так и не понял как вытащить из него это все.
>
> логика понятна. надо получить список всех покетов
> и проверить все на зависимости, если от них ничего не зависит вывести на
> экран. как реализовать не очень понимаю.
>
> ЗЫ первым делелом должен вывести "ubuntu-desktop" =)
> причина, хочу поудолять лишнее из системы чтоб не обновлять всякие
> неиспользуемые пакеты =)

Во-первых надо смотреть в сторону утилиты deborphan - она есть в universe. Ну 
а уж если не подойдет, то вот есть такой мой наколенный скрипт. Правда для 
rpm-ных систем с аптом, но там небольшая корректировка. dpkg должен отдать 
список в виде:
leafpad
perl-IO-Zlib
iso-codes
psutils
gnome-utils
и т.д. Дальше уже аптом проверяется каждый пакет на наличие обратных 
зависимостей. Но надо осторожнее, потому как поломать что-то очень легко - не 
всегда зависимости напрямую прописаны в пакете. И сам скрипт:

#!/usr/bin/env python

from os import *
from subprocess import *
import re

def get_installed_packages():
    # get installed packages list from rpm
    print "Reading installed packages list..."

    cmd = 'rpm -qa --queryformat %{NAME}"\n"'
    bufsize = 512
    p = Popen(cmd, shell=True, bufsize=bufsize, stdin=PIPE, stdout=PIPE, 
stderr=PIPE, close_fds=True)
    cmd_buf = p.stdout.read()

    print "Done!"
    return cmd_buf
# end of "get_installed_packages()"

def search_orphans(list):
    # search for packages without reverse dependencies
    print "Searching for packages without reverse dependencies..."

    # generating list from list
    pkg_list = list.split("\n")

    # cycle through packages
    bufsize=512
    cond_re = re.compile(r'.*Reverse\sDepends:\s\nDependencies:.*')
    for pkg_name in pkg_list:
        cmd = 'apt-cache showpkg ' + pkg_name
        p = Popen(cmd, shell=True, bufsize=bufsize, stdin=PIPE, stdout=PIPE, 
stderr=PIPE, close_fds=
True)
        cmd_buf = p.stdout.read()
        if re.search(cond_re, cmd_buf) != None:
            print pkg_name
# end of "search_orphans()"

if __name__ == "__main__":
    pkg_list = get_installed_packages()
    search_orphans(pkg_list)

-- 
ubuntu-ru mailing list
ubuntu-ru@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-ru

Дати відповідь електронним листом