[image]

Портеж 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.

# emerge mozilla-firefox

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

(комментарии в следующем постинге)
Прикреплённые файлы:
Screenshot-3.png (скачать) [1186x472, 22 кБ]
 
 
   
+
-
edit
 

Balancer

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

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

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

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

Не нужна нам поддержка mozdevelop?

euse -D mozdevelop

потребовалась поддержка ipv6?

euse -E ipv6


Попробуем ещё раз... наглядно?
Прикреплённые файлы:
Screenshot.png (скачать) [1183x566, 27 кБ]
 
 
   
+
-
edit
 

Balancer

администратор
★★★★★
Поиск софта. Скажем, я не знаю точно название пакета с Firefox. Нет проблем:

# esearch firefox
[ Results for search key : firefox ]
[ Applications found : 3 ]

*  www-client/mozilla-firefox
      Latest version available: 1.5.0.6
      Latest version installed: 1.5.0.6
      Size of downloaded files: 117,632 kB
      Homepage:    http://www.mozilla.org/projects/firefox/
      Description: Firefox Web Browser
      License:     MPL-1.1 NPL-1.1

*  www-client/mozilla-firefox-bin
      Latest version available: 1.5.0.5
      Latest version installed: [ Not Installed ]
      Size of downloaded files: 38,277 kB
      Homepage:    http://www.mozilla.org/projects/firefox
      Description: Firefox Web Browser
      License:     MPL-1.1 NPL-1.1

*  www-client/mozilla-firefox-bin-fr
      Latest version available: 1.0.4
      Latest version installed: [ Not Installed ]
      Size of downloaded files: 8,348 kB
      Homepage:    http://www.mozilla.org/projects/firefox
      Description: The Mozilla Firefox Web Browser
      License:     MPL-1.1 NPL-1.1


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

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


[ Results for search key : games- ]
[ Applications found : 807 ]

*  games-action/0verkill
      Latest version available: 0.16-r3
      Latest version installed: [ Not Installed ]
      Size of downloaded files: 270 kB
      Homepage:    http://artax.karlin.mff.cuni.cz/~brain/0verkill/
      Description: A bloody 2D action deathmatch-like game in ASCII-ART
      License:     GPL-2

*  games-action/abuse_sdl [ Masked ]
      Latest version available: 0.7.0-r2
      Latest version installed: [ Not Installed ]
      Size of downloaded files: 2,464 kB
      Homepage:    http://www.labyrinth.net.au/~trandor/abuse/
      Description: port of Abuse by Crack Dot Com
      License:     GPL-2

*  games-action/accelerator3d [ Masked ]
      Latest version available: 0.1.1
      Latest version installed: [ Not Installed ]
      Size of downloaded files: 3,468 kB
      Homepage:    http://accelerator3d.sourceforge.net/
      Description: Fast-paced, 3D, first-person shoot/dodge-'em-up, in the vain of Tempest or n2o
      License:     Artistic

*  games-action/armagetronad
      Latest version available: 0.2.7.1
      Latest version installed: [ Not Installed ]
      Size of downloaded files: 11,068 kB
      Homepage:    http://armagetronad.sourceforge.net/
      Description: 3d tron lightcycles, just like the movie
      License:     GPL-2

*  games-action/atanks [ Masked ]
      Latest version available: 1.1.0
      Latest version installed: [ Not Installed ]
      Size of downloaded files: 1,048 kB
      Homepage:    http://atanks.sourceforge.net/
      Description: Worms and Scorched Earth-like game
      License:     GPL-2

...


извините, полный список приводить не буду :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-флага говорит о том, что флаг менялся после компиляции соответствующей программы.
Прикреплённые файлы:
Screenshot-1.png (скачать) [1280x643, 41 кБ]
 
 
   
+
-
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> Выложите, пожалуйста.

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

#!/bin/bash

emerge -puN world | grep -v UD\] | grep '\[ebuild' | sed -r 's/\[ebuild[^]]+\]\s+(\S+)\s+.*$/=\1/g' > /var/tmp/portage/world-update.txt

for p in `cat /var/tmp/portage/append.txt`; do
    emerge -puN $p | grep -v UD\] | grep '\[ebuild' | sed -r 's/\[ebuild[^]]+\]\s+(\S+)\s+.*$/=\1/g'  >> /var/tmp/portage/world-update.txt
done

for p in `cat /var/tmp/portage/append-must.txt`; do
    emerge -p $p | grep -v UD\] | grep '\[ebuild' | sed -r 's/\[ebuild[^]]+\]\s+(\S+)\s+.*$/=\1/g'  >> /var/tmp/portage/world-update.txt
done

mv /var/tmp/portage/world-update.txt /tmp/portlist.txt
/usr/local/bin/deldup < /tmp/portlist.txt > /var/tmp/portage/world-update.txt
rm /tmp/portlist.txt


Это скрипт обновления по списку:

#!/bin/bash

if [[ `pgrep -f $0|wc -l` != 2 ]]; then exit; fi

for i in `cat $1`; do
    name=`echo $i|sed s/=//`
    echo $name
    subname=`echo $name|sed -r 's/^.+\///'`
    emerge -bk $i 2> /var/log/portage/fail/$subname.txt 1>&2
    if [[ $? == 0 ]]; then
        echo $i >> /var/log/portage/success.txt
        mv -f /var/log/portage/fail/$subname.txt /var/log/portage/success/
    else
        echo $i >> /var/log/portage/fail.txt
        rm /var/tmp/portage/$subname -rf
    fi
done



Вот так потом он емержился (процесс запускался в screen'е)

/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
АвиаТОП
 
Яндекс.Метрика
website counter
 
free counters