Инструменты пользователя

Инструменты сайта


linux:overall:apt

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
linux:overall:apt [2023/12/16 05:37]
admin [dnf (yum)]
linux:overall:apt [2025/02/20 09:41] (текущий)
admin
Строка 1: Строка 1:
 ====== Менеджеры пакетов ====== ====== Менеджеры пакетов ======
 <code bash> <code bash>
-  # предложит ввести номер пути по умолчанию +  # настройка варианта 
-sudo update-alternatives --config java +update-alternatives --config java 
-  # или+ 
 +  # перечень
 update-java-alternatives --list update-java-alternatives --list
 +
 +  # добавление нового варианта (последние цифры не сильно важны)
 +update-alternatives --install /usr/bin/java java /usr/lib/jvm/bellsoft-java17/bin/java 333
 +
 +  # тут какая то инфа 
 +update-alternatives --display java
 +
 +  # установка в неинтерактивном режиме
 +update-alternatives --set java /usr/bin/java17
 +
 +  # расположение jvm
 +/usr/lib/jvm/
 </code> </code>
 +
 +
  
 ===== apt ===== ===== apt =====
Строка 16: Строка 31:
   * **list** - список установленных пакетов   * **list** - список установленных пакетов
   * **download (source)** - скачать пакет (исходный код пакета) в текущую директорию   * **download (source)** - скачать пакет (исходный код пакета) в текущую директорию
 +  * **apt-get install --only-upgrade <packagename>** - обновить один пакет
  
 ==== Репозитории ==== ==== Репозитории ====
Строка 73: Строка 89:
 # Распаковать пакет # Распаковать пакет
 sudo rpm2cpio ha_wrapper-1.0.0-20.noarch.rpm | cpio -idmv sudo rpm2cpio ha_wrapper-1.0.0-20.noarch.rpm | cpio -idmv
 +
 +# Локальный пакет
 +sudo dnf install app.rpm
 </code> </code>
 +
 +Добавить репозиторий из адреса\\
 +В директории **/etc/repos.d** создается отдельный файл с нужными параметрами\\
 +Но могут еще понадобиться gpg ключи, он их не добавляет и не задаем параметры для них\\
 +<code bash>
 +dnf config-manager --add-repo http://local.ru
 +
 +cat /etc/yum.repos.d/local.ru.repo
 +```
 +[local.ru]
 +name=created by yum config-manager from http://local.ru
 +baseurl=http://local.ru
 +enabled=1
 +```
 +</code>
 +
 +
 +
  
  
 ===== snap ===== ===== snap =====
 +<details>
 +<summary>:!: Examples</summary>
 <code bash> <code bash>
   # Установка   # Установка
Строка 106: Строка 145:
 snap forget 2 snap forget 2
 </code> </code>
 +</details>
  
  
Строка 117: Строка 157:
 При установке **deb** пакета, в случае отсутствующих зависимостей, можно выполнить команду **# apt-get install -f**, которая установит все зависимости, после повторить установку **# dpkg -i file-name.deb**.\\ При установке **deb** пакета, в случае отсутствующих зависимостей, можно выполнить команду **# apt-get install -f**, которая установит все зависимости, после повторить установку **# dpkg -i file-name.deb**.\\
 Так же, можно скопировать deb-файл в папку **/var/cache/apt/archives/** и установить как обычную программу **# apt install file-name** Так же, можно скопировать deb-файл в папку **/var/cache/apt/archives/** и установить как обычную программу **# apt install file-name**
 +
 +
 +
 +
 +===== RPM Build =====
 +**rpmbuild** урезанная версия rpm, только для сборки, вторая может работать так же, с теми же командами\\
 +
 +**mock** делает сборку в чистой среде, чрутит систему и может разом собирать для нескольких систем/архитектур, настраивается конфигом\\
 +Резы в рабочей директории ("/var/lib/mock" или "/jenkins_slave/mock"), там как минимум чрутовая система, для резов можно указать отдельные пути, в параметрах "--resultdir" для первого этапа (сборка SRPMS, файлы *.src.rpm) и "--localrepo" для второго, когда генерятся уже готовые rpm\\
 +
 +Для сборки src.rpm нужны spec файлы, с описанием параметров сборки из исходников, далее, из этих файлов генерятся готовые rpm пакеты, эти хранятся в "RPMS"\\
 +
 +
 +<details>
 +<summary>:!: Пример минимального spec, не требующего доп исходников</summary>
 +<code bash>
 +Name:       hello-world
 +Version:    1
 +Release:    1
 +Summary:    Most simple RPM package
 +License:    FIXME
 +
 +%description
 +This is my first RPM package, which does nothing.
 +
 +%prep
 +# we have no source, so nothing here
 +
 +%build
 +cat > hello-world.sh <<EOF
 +#!/usr/bin/bash
 +echo Hello world
 +EOF
 +
 +%install
 +mkdir -p %{buildroot}/usr/bin/
 +install -m 755 hello-world.sh %{buildroot}/usr/bin/hello-world.sh
 +
 +%files
 +/usr/bin/hello-world.sh
 +
 +%changelog
 +# let's skip this for now
 +</code>
 +
 +
 +Сборка будет так
 +<code bash>
 +# Создание рабочих директорий
 +rpmdev-setuptree
 +# или так 
 +mkdir -p my_build_dir/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
 +
 +# Вторым аргументом регулируется уровень сборки, до сурсов, до бинарников и тд
 +rpmbuild -ba hello-world.spec
 +</code>
 +</details>
 +
 +
 +
 +<details>
 +<summary>:!: Mock</summary>
 +Cборка моком, оба этапа
 +<code bash>
 +# Генерация файлов с исходниками (*.src.rpm)
 +mock -r /my_build_dir/m.cfg --buildsrpm --spec=hello.spec --sources=/my_build_dir/SOURCES
 +
 +  # для указания пути сохранения резов
 +mock -r /my_build_dir/m.cfg --buildsrpm --spec=hello.spec --sources=/my_build_dir/SOURCES --resultdir=/my_build_dir/SRPMS 
 +
 +
 +# Генерация пакетов (chain для списка файлов)
 +mock -r /my_build_dir/m.cfg --chain $(ls *.src.rpm)
 +
 +  # для указания пути сохранения резов, пар-р "localrepo"
 +mock -r /my_build_dir/m.cfg --chain $(ls *.src.rpm) --localrepo /my_build_dir/RPMS/x86_64
 +</code>
 +</details>
 +
 +
 +
 +<details>
 +<summary>:!: Параллельные сборки</summary>
 +★ Параллельно запустить сборки с одним конфигом нельзя (одно и тоже название для chroot-папки), блокируется чрут-директория\\
 +
 +★ Можно создавать отдельные чруты для каждой сборки, для этого есть пар-р "--uniqueext", добавляет соль в название\\
 +UPD: Есть проблема при очистке, тк кеши (/var/cache/mock) все равно создаются общие, если чиститься ("--scrub=all") внутри каждой сборки то это аффактит других\\
 +Выход это использовать полную изоляцию, параметры "basedir" и "cache_topdir", можно в конфиге можно в команде запуска\\
 +
 +★ Нужно передавать на обоих этапах (исходники и пакеты) и при очистке тоже нужно передавать этот индекс
 +
 +
 +<code bash>
 +mock -r /my_build_dir/m.cfg --uniqueext=123
 +
 +# Сборка --buildsrpm
 +mock -r /workdir/sbel.cfg --buildsrpm --spec=/workdir/hello.spec --sources=/workdir/my_build_dir/SOURCES --resultdir=/workdir/my_build_dir/SRPMS --config-opts=basedir='/workdir/build/' --config-opts=cache_topdir='/workdir/build/' --uniqueext=123 
 +
 +
 +# Сборка --chain
 +mock -r /workdir/sbel.cfg --chain $(ls /workdir/my_build_dir/SRPMS//*.src.rpm) --localrepo /workdir/my_build_dir/RPMS/x86_64 --config-opts=basedir='/workdir/build/' --config-opts=cache_topdir='/workdir/build/'
 +
 +
 +# Очистка 
 +mock -r /workdir/sbel.cfg --scrub=all --config-opts=basedir='/workdir/build/' --config-opts=cache_topdir='/workdir/build/' --uniqueext=321
 +</code>
 +При таком подходе "--uniqueext" лучше все равно передавать, иначе чрут чистится вместе с кешем (который в ту же папку ложится) после первого этапе и втрой выполняется очень долго, (для второго этапа создается новый чрут и без кеша он создается очень долго)\\
 +</details>
 +
 +
 +
 +<details>
 +<summary>:!: Очистка кеша </summary>
 +★ Mock создает chroot-окружения ОС, в "/var/lib/mock", и общие кеши в "/var/cache/mock", создается по два, второй "bootstrap" служебный, для раскатки туда сначала целевых менеджеров пакетов, чтобы потом этими менеджерами ставить все в итоговую (а не хостовым менеджером)\\
 +
 +★ Параметр конфига "cleanup_on_success" чистит только основной чрут и только после первого этапа сборки
 +
 +★ Команда "mock --clean" - удаляет только основную чрут директорию, в данном случае - "/var/lib/mock/MyOS-x86_64-123" остальные три остаются\\
 +
 +★ Команда "mock --scrub" имеет несколько вариантов:\\
 +  * "--scrub=chroot" - тоже самое что и "mock --clean"
 +  * "--scrub=all" - удалит все 4 папки, тобишь и общий кеш тоже (аффектит другие сборки)
 +  * "--scrub=bootstrap" - удалит только bootstrap но оба, свой и общий (что тоже аффектит)
 +  * есть еще варианты "cache, root-cache, c-cache, yum-cache" - они тут ничем не помогут
 +
 +★ Если каждая сборка будет с уникальным названием то чистить нужно обязательно, проблема в том что все доступные команды чистки затрагивают и общий кеш тоже
 +★ Чистить руками не удается т.к права на папки рутовые, (где то root:mock а где то root:root), в дженкинсе удалить можно только самим моком
 +
 +<code bash>
 +mock -r /my_build_dir/m.cfg --uniqueext=123 --scrub=all
 +</code>
 +
 +
 +Запуск с изоляцией в указанной папке
 +<code bash>
 +mock -r /workdir/sbel.cfg --buildsrpm --config-opts=basedir='/mock-chroots/build_job_12' --config-opts=cache_topdir='/mock-chroots/build_job_12' --uniqueext=123 
 +</code>
 +
 +Как выглядят папки
 +<code bash>
 +/mock-chroots/build_job_12/MyOs-x86_64:
 +drwxr-xr-x 2 root root 4096 Dec 13 06:53 dnf_cache
 +drwxr-xr-x 2 root root 4096 Dec 13 06:53 yum_cache
 +-rw-r--r-- 1 root root    0 Dec 13 06:53 yumcache.lock
 + 
 +/mock-chroots/build_job_12/MyOs-x86_64-868:
 +drwxrwxr-x 2 root root 4096 Dec 13 06:53 root
 + 
 +/mock-chroots/build_job_12/MyOs-x86_64-bootstrap:
 +drwxr-xr-x 6 root root 4096 Dec 13 06:53 dnf_cache
 +drwxrwxr-x 2 root root 4096 Dec 13 06:53 root_cache
 +drwxr-xr-x 2 root root 4096 Dec 13 06:53 yum_cache
 +-rw-r--r-- 1 root root    0 Dec 13 06:53 yumcache.lock
 + 
 +/mock-chrootsbuild_job_12/MyOs-x86_64-bootstrap-868:
 +-rw-rw-r--  1 root    root    0 Dec 13 06:53 buildroot.lock
 +drwxrwsr-x  2 jenkins mock 4096 Dec 13 06:53 results
 +drwxrwsr-x 12 root    mock 4096 Dec 13 06:53 root
 +</code>
 +</details>
 +
 +
 +<details>
 +<summary>:!: Траблы при очистке кеша </summary>
 +При использовании "изоляции" рабочей директории
 +<code bash>
 +mock -r /workdir/sbel.cfg --buildsrpm --config-opts=basedir='/mock-chroots/build_job_12' --config-opts=cache_topdir='/mock-chroots/build_job_12' --uniqueext=123 
 +</code>
 +
 +Если запустить с пустыми параметрами то будут проблемы с очисткой, мок не может найти нужные директории чтобы удалить
 +<code bash>
 +mock -r /workdir/sbel.cfg --buildsrpm --config-opts=basedir='' --config-opts=cache_topdir='' --uniqueext=123 
 +</code>
 +
 +Спасает только указать фактический путь в параметре конфига "root"
 +<code bash>
 +config_opts['root'] = '/mock-chroots/build_job_12_123' 
 +</code>
 +
 + 
 +
 +</details>
 +
 +
 +
 +
 +
 +
 +
  
  
  
  
linux/overall/apt.1702705046.txt.gz · Последнее изменение: 2023/12/16 05:37 — admin