Портеж Gentoo

 
+
-
edit
 

Balancer

администратор
★★★★★
spam_test> Как это регулируется? вообще, как построена схема обновления софта?

Фундамент пакетного механизма Gentoo - портеж (portage). Основная идея была заимствована из FreeBSD, но заметно расширена и усовершенствована.

Суть такая. Все программы, которые могут устанавливаться штатными средствами Gentoo имеют в портеже небольшой файлик, ebuild, в котором описана вся процедура "добычи" файла (скачивание с зеркал, репозиториев и т.п.), его распаковки, накладывания патчей, если нужно, компиляции, настройки, установки.

Размер файла может быть от сотни байт и пары строчек, если установка уровня ./configure && make && make install, до десятков килобайт, если это очень сложная система с кучей зависимостей, десятками патчей и т.п.

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

Например, платформа. Если у тебя x86, то сборка может идти одним путём, если amd64 - то другим.

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

Управление выбором версий. Во-первых, все пакеты могут быть трёх основных типов. Это стабильные - обозначаются как "arch" - например, "x86", "amd64", "ppc"; не проверенные (название условно, это обычно просто свежие релизы софта, совместимость которых с другим может ещё быть не гарантирована) - обозначается как "~arch" - "~x86", "~amd64"; и - девелоперские, версии прямо "от репозитория разработчика" - "-*".

Ты волен настроить как класс версий на всю систему, так и на отдельный пакет. У меня традиционно система по умолчанию - arch, а конечный прикладной софт - ~arch. И только самые свежие разработки (XGL, compiz и т.п.) - "-*"

Можно также управлять выбором версий явно. Например, новая версия пакета тебя чем-то не удовлетворяет. Маскируешь её и пользуешься предыдущей версии. Обычно по каждой программе в репозитории лежит около пяти версий. Чаще всего - пара стабильных (отличаюющихся чем-то концептуально) и штуки три ~arch. -* пакеты в системе бывают редко.

Есть основной портеж - /usr/portage. Это, кажется, около 120 тыс. ebuild'ов (т.е. всех версий разных программ). Он поддерживается разработчиками Gentoo.

Есть ещё масса сторонних оверлеев. Это наборы ebuild'ов от сторонних разработчиков. У меня таковых бывало... до 25 штук! Сейчас - около десятка. Чаще всего - это поддержка редкого, или особо часто обновляющегося, или экспериментвльного софта, поддерживаемого энтузиастами. Скажем, XGL со всеми прибабахами у меня ставится из xgl coffee portage. С их SVN.

...

Ладно, пора на обед. После обеда напишу, как это всё выглядит не в теории, а на практике :) (на практике оно сильно проще, чем в описании)
 
+
-
edit
 

Balancer

администратор
★★★★★
Переходим к практической части :) Все примеры - с командной строки. Хотя сейчас есть масса неплохих GUI-утилит для работы с портежем, с командной строки оно как-то удобнее :)

Упрощённый базовый пример - установка Firefox.
code text
  1. # emerge mozilla-firefox

Всё. Через 32 минуты компиляции на amd64 имеем скачаный, скомпилированный и установленный Forefox. Безусловно, 32 минуты - это много для тех, кто привык к установки с бинарных дистрибутивов. Но стоит учесть, что подобные временные затраты нужны в массовом количестве фактически один раз, при первой установке Gentoo (а переустанавливать, как Windows или бинарные дистрибутивы Linux её больше не придётся). А последующие обновления всегда можно автоматизировать. Скажем, у меня система всё это делает автоматически, по ночам :) Это во-первых. А во-вторых - полная оптимизация под твой процессор, настройка, установка только нужных компонентов, отсутствие жёсткой привязки к версиям библиотек и т.п. Кто знает, с какими настройками собирал firefox поставщик бинарного дистрибутива. У нас же - всё как на ладони:

(комментарии в следующем постинге)
Прикреплённые файлы:
 
 
+
-
edit
 

Balancer

администратор
★★★★★
На скриншоте видно, что пакет у нас уже установлен ("R" - replace, будет переустановлен, если запустить).

Собран с поддержкой gnome (это список USE-флагов), java и содержит средства разработки (mozdevelop). Выключены debug-поддержка, ipv6, поддержка мультимониторных систем (xinerama), выключена печать xprint. Кроме дефолтового английского языка в интерфейсе собирается с поддержкой русского.

ebuild берётся из основного портежа (/usr/portage).

Исчерпывающе!

Не нужна нам поддержка mozdevelop?
code text
  1. euse -D mozdevelop

потребовалась поддержка ipv6?
code text
  1. euse -E ipv6


Попробуем ещё раз... наглядно?
Прикреплённые файлы:
 
 
+
-
edit
 

Balancer

администратор
★★★★★
Поиск софта. Скажем, я не знаю точно название пакета с Firefox. Нет проблем:
code text
  1. # esearch firefox
  2. [ Results for search key : firefox ]
  3. [ Applications found : 3 ]
  4.  
  5. *  www-client/mozilla-firefox
  6.       Latest version available: 1.5.0.6
  7.       Latest version installed: 1.5.0.6
  8.       Size of downloaded files: 117,632 kB
  9.       Homepage:    http://www.mozilla.org/projects/firefox/
  10.       Description: Firefox Web Browser
  11.       License:     MPL-1.1 NPL-1.1
  12.  
  13. *  www-client/mozilla-firefox-bin
  14.       Latest version available: 1.5.0.5
  15.       Latest version installed: [ Not Installed ]
  16.       Size of downloaded files: 38,277 kB
  17.       Homepage:    http://www.mozilla.org/projects/firefox
  18.       Description: Firefox Web Browser
  19.       License:     MPL-1.1 NPL-1.1
  20.  
  21. *  www-client/mozilla-firefox-bin-fr
  22.       Latest version available: 1.0.4
  23.       Latest version installed: [ Not Installed ]
  24.       Size of downloaded files: 8,348 kB
  25.       Homepage:    http://www.mozilla.org/projects/firefox
  26.       Description: The Mozilla Firefox Web Browser
  27.       License:     MPL-1.1 NPL-1.1


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

Хочется посмотреть, какие в портеже игры?

code text
  1. [ Results for search key : games- ]
  2. [ Applications found : 807 ]
  3.  
  4. *  games-action/0verkill
  5.       Latest version available: 0.16-r3
  6.       Latest version installed: [ Not Installed ]
  7.       Size of downloaded files: 270 kB
  8.       Homepage:    http://artax.karlin.mff.cuni.cz/~brain/0verkill/
  9.       Description: A bloody 2D action deathmatch-like game in ASCII-ART
  10.       License:     GPL-2
  11.  
  12. *  games-action/abuse_sdl [ Masked ]
  13.       Latest version available: 0.7.0-r2
  14.       Latest version installed: [ Not Installed ]
  15.       Size of downloaded files: 2,464 kB
  16.       Homepage:    http://www.labyrinth.net.au/~trandor/abuse/
  17.       Description: port of Abuse by Crack Dot Com
  18.       License:     GPL-2
  19.  
  20. *  games-action/accelerator3d [ Masked ]
  21.       Latest version available: 0.1.1
  22.       Latest version installed: [ Not Installed ]
  23.       Size of downloaded files: 3,468 kB
  24.       Homepage:    http://accelerator3d.sourceforge.net/
  25.       Description: Fast-paced, 3D, first-person shoot/dodge-'em-up, in the vain of Tempest or n2o
  26.       License:     Artistic
  27.  
  28. *  games-action/armagetronad
  29.       Latest version available: 0.2.7.1
  30.       Latest version installed: [ Not Installed ]
  31.       Size of downloaded files: 11,068 kB
  32.       Homepage:    http://armagetronad.sourceforge.net/
  33.       Description: 3d tron lightcycles, just like the movie
  34.       License:     GPL-2
  35.  
  36. *  games-action/atanks [ Masked ]
  37.       Latest version available: 1.1.0
  38.       Latest version installed: [ Not Installed ]
  39.       Size of downloaded files: 1,048 kB
  40.       Homepage:    http://atanks.sourceforge.net/
  41.       Description: Worms and Scorched Earth-like game
  42.       License:     GPL-2
  43.  
  44. ...


извините, полный список приводить не буду :D
 
+
-
edit
 

Balancer

администратор
★★★★★
Ну, пора закругляться. Ещё немного о базисе...

Как происходит процесс установки софта "на низком уровне"?

После подтвержения об установке того или иного пакета, система сперва добудет исходник и разместит его в /usr/portage/distfiles/. Это может быть простой архив с исходнками или бинарник с одного из зеркал Gentoo или прямо с сайта разработчика. В этом случае, кстати, не всегда нужно качать полную версию. Есть сторонняя система deltup, которая позволяет выкачивать только патчи по сравнению с одной из имеющихся на локальной машине старой версией. Также это может быть скачивание исходников с CVS, SVN, Darks и т.п. репозиториев разработчика.

После выкачивания исходников пакета, происходит его распаковка (или копирование в случае репозиториев) в /var/tmp/portage/имя-версия-пакета/

Кстати, в отличии от популярных yum/apt-подобных пакетных менеджеров, портеж позволяет выполнять параллельную установку нескольких пакетов.

После распаковки - осуществляется компиляция. Там же, в /var/tmp/portage/...

Затем осуществляется "виртуальная установка" в "песочницу" (sandbox) - полная имитация процесса установки, но не в систему, а в отдельный каталог.

И только после этого, если всё прошло без ошибок, осуществится установка пакета в систему.

Все установленные файлы будут прописаны в специальную базу данных - она нам понадобится, если мы будем обновлять или деинсталлировать программу.
 
+
-
edit
 

Balancer

администратор
★★★★★
Обновление пакета или всего "мира". В простейшем случае
emerge -u world
обновит нам всю систему (p = "pretend", v="verbose") - см. скриншот в аттаче.

Пояснения:
NS - new slot. В Gentoo некоторые программы и библиотеки могут присутствовать одновременно в нескольких версиях. Они различаются по слотам. Скажем, kde 3.5.3 обновится до 3.5.4 - это слот 3.5, но kde 3.4.2 будет установлен отдельно - это слот 3.4.2.

U - upgrade

UD - downgrade

звёздочка и зелёная подсветка USE-флага говорит о том, что флаг менялся после компиляции соответствующей программы.
Прикреплённые файлы:
 
 
+
-
edit
 

Balancer

администратор
★★★★★
При обновлении программы все этапы до момента установки - такие же, как и при установке новой.

А вот установка у неё сделана хитрее.

При установке каждого нового файла, проверяется время создания/модификации старой версии. Если файл не менялся с момента установки предыдущей версии прграммы, то он будет просто перезаписан.

Если менялся - новая версия будет сохранена в особый временный формат, и в системе появится нотификация о таких особых случаях. "Разрулить" их можно впоследствии с помощью программы etc-update. Она найдёт конфликты, позволит поочереди работать с каждым из них. Можно удалить обновление, можно переписать старую версию, а можно - в интерактивном режиме объединить файлы, выбирая тот или иной кусок различающегося текста и даже редактируя их на лету.

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

...

Вот, собственно, для начала - всё.

Если будут заинтересованные, попозже могу разместить свои наборы скриптов для еженочного безопасного автоматического обновления системы :)
 

Knyf

новичок
Как на счет скриптов?
 

Balancer

администратор
★★★★★
Knyf> Как на счет скриптов?

Каких?
 3.6.113.6.11

Knyf

новичок
"для еженочного безопасного автоматического обновления системы"
 

Balancer

администратор
★★★★★
Knyf> "для еженочного безопасного автоматического обновления системы"

А... Я с переезда Авиабазы на новый сервер так эту систему и не оживлял больше. Хотя, если интересно, из бэкапа старый вариант могу выложить.
 7.0.517.417.0.517.41

Knyf

новичок
Выложите, пожалуйста.

<< Я с переезда Авиабазы на новый сервер так эту систему и не оживлял больше.

То есть сейчас не Gentoo? А из-за чего сменили?
 

Balancer

администратор
★★★★★
Knyf> Выложите, пожалуйста.

Вот этот скрипт создавал список для обновления:
code bash
  1. #!/bin/bash
  2.  
  3. emerge -puN world | grep -v UD\] | grep '\[ebuild' | sed -r 's/\[ebuild[^]]+\]\s+(\S+)\s+.*$/=\1/g' > /var/tmp/portage/world-update.txt
  4.  
  5. for p in `cat /var/tmp/portage/append.txt`; do
  6.     emerge -puN $p | grep -v UD\] | grep '\[ebuild' | sed -r 's/\[ebuild[^]]+\]\s+(\S+)\s+.*$/=\1/g'  >> /var/tmp/portage/world-update.txt
  7. done
  8.  
  9. for p in `cat /var/tmp/portage/append-must.txt`; do
  10.     emerge -p $p | grep -v UD\] | grep '\[ebuild' | sed -r 's/\[ebuild[^]]+\]\s+(\S+)\s+.*$/=\1/g'  >> /var/tmp/portage/world-update.txt
  11. done
  12.  
  13. mv /var/tmp/portage/world-update.txt /tmp/portlist.txt
  14. /usr/local/bin/deldup < /tmp/portlist.txt > /var/tmp/portage/world-update.txt
  15. rm /tmp/portlist.txt


Это скрипт обновления по списку:
code bash
  1. #!/bin/bash
  2.  
  3. if [[ `pgrep -f $0|wc -l` != 2 ]]; then exit; fi
  4.  
  5. for i in `cat $1`; do
  6.     name=`echo $i|sed s/=//`
  7.     echo $name
  8.     subname=`echo $name|sed -r 's/^.+\///'`
  9.     emerge -bk $i 2> /var/log/portage/fail/$subname.txt 1>&2
  10.     if [[ $? == 0 ]]; then
  11.         echo $i >> /var/log/portage/success.txt
  12.         mv -f /var/log/portage/fail/$subname.txt /var/log/portage/success/
  13.     else
  14.         echo $i >> /var/log/portage/fail.txt
  15.         rm /var/tmp/portage/$subname -rf
  16.     fi
  17. done


Вот так потом он емержился (процесс запускался в screen'е)
code bash
  1. /usr/bin/screen -d -m -t EmergeUWorld -S screen /usr/local/bin/tools/portage/eupdate.sh /usr/local/bin/tools/portage/lists/world-update.txt &


Генератор списка крив, писался на коленке на уровне теста, но нет ничего более постоянного, чем временное :) Года три потом работал, если не больше.

Knyf> То есть сейчас не Gentoo? А из-за чего сменили?

Нет, Gentoo стоит. Я про то, что систему автообновления не стал поднимать.
 7.0.517.417.0.517.41
+
-
edit
 

HolyBoy

аксакал

Balancer> Вот этот скрипт создавал список для обновления:

Неплохая штука, я себе похожее сделал, но не для автообновления, а для обновления вручную, чтобы не набирать одну за другой команды, выяснять, что вдруг в даунгрейд идёт и тд и тп. Для автообновления на серверах не годится, ИМХО, т.к. порой старые конфиги становятся непригодными, а программы как минимум раз в сутки перезапускаются для ротации логов. Пока не обновишь конфиги вручную и не поправишь расхождения, лучше не перезапускать сервис.
 
+
-
edit
 

Balancer

администратор
★★★★★
HolyBoy> Пока не обновишь конфиги вручную и не поправишь расхождения, лучше не перезапускать сервис.

Угу. Ну так я их и не перезапускаю без нужды :)
 3.6.123.6.12

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru