LINUX.ORG.RU

Как отличить rpm-based от deb-based?

 ,


0

4

Какой самый простой и надёжный способ отличить rpm-based систему от deb ? Для скрипта. Все отличия какие-то неоднозначные, след. не очень надёжны, каждый форк всё по своему делает. Вот например была рекомендация на просторах сети: for i in $( echo rpm dpkg pacman ); do which $i; done 2> /dev/null Вроде здорово, но что же я вижу:

lab@nb11:~$ for i in $( echo rpm dpkg pacman ); do which $i; done 2> /dev/null
/usr/bin/rpm
/usr/bin/dpkg
lab@nb11:~$       

вот прямо так, дистр на все случаи жизни… )


Посмотри где больше пакетов установлено или в каком из пакетных менеджеров установлено ядро или например grep - тот и будет основным. А строгой границы и нельзя провести, можно при желании установить rpm в deb-дистр или dpkg в rpm-дистр и плавно удалять пакеты в одном и ставить в другом.

firkax ★★★ ()

Возьми к примеру Альт Linux, менеджер пакетов там apt, но сами пакеты rpm, а не deb.

В deb-based дистрибутиве может стоять утилита rpm для возможности конвертации rpm пакета в архив и даже установки его сразу штатно.

Но в случае установки через rpm -i package.rpm в базе установленных rpm пакетов не будет пакетов зависимостей устанавливаемого пакета и установки прервётся.

Определить поэтому можно по наличию директории с базой установленных RPM или DEB пакетов.

Но в целом, по названию дистрибутива можно определить какой формат пакетов используется. Но тут тебе либо нужно вести самостоятельный список, либо искать готовый.

Определить дистрибутив можно по выводу lsb_release -a.

kostik87 ★★★★★ ()
Ответ на: комментарий от kostik87

Следовательно можно смотреть на наличие директории с базой установленных DEB или RPM пакетов случае наличия двух утилит, deb и rpm в системе.

Или проверять количество установленных deb и rpm пакетов в системе, в случае наличия двух утилит.

В случае deb-based дистрибутива количество установленных deb пакетов не будет равняться нулю, в случае rpm - количество rpm пакетов будет больше нуля.

kostik87 ★★★★★ ()
Ответ на: комментарий от icarus

В случае deb-based дистрибутива - /var/lib/dpkg, ну либо как указано в конфигурационных файлах утилиты deb.

Не знаю меняют ли строители дистрибутивов путь по умолчанию.

Можешь опираться на количество установленных пакетов deb или rpm в системе.

kostik87 ★★★★★ ()
Ответ на: комментарий от kostik87
lab@nb11:~$ ls -l /var/lib/rpm /var/lib/dpkg
/var/lib/dpkg:
итого 6500
<...>

/var/lib/rpm:
итого 0

Да, разница очевидна. Видимо надёжнее всего исходить из этого.

icarus ()
Ответ на: комментарий от icarus

Проверить, зарегистрирован ли пакет rpm в списке установленных rpm-пакетов: rpm -q rpm. Если exit code 0, то эта система rpm-based.

iliyap ★★★★★ ()

Ну так и продолжай тесты.

Если есть rpm, то

rpm -q rpm

Если есть dpkg, то

dpkg -l dpkg

AVL2 ★★★★★ ()
Ответ на: комментарий от kostik87

Определить дистрибутив можно по выводу lsb_release -a.

…Которая, мягко говоря, не везде есть. Вот только что посмотрел — в моей Федоре не фурычит, хотя казалось бы…

hobbit ★★★★★ ()
Ответ на: комментарий от kostik87

Возьми к примеру Альт Linux, менеджер пакетов там apt

В вики пишут, что пакетный менеджер — RPM

То, что поверх rpm в альте apt, знаю.

утилиты apt пока нет, пользуйтесь apt-get/apt-cache из пакета apt.

APT в ALT Linux

greenman ★★★★★ ()
Последнее исправление: greenman (всего исправлений: 2)

Какой самый простой и надёжный способ отличить rpm-based систему от deb ?

Спросить у пользователя.

einhander ★★★★★ ()
cat /etc/*release* 

И грепать выхлоп, самое универсальное, кмк.

tolstoevsky ()

Самое простое - проверить наличие каталогов с базой пакетов (/var/lib/rpm и т.д.)

alex1101 ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.