rpkg (пакетный менеджер)

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

spkg
Сообщения: 4
ОС: slackware

rpkg

Сообщение spkg »

Стоит ли продолжать тему или просто не интересно?

Код: Выделить всё

Скрипт для создания установочных пакетов в систему, когда не требуются услуги 
штатного менеджера пакетов. Это те моменты, когда нужно установить какие либо
шрифты, обои для рабочего стола или какие нибудь свои скрипты... 
В общем, если очень нужно опробовать какую то идею без последствий для системы.

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

Файловый менеджер rpkg работает прозрачно в любых linux дистрибутивах, rpm 
совместимая это система или deb совместимая. Его можно использовать в качестве
пакетного менеджера даже при создании своего дистрибутива по книжке LFS! Ничто
не возбраняется.

Принцип работы пакетного менеджера rpkg заключается в следующем:

1) Он считывает инструкции по созданию устанавливаемого пакета из файла под 
названием rBuild(Об этом ниже по тексту). В rBuild заранее прописано откуда 
скачать исходники и как скомпилировать пакет. Затем, он просто создаёт сжатый 
архив скомпилированной программы или там пакета со шрифтами...

2) Чтобы не мешать основному системному пакетному менеджеру, создаётся 
простейшая база данных об установленных пакетах пакетным менеджером rpkg в 
каталоге /var/rpkg. Там будет два каталога - packages и scripts. В каталоге 
packages  находятся текстовые файлы со списком установленных файлов пакета(чтобы
было потом легко удалить), а в каталоге scripts - постустановочные скрипты. 
Зачем нужны постустановочные скрипты? Ну, например, мы пакет установили, но что-
то ещё нужно сделать - объявить системе, что мы установили какой то шрифт или 
нужно прописать тему иконок в системе. Фиксация постустановочных скриптов,
нужна для информативности, а так же, если мы захотим восстановить установленный 
уже в системе пакет в полной красе.

3) При удалении установленного пакета, rpkg удаляет из системы все файлы 
указанные в списке файлов пакета из каталога /var/rpkg/packages/, а так же 
предустановочный скрипт пакета(если он был) из каталога /var/rpkg/scripts/.

В принципе всё.

Теперь немножко о том, как rpkg создаёт пакеты пригодные к установке и о 
синтаксисе рецепта rBuild.

Прообраз рецепта скопирован из дистрибутива crux. Меня он подкупил своей 
простотой написания и краткостью. Именно это мне и было нужно. Все трудоёмкие 
для написания операции, я постарался перенести в сам скрипт rpkg. 
,,,
Спасибо сказали:
Аватара пользователя
SwapON
Сообщения: 147
ОС: Arch linux => Gentoo

Re: rpkg

Сообщение SwapON »

spkg писал:
12.03.2023 01:57
Стоит ли продолжать тему или просто не интересно?
Предпочитаю ручками всё ставить (ИМХО) без всяких непонятных скриптов
Спасибо сказали:
Аватара пользователя
UnixNoob
Сообщения: 1358
ОС: Slackware

Re: rpkg

Сообщение UnixNoob »

Как-будто про Slackbuild прочитал, из slackware. :)
"Однажды один очень мудрый человек… ничего не сказал. Времена были опасные, да и собеседники ненадёжные"
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20713
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: rpkg

Сообщение Bizdelnick »

Замечательный способ запороть систему.
Технически ничто не мешает ставить rpm-пакеты в deb-дистрибутиве или наоборот. Никто так не делает не из-за того, что пакетный менеджер на это не рассчитан, а из-за того, что сочетание разных пакетных менеджеров неминуемо приведёт к конфликтам. Строго говоря, даже не обязательно разных. Два экземпляра rpm (подставить любой другой ПМ) с разными базами дадут тот же эффект.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
spkg
Сообщения: 4
ОС: slackware

Re: rpkg

Сообщение spkg »

Bizdelnick писал:
12.03.2023 13:48
Замечательный способ запороть систему.
Технически ничто не мешает ставить rpm-пакеты в deb-дистрибутиве или наоборот. Никто так не делает не из-за того, что пакетный менеджер на это не рассчитан, а из-за того, что сочетание разных пакетных менеджеров неминуемо приведёт к конфликтам. Строго говоря, даже не обязательно разных. Два экземпляра rpm (подставить любой другой ПМ) с разными базами дадут тот же эффект.
Мне кажется, Вы заблуждаетесь. Создавать rpm-ку или *.deb для каких то шрифтов или темы для плазмы и т.д, чтобы потом снести это к чертям когда надоест, это я не знаю как даже назвать... А здесь, с малыми трудозатратами, пакетный менеджер записывает где находится каждый файлик, сносит всё подчистую. Никто же не собирается перекомпилировать какой нибудь ffmpeg... Это уже зависимости и подобное.

Советую Вам взглянуть на сие поделие. Там на примере linuxrar опакечивается. Чтобы понять как работает скрипт, даже устанавливать созданный пакет не нужно. Просто непонятно немного, я создаю менеджер чтобы порядок навести в системе, а Вы пытаетесь утверждать, что это не хорошо и что это способ запороть систему.

Скачать можно здесь:
rpkg-0.4.1.tar.gz

К слову, буилды в формате дистрибутива Crux.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20713
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: rpkg

Сообщение Bizdelnick »

spkg писал:
12.03.2023 22:35
Создавать rpm-ку или *.deb для каких то шрифтов или темы для плазмы и т.д, чтобы потом снести это к чертям когда надоест, это я не знаю как даже назвать...
Это называется грамотным решением. Если не хотите — ставьте шрифты и темы в хомяк, но систему гробить не надо. Для совсем ленивых есть checkinstall, в конце концов.
spkg писал:
12.03.2023 22:35
пакетный менеджер записывает где находится каждый файлик, сносит всё подчистую
Ага, и заодно системные файлы (установленные родным пакетным менеджером), никто ведь не станет проверять, что они по тем же путям могут устанавливаться.
spkg писал:
12.03.2023 22:35
Советую Вам взглянуть на сие поделие.
Зачем? Вы автор, я правильно понимаю? И Вам кажется, что сборка пакетов rpm и deb слишком сложна, то есть Вы их не осилили. Так дела не делаются. Чтобы создать достойную альтернативу, надо разобраться в существующих пакетных менеджерах, почему они сделаны именно так, как сделаны, выявить их недостастки, и только после этого браться за создание чего-то своего.
Кстати, имя rpkg уже используется другим проектом.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
spkg
Сообщения: 4
ОС: slackware

Re: rpkg

Сообщение spkg »

Bizdelnick писал:
13.03.2023 00:23
Это называется грамотным решением. Если не хотите — ставьте шрифты и темы в хомяк, но систему гробить не надо. Для совсем ленивых есть checkinstall, в конце концов.
Я в корне не согласен, с "грамотным решением". Я просто предложил, может кому понравится. Зачем Вы поучаете других как жить?
Bizdelnick писал:
13.03.2023 00:23
Зачем? Вы автор, я правильно понимаю? И Вам кажется, что сборка пакетов rpm и deb слишком сложна, то есть Вы их не осилили. Так дела не делаются.
Вы за меня решили что мне сложно, а что нет? Пожалуйста, буилд для сборки deb'а:

Код: Выделить всё

#!/bin/env bash

name="fonts-go"
fontname="go"

# Создаем каталог source и загружаем в него шрифты go
mkdir source
( cd source; git clone https://go.googlesource.com/image )

# Создаем дерево каталогов пакета
install -v -d -m755 ${name}/etc/fonts/conf.d
install -v -d -m755 ${name}/etc/fonts/conf.avail
install -v -d -m755 ${name}/usr/share/appdata

# Устанавливаем ttf-шрифты в свой каталог
install -Dm644 source/image/font/gofont/ttfs/Go-*.tt[fc] -t ${name}/usr/share/fonts/truetype/${fontname}

# Записываем конфиг 33-go-fonts-fontconfig.conf
echo '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE fontconfig SYSTEM "../fonts.dtd">
<fontconfig>
         <!-- Microsoft -->
        <alias binding="same">
          <family>Cambria</family>
            <accept>
              <family>Go</family>
            </accept>
        </alias>
        <alias binding="same">
          <family>Go</family>
            <default>
              <family>Cambria</family>
            </default>
        </alias>
</fontconfig>
' > ${name}/etc/fonts/conf.avail/33-${fontname}-fontconfig.conf

# Записываем конфиг 63-go-fonts-fontconfig.conf
echo '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE fontconfig SYSTEM "../fonts.dtd">
<fontconfig>
        <alias>
          <family>serif</family>
            <prefer>
              <family>Go</family>
            </prefer>
        </alias>
        <alias>
          <family>Go</family>
            <default>
              <family>serif</family>
            </default>
        </alias>
</fontconfig>
' > ${name}/etc/fonts/conf.avail/63-${fontname}-fontconfig.conf

# Делаем симлинки
( cd ${name}/etc/fonts/conf.d ; ln -sf /etc/fonts/conf.avail/33-${fontname}-fontconfig.conf . )
( cd ${name}/etc/fonts/conf.d ; ln -sf /etc/fonts/conf.avail/63-${fontname}-fontconfig.conf . )

# Добавляем метаданные AppStream
echo '<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2017 Vincent Batts <vbatts AT redhat DOT com> -->
<component type="font">
  <id>go-fonts</id>
  <metadata_license>CC-BY-3.0</metadata_license>
  <name>go-fonts</name>
  <summary>golang fonts</summary>
  <description>
    <p>
	    Produced specifically for the Go Project by Bigelow and Holmes type foundry.
    </p>
  </description>
  <updatecontact>vbatts_at_redhat_dot_com</updatecontact>
  <url type="homepage">https://blog.golang.org/go-fonts</url>
</component>
' > ${name}/usr/share/appdata/${fontname}.metainfo.xml

# Создаем каталог DEBIAN

mkdir ${name}/DEBIAN

# Вписываем в него контрольную сумму всех устанавливаемых файлов пакета
( cd ${name}; md5sum etc/fonts/conf.avail/* > md5sum; 
              md5sum etc/fonts/conf.d/* >> md5sum; 
              md5sum usr/share/appdata/* >> md5sum; 
              md5sum usr/share/fonts/truetype/${fontname}/* >> md5sum )
mv ${name}/md5sum ${name}/DEBIAN/

# Вписываем в него файл control
echo 'Package: fonts-go
Source: fonts-go
Version: 1.0
Architecture: all
Maintainer: LinuxMint Developers <mint-devel-discuss@lists.mint.com>
Section: fonts
Priority: optional
Description: width-compatible fonts for improved on-screen readability
 Produced specifically for the Go Project by Bigelow and Holmes type foundry.
Original-Maintainer: Debian Fonts Task Force <pkg-fonts-devel@lists.alioth.debian.org> 
' > ${name}/DEBIAN/control

# Вписываем в него файл conffiles
echo '/etc/fonts/conf.avail/33-go-fontconfig.conf
/etc/fonts/conf.avail/63-go-fontconfig.conf
' > ${name}/DEBIAN/conffiles

# Добавляем скрипт срабатывающий после установки пакета
echo '#!/bin/sh
set -e

if [ -x /usr/bin/fc-cache ]; then
  /usr/bin/fc-cache -f
fi
' > ${name}/DEBIAN/postinst
chmod ugo+x ${name}/DEBIAN/postinst

# Добавляем скрипт срабатывающий после удаления пакета
echo '#!/bin/sh
set -e

if [ -x /usr/bin/fc-cache ]; then
  /usr/bin/fc-cache -f
fi
' > ${name}/DEBIAN/postrm
chmod ugo+x ${name}/DEBIAN/postrm

# Создаем пакет *.deb
fakeroot dpkg -b ${name}/ .
 
И кто Вам сказал, что я сломаю систему? СВОЮ!!!

Просто мне захотелось иметь универсальный пакет для любой системы, и для rpm, и для deb, и для Slackware. Ищу близких по взглядам людей. Что в этом плохого?
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20713
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: rpkg

Сообщение Bizdelnick »

spkg писал:
13.03.2023 01:45
Я в корне не согласен, с "грамотным решением". Я просто предложил, может кому понравится. Зачем Вы поучаете других как жить?
Затем, что Вы предлагаете превратить систему в помойку и заложить в неё бомбу замедленного действия. Неопытные читатели могут этого не понимать, вот для них и поясняю.
spkg писал:
13.03.2023 01:45
Вы за меня решили что мне сложно, а что нет?
Я всего лишь сделал вывод из Ваших слов:
spkg писал:
12.03.2023 22:35
Создавать rpm-ку или *.deb для каких то шрифтов или темы для плазмы и т.д, чтобы потом снести это к чертям когда надоест, это я не знаю как даже назвать...
spkg писал:
13.03.2023 01:45
И кто Вам сказал, что я сломаю систему? СВОЮ!!!
Да делайте со своей что Вам вздумается. Но Вы же и мне со своей то же самое предлагаете сделать зачем-то. И другим форумчанам.
spkg писал:
13.03.2023 01:45
Просто мне захотелось иметь универсальный пакет для любой системы, и для rpm, и для deb, и для Slackware. Ищу близких по взглядам людей. Что в этом плохого?
Плохо то, что Вы и не пытались искать. Таких людей полно. Куда более квалифицированных и знающих подводные камни. Отсюда и всяческие flatpack, appimage, snap и т. п. Решения не без своих недостатков, но заявленную задачу они худо-бедно решают и дополнительных рисков не несут.

P. S. Чтоб Вы понимали, у меня есть большой опыт поддержки софта, устанавливаемого «универсальными пакетами» наподобие Ваших. И на них страшно дышать, чтобы, чего доброго, при установке или удалении в пользовательской системе чего не сломалось. Притом что ставится всё почти исключительно в /opt, а не как Вы предлагаете, прямо поверх системного хозяйства. Так что я знаю, о чём говорю.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
spkg
Сообщения: 4
ОС: slackware

Re: rpkg

Сообщение spkg »

Bizdelnick писал:
13.03.2023 02:14
P. S. Чтоб Вы понимали, у меня есть большой опыт поддержки софта, устанавливаемого «универсальными пакетами» наподобие Ваших. И на них страшно дышать, чтобы, чего доброго, при установке или удалении в пользовательской системе чего не сломалось. Притом что ставится всё исключительно в /opt, а не как Вы предлагаете, прямо поверх системного хозяйства. Так что я знаю, о чём говорю.
А вот это уже интересно!!! Значит работать таки не умеем? Сами же и признались... Даже не разобравшись в работе скрипта, кидаетесь в огульные обвинения. Понятно, у меня всякие яндексовские, майловские поделки в /opt'е работают, а у Вас - нет. Удалять и устанавливать даже не научились. Сочувствую... У меня к Вам деловое предложение. Если опять из /opt'а какое нибудь приложение попытается сломать ченить в "пользовательской" системе, обращайтесь ко мне, научу, помогу... :)
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20713
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: rpkg

Сообщение Bizdelnick »

spkg писал:
13.03.2023 02:34
Значит работать таки не умеем? Сами же и признались...
Умеем, умеем. При мне ни разу не ломалось. Но от этого менее страшно не становится. Вот если б стало — непременно бы сломалось. Ходьба по минному полю — это такое дело. Никому не рекомендую, и Вам в том числе.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
RcL
Сообщения: 4
ОС: Slackware/RcL

Re: rpkg

Сообщение RcL »

Считаю, что идея rpkg весьма полезна. Я, например, всегда работаю в Slackware и при переходе с версии на версию всегда собираю порядка 20 - 50 дополнительных пакетов, основу для сборки которых беру на slackbuilds.org или делаю сам. Кроме того, приходится в домашнем каталоге наводить порядок и доставлять собственные темы, например, скин для MC (чтобы глаза не болели).

Как реализован rpkg не смотрел, по описанию понятно, что это скрипты подобные SlackBuild или еще проще. Я и сам сначала делал пакетный менеджер на bash и далее перевел его на C.

Еще важным моментом является то, что "база" установленных пакетов представляется в виде текстовых файлов и всегда можно запросто найти к какому пакету относится тот или иной файл, не вспоминая судорожно, какие команды набрать в терминале, а просто запустить find/grep.

Однако создавая пакеты необходимо помнить о том, что файлы, входящие в пакет, не должны совпадать ни с одним системным. Поэтому от пользователя rpkg требуется аккуратность высшей степени, а это если не отпугнет сразу нерадивого пользователя, то рано или поздно он наделает ошибок самостоятельно. Так что инструмент rpkg должен предупреждать о совпадениях с тем, что уже есть в системе.
Спасибо сказали: