Как собрать в архив все файлы rpm-пакета?

  • BASH
В продолжение аналогичного поста о dpkg предлагаю использовать следующий «наивный» вариант скрипта, собирающего те файлы, которые были скопированы в систему при установке rpm-пакета. Файлы, созданные автоматически INSTALL-скриптом пакета при этом «подобраны» не будут.

Для запуска скрипта нужно иметь возможность выполнять sudo под суперпользователем: это связано с тем, что немалая часть пакетов устанавливает файлы с эксклюзивным доступом к ним root'а: в таких случаях попытка создать tar-архив провалиться с треском.

Собственно код:

#!/bin/bash
[[ $1 == '-x' ]] && { shift; export TRACE=1; set -x; }
[[ $1 ]] || { echo 'You must specify package name or path to some file installed from the package' >&2; exit 1; }

if [[ ${1:0:1} == '/' ]]; then
        FILE=$1
        if ! PACKAGE=$(rpm -qf $(readlink -e $FILE)) 2>/dev/null || ! [[ $PACKAGE ]]; then
                echo 'Cant determine package name by file name' >&2
                exit 2
        fi
else
        PACKAGE=$1
        if ! PACKAGE=$(rpm -q $PACKAGE); then
                echo "This package seems to be not installed" >&2
                exit 3
        fi
fi

sudo bash <<EOSCRIPT
        tar -cjf "/tmp/${PACKAGE}.tbz2" -T <(
          while read f; do
                  [[ -d \$f ]] || echo "\$f"
          done < <(rpm -ql '${PACKAGE}')
        )
        chown "$(whoami)":"$(id -gn)" "/tmp/${PACKAGE}.tbz2"
        echo "/tmp/${PACKAGE}.tbz2 created" >&2 
EOSCRIPT


UPD: Поправил код скрипта, избавив его от 2-х вызовов sudo и пофиксив ошибки отсутствия присвавивания FILE=$1, а также ошибку сохранения короткого имени пакета, если было передано именно таковое.

Проблема с SUDO

  • FreeBSD
всем привет! freebsd 6.2 прошло обновление портов и после этого слетел sudo начиная ставить выдает ошибку:

===> Configuring for sudo-1.8.6.p3_1
configure: Configuring Sudo version 1.8.6p3
checking for gcc… cc
checking whether the C compiler works… no
configure: error: in `/usr/ports/security/sudo/work/sudo-1.8.6p3':
configure: error: C compiler cannot create executables
See `config.log' for more details
===> Script «configure» failed unexpectedly.
Please report the problem to wxs@FreeBSD.org [maintainer] and attach the
"/usr/ports/security/sudo/work/sudo-1.8.6p3/config.log" including the output
of the failure of your make command. Also, it might be a good idea to provide
an overview of all packages installed on your system (e.g. a /usr/sbin/pkg_info
-Ea).
*** Error code 1

Stop in /usr/ports/security/sudo.
*** Error code 1

gcc обновлял. не понятная папка work.
у кого нибудь было что то подобное?

Sudo не видит некоторые системные команды

  • Linux
Не раз уже говорилось что безопасность прежде всего. К чему это я? Да к тому что игры с правами суперпользователя root — дело плохое и потому используется чудная команда
sudo
А так как в консоли работать хочется по-комфортнее, то запускаем MidnigthCommander
sudo mc
Но вот беда, у команды sudo есть особенность: она не видит некоторые системные команды, например размещенные в каталоге /sbin: ifconfig и другие. Беда конечно, но сделано это из соображений безопасности. Как быть? Ведь нам надо работать. Оказывается есть решение, довольно простое:
sudo su -c mc
— произойдет запуск mc от имени root без пароля, на медленных консолях используйте
sudo su -c mc -s
— отключит псевдографику и ускорит работу.

P.S.: Не забывайте только сделав всё необходимое от имени root'а своевременно выйти из режима суперпользователя.