https://www.altlinux.org/api.php?action=feedcontributions&user=EvgeniiTerechkov&feedformat=atomALT Linux Wiki - Вклад [ru]2024-03-29T12:51:00ZВкладMediaWiki 1.38.2https://www.altlinux.org/index.php?title=Skype&diff=43504Skype2019-01-21T06:10:19Z<p>EvgeniiTerechkov: typo</p>
<hr />
<div>[[Категория:Enterprise Software]]<br />
<br />
= Условия использования Skype =<br />
<br />
Согласно пункту 4.2 условий использования Skype (EULA), включение приложения в состав дистрибутивов Linux невозможно (хотя и не исключено, что некоторые разработчики дистрибутивов могли заключить какие-то дополнительные соглашения с Microsoft). Потому, ниже даны рекомендации по самостоятельной установке Skype.<br />
<br />
= Skype =<br />
<br />
{{Attention|C 1 марта 2017 года старая версия Skype 4.3 перестанет подключаться к сети Skype[https://blogs.skype.com/news/2017/02/03/the-skype-you-love-is-getting-better-download-it-for-free-today/]}}<br />
<br />
Загрузим новую версию Skype for Linux в виде пакета RPM по адресу https://www.skype.com/ru/get-skype/<br />
{{note|Поддерживаются только 64-х битные ОС}}<br />
При установке появятся предупреждения:<br />
service: atd: Unrecognized service<br />
error: unknown package manager<br />
error: execution of %post scriptlet from skypeforlinux-1.17.0.1-1 failed, exit status 1<br />
<br />
но пакет устанавливается и его можно запустить из меню.<br />
<br />
В Альт Рабочая Станция К необходимо также установить пакет gnome-keyring, так как новая версия Skype пока не работает с Kwallet. Иначе каждый раз при запуске системы, Skype будет запускаться с ошибкой аутентификации.<br />
<br />
Для активации авторизации с gnome-keyring делаем следующее:<br />
1.Открываем ~/.xinitrc<br />
2. Добавляем в него<br />
''eval $(/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh)<br />
export SSH_AUTH_SOCK<br />
''<br />
3.Перегружаемся и заново авторизуемся в Skype<br />
<br />
<!--= Установка Skype =<br />
== Поддерживаемые ветки ALT Linux и Сизиф (начиная с сентября 2014) ==<br />
<br />
В Сизиф и p6/p7+ с сентября 2014 входит пакет {{pkg|skype-preinstall}} ({{pkg|i586-skype-preinstall}} для архитектуры x86_64). Этот пакет предоставляет все нужные зависимости для актуальной версии Skype '''под OpenSUSE'''. Поэтому достаточно установить [http://www.skype.com/ru/download-skype/skype-for-computer/ соответствующий RPM] с сайта — либо кликом в браузере и последующим вызовом «программы установки RPM» ({{cmd|rpminstall}}), либо скачать последний релиз с помощью {{cmd|wget}} и установить его с помощью {{cmd|apt-get}}:<br />
# wget --content-disposition http://www.skype.com/go/getskype-linux-beta-suse<br />
. . .<br />
. . . 'skype-4.3.0.37-suse.i586.rpm' saved . . .<br />
# apt-get install skype-preinstall skype-4.3.0.37-suse.i586.rpm<br />
<br />
== Если в репозитории нет skype-preinstall ==<br />
См. [[Skype/archive|архивную часть]] этой странички, где описана установка различных версий Skype на предыдущие дистрибутивы/ветки ALT Linux от 4.0 и выше.<br />
<br />
== Сборка Skype для ALT Linux от Drool ==<br />
Перепакованный под ALT Linux пакет i586, а также src.rpm и spec-файл можно взять здесь: https://drive.google.com/open?id=0BzkD0wBvh2GaNmFSOUhiZ3p5Rlk--><br />
<br />
= Изолирование =<br />
См. [[Skype/isolation|соответствующую страничку]] по вопросам сетевой и локальной изоляции приложения.<br />
<br />
= Ссылки =<br />
* [[Вебкамера в Skype]]<br />
* [[FAQ#Как поставить Skype|FAQ]]<br />
* [http://www.skype.com/ru/legal/tou/ Условия использования Skype (EULA)]<br />
* [http://forum.altlinux.org/index.php/topic,30343.msg238425.html#msg238425 skype + apulse] (последний [http://packages.altlinux.org/apulse есть в сизифе])<br />
** вкратце: {{cmd|apulse skype}} (i586) либо {{cmd|i586-apulse skype}} (x86_64)<br />
* [https://en.opensuse.org/SDB:Skype SUSE-шная вики]<br />
* [https://drive.google.com/open?id=0BzkD0wBvh2GaNmFSOUhiZ3p5Rlk Перепакованный Skype x86_64 и x86 для ALT Linux от Drool]<br />
* [https://forum.altlinux.org/index.php?topic=532.msg319649#msg319649 Как "оживить" старую сборку Skype от Drool (см. предыдущий пункт) для x86-систем]<br />
<br />
[[Категория:CookBook]]<br />
{{Category navigation|title=ПО, не входящее в репозитории ALTLinux|category=CookBook|sortkey={{SUBPAGENAME}}}}<br />
{{Category navigation|title=ПО уровня предприятия|category=Enterprise Software|sortkey={{SUBPAGENAME}}}}</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Sisyphus_changes&diff=35591Sisyphus changes2016-03-01T00:11:43Z<p>EvgeniiTerechkov: /* 2016 */ - #31819</p>
<hr />
<div>[[Категория:Sisyphus]]<br />
[[Категория:Changes]]<br />
{{Шаблон:ОбновляемаяСтатья}}<br />
== Замечания об обновлении Sisyphus ==<br />
<br />
[[Изображение:zn1_26.gif]] Здесь собираются важные замечания, связанные с обновлением системы из [[Sisyphus]]; обновления по безопасности отмечаются на [http://packages.altlinux.org/ru/Sisyphus/security этой страничке].<br />
<br />
Пожалуйста, если вносите предупреждения заранее, то потом либо убирайте их, либо конкретизируйте проблему. Извещения «месяц назад надо было бояться» бесполезны.<br />
<br />
Старые по меркам Сизифа замечания накапливаются в [[changes/archive|архиве]].<br />
<br />
=== Рекомендации ===<br />
* [[changes/devel|по разработке]]<br />
* [[changes/intro|общие]]; [[changes/glibc|glibc-*]]; [[changes/rpm|rpm]]; [[changes/apt|apt]]; [[downgrade]]<br />
* ветки/дистрибутивы: [[Changes/Branch6|p6/t6]]; [[changes/Branch51|5.1]]; [[changes/Branch50|5.0]]; [[changes/Branch41|4.1]]; [[changes/Branch40|4.0]]; [[changes/Branch30|3.0]]; [[changes/Master24|2.4]]; [[changes/Compact23|2.3]]; [[changes/Master22|2.2]]<br />
<br />
== 2016 ==<br />
=== Февраль ===<br />
Если при попытке монтирования NFS получаете <tt>mount.nfs: Protocol not supported</tt> -- добавьте в опции монтирования <tt>v3</tt>, умолчание сменилось на NFSv4.<br />
<br />
Если молча перестали писаться логи посредством rsyslog-а (после его обновления) - возможно нужно доустановить rsyslog-classic. См. [https://bugzilla.altlinux.org/show_bug.cgi?id=31819 тикет].<br />
<br />
=== Январь ===<br />
<br />
'''ВАЖНО:''' в {{pkg|openssh-clients-7.1p1-alt1}} по умолчанию [https://lists.altlinux.org/pipermail/sisyphus/2016-January/364679.html выключена поддержка ключей типа ssh-dss] (DSA); рекомендуется отказаться от их использования в пользу<ref>см. тж. рекомендации в статье "[[Работа с ключами разработчика]]"</ref> ED25519, больших RSA (от 2048 бит) либо ECDSA, а при необходимости<ref>...бишь в случае получения сообщения <tt>ssh: Permission denied (publickey).</tt> при {{cmd|control sshd-password-auth disabled}} на сервере либо неожиданном запросе пользовательского пароля, если он на сервере разрешён (по умолчанию)</ref> добавить в соответствующие Host-записи {{path|~/.ssh/config}} разрешение на их использование:<br />
<br />
PubkeyAcceptedKeyTypes +ssh-dss,ssh-dss-cert-v01@openssh.com<br />
<br />
Могут возникнуть проблемы при работе с [http://www.openssh.com/legacy.html устаревшими реализациями SSH] в [https://bugzilla.altlinux.org/show_bug.cgi?id=31716 оборудовании вроде Cisco], при этом следует изучить лог подключения ssh -v и дописать для нужного хоста или группы хостов разрешение:<br />
<br />
KexAlgorithms +diffie-hellman-group1-sha1<br />
<br />
Также в этой сборке учтена уязвимость [http://lists.mindrot.org/pipermail/openssh-unix-dev/2016-January/034680.html UseRoaming].<br />
<br />
== 2015 ==<br />
<br />
=== Декабрь ===<br />
В {{pkg|ntp-4.2.8-alt3}} из-за коллизии при установке пропадает {{path|/var/lib/ntpd/etc/services}}, [https://lists.altlinux.org/pipermail/sisyphus/2015-December/364558.html рекомендуется] {{cmd|apt-get reinstall ntpd}} либо {{cmd|update_chrooted conf && service ntpd restart}}; [https://lists.altlinux.org/pipermail/sisyphus/2015-December/364559.html исправлено] в 4.2.8-alt4.<br />
<br />
=== Октябрь ===<br />
OTRS 5.0.1 [https://lists.altlinux.org/pipermail/sisyphus/2015-October/364347.html может потребовать] [http://otrs.ru/forum/viewtopic.php?f=2&t=3371 вмешательства] при обновлении с 4.0.13.<br />
<br />
В {{pkg|nvidia_glx_common-352.55-alt155}} [https://lists.altlinux.org/pipermail/sisyphus/2015-October/364339.html добавлен] скрипт {{pkg|nvidia-clean-driver}}, удаляющий ненужные пакеты {{pkg|nvidia_glx_*}}.<br />
<br />
=== Сентябрь ===<br />
При обновлении {{pkg|mariadb}} с 5.5.34 до 10.0.21 следует обратить внимание на то, что сборка переведена в чрут аналогично {{pkg|MySQL-server}}; может понадобиться [https://lists.altlinux.org/pipermail/sisyphus/2015-September/364187.html удаление] {{path|/etc/my.cnf.d/server.cnf}}, т.к. рабочим конфигом является {{path|/var/lib/mysql/my.cnf}} (см. тж. вывод {{cmd|/usr/bin/my_print_defaults mysqld}}).<br />
<br />
=== Февраль ===<br />
Пользователям {{pkg|xfce4-session}} и {{pkg|xfce4-power-manager}} без {{pkg|systemd}} стоит обратить внимание на [http://lists.altlinux.org/pipermail/sisyphus/2015-February/363465.html анонс майнтейнера] и, возможно, подстроить {{pkg|polkit}}.<br />
<br />
Для {{pkg|kernel-image-un-def}} пока [http://lists.altlinux.org/pipermail/sisyphus/2015-February/363452.html не собирается] модуль nvidia, пользователям соответствующих видеокарт рекомендуется обождать или на 3.18.7, или на std-def. ''346.47 для 3.19.3 собрано''<br />
<br />
Если после обновления {{pkg|nfs-utils}} до 1.3.2 при попытке монтирования NFS получается <tt>mount.nfs: an incorrect mount option was specified</tt> — обратите внимание на [http://lists.altlinux.org/pipermail/sisyphus/2015-February/363371.html рекомендации майнтейнера]. '''NB:''' в случае использования {{pkg|systemd}} в нагрузку можно получить ещё и [https://bugzilla.altlinux.org/show_bug.cgi?id=30708 #30708].<br />
<br />
=== Январь ===<br />
Если {{pkg|openvpn}} после обновления до 2.3.6 перестал поднимать туннели из-под {{pkg|etcnet}}, проверьте логи на предмет <tt>'/var/lib/openvpn//tmp/.private/root': No such file or directory</tt> и добавьте в {{path|/etc/net/ifaces/*/ovpnoptions}} строчку <tt>tmp-dir /tmp</tt> для задействования {{path|/var/lib/openvpn/tmp}} (более не требуется с {{pkg|etcnet}} >= 0.9.10-alt18).<br />
<br />
== 2014 ==<br />
<br />
=== Ноябрь ===<br />
{{pkg|ImageMagick}} ({{cmd|convert}} и т.д.) могут процессорозависимо падать вследствие {{altbug|30442}} (после исправления предыдущей аналогичной {{altbug|30431}}).<br />
<br />
=== Сентябрь ===<br />
Если {{pkg|apt-0.5.15lorg2-alt46.1}} сделал segmentation fault — [http://lists.altlinux.org/pipermail/sisyphus/2014-September/363023.html зачистите кэш]: {{cmd|rm -f /var/cache/apt/*.bin}}<br />
<br />
=== Август ===<br />
<br />
[http://lists.altlinux.org/pipermail/sisyphus/2014-August/362814.html Рекомендации] ПЕРЕД обновлением akonadi до >= 1.12.90.<br />
<br />
=== Июнь ===<br />
Стоит [http://lists.altlinux.org/pipermail/sisyphus/2014-June/thread.html#362440 воздержаться] от обновления до {{pkg|systemd-214-alt1}} (по состоянию на отправленный сегодня -alt6 всё так же возможны проблемы с NetworkManager и запуском графической сессии).<br />
<br />
Поскольку {{cmd|mksquashfs}} из {{pkg|squashfs-tools-4.3-alt1}} требует смонтированного {{path|/proc}}, без обновления {{pkg|mkimage}} до [http://lists.altlinux.org/pipermail/devel-distro/2014-June/001329.html 0.2.15+] можно узреть <tt>FATAL ERROR:Mksquashfs requires more physical memory than is available!</tt>; также возможны сбои при сборке крупных i586-образов на x86_64; см. {{altbug|30103}}; исправлено в 4.3-alt2.<br />
<br />
=== Апрель ===<br />
Если после обновления {{pkg|LibreOffice4}} начались зависания на старте, удалите пока {{pkg|LibreOffice4-kde}}, см. тж. {{altbug|30042}} (исправлено в 4.2-alt1.M70P.2).<br />
<br />
=== Март ===<br />
[http://lists.altlinux.org/pipermail/sisyphus/2014-March/362220.html Akonadi 1.12 иногда портит базу], перед обновлением до этой версии рекомендуется остановить его при помощи {{cmd|akonadictl stop}} (либо сделать резервную копию из akonaditray).<br />
<br />
Если вдруг при обновленьи [http://lists.altlinux.org/pipermail/sisyphus/2014-March/362167.html отвалился realtek], Вы проверьте, нет ли в корне {{path|/etc/modprobe.d/blacklist-r8168.conf}}. И если есть -- удалите пакет {{pkg|r8168-blacklist}} вместе с {{pkg|kernel-modules-r8168-*}}.<br />
<br />
[http://lists.altlinux.org/pipermail/sisyphus/2014-February/362067.html systemd-210] [http://lists.altlinux.org/pipermail/sisyphus/2014-March/subject.html#362070 сломал] i586-системы при помощи переполнения queue file в /run вследствие чрезмерного внимания к netlink после добавления networkd. [http://lists.altlinux.org/pipermail/sisyphus/2014-March/362083.html Вариант объезда], либо обновите {{pkg|make-initrd}} до 0.8.8-alt1+ и перегенерируйте initrd.<br />
<br />
== Ссылки ==<br />
<references/><br />
<br />
{{Category navigation|title=changes|category=Changes|sortkey={{SUBPAGENAME}}}}</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=%D0%92%D0%BE%D1%81%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%B8%D0%BC%D0%B0%D1%8F_%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B0&diff=31455Воспроизводимая сборка2015-02-15T05:37:53Z<p>EvgeniiTerechkov: typo</p>
<hr />
<div>= Введение =<br />
<br />
В рамках проекта ALT Linux и его сборочной инфраструктуры Алексеем Турбиным ({{man|at}}) и Дмитрием Левиным ({{man|ldv}}) были приложены немалые усилия для обеспечения возможности воспрозведения сборки пакетов при помощи [[girar]] (управление сборкой и репозиториями), [[hasher]] (сборка в «чистом» изолированном окружении) и [[gear]] (воссоздание архива исходных текстов по тегу из git-репозитория специального вида).<br />
<br />
Теоретические основы описаны в статье Алексея Турбина «Сборочная система git.alt» ([http://www.altlinux.ru/media/book-thesis-Protva-2008-5.pdf PDF], стр. 47).<br />
<br />
= Пример =<br />
<br />
В качестве наглядного пособия выбрал один из пакетов, которые недавно обновлял — {{pkg|lxqt-about}} (так как со времени предыдущей сборки изменился как состав репозитория, так и сборочные зависимости переехавшего с Qt 4 на Qt 5 проекта). Попробуем воспроизвести сборку версии [http://git.altlinux.org/tasks/archive/done/_129/132244/#s1000 0.8.0-alt1] несколько месяцев спустя.<br />
<br />
== Подготовка сборочного окружения ==<br />
<br />
=== Хост-система ===<br />
<br />
В качестве «чистой» хост-системы можно воспользоваться [[starterkits|стартеркитом]] altlinux-p7-builder; был взят текущий altlinux-p7-builder-20141212-x86_64.iso и запущен в экземпляре VirtualBox с 4 Гб оперативной памяти и ethernet-интерфейсом с доступом к интернету.<br />
<br />
=== Репозиторий ===<br />
<br />
Сборочная инфраструктура [[git.alt]] фиксирует предыдущий по отношению к собираемому репозиторий, на базе которого он будет пересобран перед commit (т.е. перед тем, как станет текущим состоянием [[Sisyphus]] или [[branches|бранча]]).<br />
<br />
Возьмём [[архив Сизифа]] с предшествующим состоянием<ref>следует понимать, что вследствие практических ограничений по дисковому пространству архив для каждого сборочного задания через некоторое время «прореживается», превращаясь в ежесуточный.</ref>:<br />
# http://www.altlinux.org/Sisyphus_archive<br />
# http://ftp.altlinux.org/pub/distributions/archive/sisyphus/index/src/<br />
# http://ftp.altlinux.org/pub/distributions/archive/sisyphus/index/src/l/<br />
# http://ftp.altlinux.org/pub/distributions/archive/sisyphus/index/src/l/lxqt-about/<br />
<br />
Здесь видим:<br />
{| class="wikitable" style="text-align:left; margin: 0 0 1em 1em;"<br />
|-<br />
! Date<br />
! Version<br />
! Task<br />
! Subtask<br />
|-<br />
| 2014-05-14 17:21<br />
| 0.7.0-alt1<br />
| 119542<br />
| 1000<br />
|-<br />
| [http://ftp.altlinux.org/pub/distributions/archive/sisyphus/task/archive/_129/132244/ 2014-10-14 23:59]<br />
| 0.8.0-alt1<br />
| [http://git.altlinux.org/tasks/archive/done/_129/132244/ 132244]<br />
| [http://git.altlinux.org/tasks/archive/done/_129/132244/#s1000 1000]<br />
|-<br />
| 2015-02-09 21:04<br />
| 0.9.0-alt1<br />
| 140101<br />
| 400<br />
|-<br />
|}<br />
<br />
Проходим по ссылке с даты и далее в {{path|files/list/}}:<br />
# http://ftp.altlinux.org/pub/distributions/archive/sisyphus/task/archive/_129/132244/<br />
# http://ftp.altlinux.org/pub/distributions/archive/sisyphus/task/archive/_129/132244/files/<br />
# http://ftp.altlinux.org/pub/distributions/archive/sisyphus/task/archive/_129/132244/files/list/<br />
<br />
Здесь интересует содержимое task.info:<br />
task 132244<br />
prev 132240<br />
<br />
Следовательно, задание 132244 было собрано на основе репозитория по заданию 132240; соответственно создаём sources.list<ref>префиксы с подчёркиванием — результат целочисленного деления номера задания на 1024</ref>:<br />
<br />
rpm [alt] http://ftp.altlinux.org/pub/distributions/archive/sisyphus/task/archive/_129/132240/daily x86_64 classic<br />
rpm [alt] http://ftp.altlinux.org/pub/distributions/archive/sisyphus/task/archive/_129/132240/daily noarch classic<br />
<br />
и apt.conf к нему:<br />
<br />
Dir::Etc::main "/dev/null";<br />
Dir::Etc::parts "/var/empty";<br />
Dir::Etc::SourceParts "/var/empty";<br />
Dir::Etc::sourcelist "/home/altlinux/sources.list";<br />
<br />
=== Исходники ===<br />
<br />
Для каждого собранного из git задания фиксируется тег и репозиторий, воспользуемся этим, перейдя к подзаданию 1000 задания 132244 и оттуда по ссылке «lxqt-about.git 0.8.0-alt1»:<br />
# http://ftp.altlinux.org/pub/distributions/archive/sisyphus/index/src/l/lxqt-about/<br />
# http://git.altlinux.org/tasks/archive/done/_129/132244/#s1000<br />
# http://git.altlinux.org/tasks/archive/done/_129/132244/gears/1000/git<br />
<br />
Делаем копию этого репозитория на tmpfs (для скорости сборки):<br />
cd $TMP<br />
git clone git://git.altlinux.org/tasks/archive/done/_129/132244/gears/1000/git<br />
<br />
Сверяем тег:<br />
$ cd git<br />
$ git describe<br />
0.8.0-alt1<br />
<br />
== Сборка ==<br />
<br />
Запускаем процесс извлечения исходников из git, упаковки и передачи на сборку {{cmd|hsh(1)}}:<br />
gear-hsh --apt-config=$HOME/apt.conf<br />
<br />
С учётом получения пакетов из сети выполнение займёт некоторое время:<br />
<br />
Wrote: /usr/src/RPM/SRPMS/lxqt-about-0.8.0-alt1.src.rpm<br />
Wrote: /usr/src/RPM/RPMS/x86_64/lxqt-about-0.8.0-alt1.x86_64.rpm<br />
Wrote: /usr/src/RPM/RPMS/x86_64/lxqt-about-debuginfo-0.8.0-alt1.x86_64.rpm<br />
12.17user 11.36system 0:24.12elapsed 97%CPU (0avgtext+0avgdata 59380maxresident)k<br />
0inputs+0outputs (0major+445974minor)pagefaults 0swaps<br />
<br />
== Сверка ==<br />
<br />
Получим и распакуем архивный пакет:<br />
mkdir $TMP/orig<br />
cd $TMP/orig<br />
wget -qO- http://git.altlinux.org/tasks/archive/done/_129/132244/build/1000/x86_64/rpms/lxqt-about-0.8.0-alt1.x86_64.rpm | rpm2cpio | cpio -id<br />
<br />
Из бинарников в нём только {{path|usr/bin/lxqt-about}}.<br />
<br />
В соседнем каталоге распакуем только что собранный:<br />
<br />
mkdir $TMP/rebuilt<br />
cd $TMP/rebuilt<br />
rpm2cpio ~/hasher/repo/x86_64/RPMS.hasher/lxqt-about-0.8.0-alt1.x86_64.rpm | cpio -id<br />
<br />
Смотрим:<br />
<br />
-rwxr-xr-x 1 altlinux altlinux 10448 Feb 14 20:14 orig/usr/bin/lxqt-about<br />
-rwxr-xr-x 1 altlinux altlinux 10448 Feb 14 20:15 rebuilt/usr/bin/lxqt-about<br />
<br />
Сверяем контрольные суммы (например, SHA1):<br />
<br />
3b5c596b4603ce8ba7403448dfe48a952ed65135 orig/usr/bin/lxqt-about<br />
3b5c596b4603ce8ba7403448dfe48a952ed65135 rebuilt/usr/bin/lxqt-about<br />
<br />
Приехали :)<br />
<br />
= Известные и потенциальные проблемы =<br />
<br />
== Временные/псевдослучайные метки ==<br />
<br />
При порождении кода или данных их фрагменты (например, отметки о времени сборки или идентификаторы параграфов) могут генерироваться невоспроизводимым образом; если это важно, следует доработать алгоритмы с целью достижения воспроизводимости.<br />
<br />
Современные gcc/g++ уже не ставят timestamps, по крайней мере по умолчанию.<br />
<br />
== Примечания ==<br />
<references /><br />
<br />
= Ссылки =<br />
<br />
* http://ftp.altlinux.org/pub/people/ldv/hasher/thesis-2004.html<br />
* https://wiki.debian.org/ReproducibleBuilds<br />
** https://wiki.debian.org/ReproducibleBuilds/ExperimentalToolchain<br />
* http://www.opennet.ru/opennews/art.shtml?num=41670<br />
* [[m-p|воспроизводимая сборка образов]]<br />
<br />
[[Категория:Devel]]<br />
[[Категория:Features]]<br />
[[Категория:Gear]]<br />
[[Категория:Hasher]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Hyper-V&diff=31011Hyper-V2014-10-11T17:23:32Z<p>EvgeniiTerechkov: Пакет hyperv-daemons</p>
<hr />
<div>Вопросы работы дистрибутивов ALT Linux под [http://ru.wikipedia.org/wiki/Hyper-V Microsoft Hyper-V].<br />
<br />
Для обеспечения работы под Hyper-V не нужно устанавливать [http://www.microsoft.com/ru-ru/download/details.aspx?id=34603 Linux Integration Services Version 3.4 for Hyper-V]. Этот диск содержит модули ядра, собранные под RHEL, и демон {{cmd|hv_kvp_daemon}}.<br />
<br />
== Модули ядра ==<br />
<br />
Необходимые модули доступны в штатных ядрах:<br />
<br />
{|class="standard"<br />
!Тип ядра<br />
!Минимальная версия<br />
|-<br />
|std-def||3.5.0<br />
|-<br />
|ovz-el||2.6.32-alt102<br />
|-<br />
|un-def||3.4.66<br />
|}<br />
<br />
Модули ядра:<br />
<br />
hid-hyperv<br />
hv_netvsc<br />
hv_storvsc <br />
hv_vmbus <br />
hv_utils<br />
hyperv_fb<br />
<br />
Вы можете подгрузить их вручную (командой {{cmd|modprobe}}) или добавив список в файл {{path|/etc/modules-load.d/modules.conf}}.<br />
<br />
== Демон hv_kvp_daemon ==<br />
Есть в [http://packages.altlinux.org/en/Sisyphus/srpms/hyperv-daemons Сизифе] и бранчах. Предоставляет функции KVP/VSS/fcopy.<br />
<br />
== Ссылки ==<br />
* http://blogs.technet.com/b/enterprise_admin/archive/2010/03/09/linux-and-hyper-v-the-easy-way-brown-and-serve.aspx<br />
<br />
[[Категория:Enterprise Software]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Hyper-V&diff=31010Hyper-V2014-10-11T12:33:54Z<p>EvgeniiTerechkov: #30393 - запрос на сборку KVP/VSS</p>
<hr />
<div>Вопросы работы дистрибутивов ALT Linux под [http://ru.wikipedia.org/wiki/Hyper-V Microsoft Hyper-V].<br />
<br />
Для обеспечения работы под Hyper-V не нужно устанавливать [http://www.microsoft.com/ru-ru/download/details.aspx?id=34603 Linux Integration Services Version 3.4 for Hyper-V]. Этот диск содержит модули ядра, собранные под RHEL, и демон {{cmd|hv_kvp_daemon}}.<br />
<br />
== Модули ядра ==<br />
<br />
Необходимые модули доступны в штатных ядрах:<br />
<br />
{|class="standard"<br />
!Тип ядра<br />
!Минимальная версия<br />
|-<br />
|std-def||3.5.0<br />
|-<br />
|ovz-el||2.6.32-alt102<br />
|-<br />
|un-def||3.4.66<br />
|}<br />
<br />
Модули ядра:<br />
<br />
hid-hyperv<br />
hv_netvsc<br />
hv_storvsc <br />
hv_vmbus <br />
hv_utils<br />
hyperv_fb<br />
<br />
Вы можете подгрузить их вручную (командой {{cmd|modprobe}}) или добавив список в файл {{path|/etc/modules-load.d/modules.conf}}.<br />
<br />
== Демон hv_kvp_daemon ==<br />
<br />
{{Attention|Несмотря на лицензию GPLv2+, этот пакет не собран под ALT Linux}}<br />
Запрос в багзилле: [https://bugzilla.altlinux.org/show_bug.cgi?id=30393 #30393]<br />
<br />
== Ссылки ==<br />
* http://blogs.technet.com/b/enterprise_admin/archive/2010/03/09/linux-and-hyper-v-the-easy-way-brown-and-serve.aspx<br />
<br />
[[Категория:Enterprise Software]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Make-initrd&diff=26921Make-initrd2013-11-08T07:03:50Z<p>EvgeniiTerechkov: ToDo: bcache #29561</p>
<hr />
<div>{{DISPLAYTITLE:make-initrd}}<br />
<br />
'''make-initrd''' — инструмент для сборки образов формата initramfs, используемых для начальной загрузки ОС Linux.<br />
<br />
Проект состоит из двух основных частей:<br />
* утилиты создания образа initramfs;<br />
* утилит, работающих внутри образа в момент загрузки.<br />
<br />
Утилита создания образа имеет модульную структуру. Основная её идея, что для создания образа необходимо (в простейшем случае) указать список особенностей (features) будущего образа. При этом порядок указания совершенно не важен. Пользователь не обязан знать как и в каком порядке будут применяться стадии и что они будут делать. Ему важно, чтобы, например, образ имел нужные модули ядра, имел bootspalsh и был сжат определённым образом.<br />
<br />
Основной иструмент в initrd это udev. Всё (или почти всё) делается через правила udev. Настройка сети, монтирование корневой директории. Всё.<br />
<br />
== Загрузка ==<br />
Init скрипт находится в корне образа (/init). Процесс загрузки разбит на несколько стадий. На самом деле, количество стадий не регламентировано.<br />
<br />
Процессом загрузки можно управлять через параметры ядра:<br />
<br />
* '''init'''=''<prog>'' -- параметр определяет программу init;<br />
* '''quiet'''=''<1|0>'' -- включает/отключает отладочные сообщения;<br />
* '''panic'''=''<1|0>'' -- разрешает/запрещает получение консоли при аварийных ситуациях;<br />
* '''stop'''=''<stage-list>'' -- параметр определяет список стадий, перед которыми необходимо предоставить консоль;<br />
* '''ignore'''=''<stage-list>'' -- список стадий, которые нужно пропустить;<br />
* '''resume'''=''{<device>|UUID=...|LABEL=...}'' -- параметр определяет устройство, с которого будет производиться восстановление после спящего режима;<br />
* '''root'''=''{<device>|UUID=...|LABEL=...|/dev/nfs}'' -- параметр определяет устройство, на котором находится корневая файловая система;<br />
* '''rootdelay'''=''<sec>'' -- определяет время ожидания корневой файловой системы. Если за это время корень не будет найден, то загрузка продолжена не будет. По умолчанию этот параметр составляет 180 секунд;<br />
* '''ip'''=''<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<proto>'' ,<br />
* '''ip'''=''<device>:<proto>'' -- параметр описывает конфигурацию сетевых интерфейсов.<br />
<br />
== Отладка ==<br />
=== общее ===<br />
Добавьте в {{path|/etc/initrd.mk}} строчку <tt>VERBOSE = 1</tt> перед запуском сборки initrd.<br />
<br />
=== udev ===<br />
При "залипании" на старте {{cmd|udevd}}) бывает полезно указать при загрузке опции <tt>rootdelay=3 stop=udev</tt> и запустить в полученном шелле {{cmd|udevd --debug --resolve-names&#61;never}} вручную; если проблема не вскрывается, может пригодиться сборка образа с добавленной в {{path|/etc/initrd.mk}} строчкой <tt>PUT_FILES += /usr/bin/strace</tt> и последующий запуск {{cmd|strace -ff -o /tmp/udev.strace -- udevd --debug --resolve-names&#61;never}}. Для сохранения полученных данных может пригодиться, например, встроенный в ноутбук кардридер при <tt>MODULES_PRELOAD = sd_mod sdhci sdhci_pci mmc_block</tt>.<br />
<br />
== Возможности ==<br />
{| class="wide"<br />
|-<br />
! Статус<br />
! Задача<br />
|-<br />
| align="center" | {{done}}<br />
|[http://git.altlinux.org/people/legion/packages/?p=make-initrd.git;a=tree;f=features/lvm lvm]<br />
|-<br />
| align="center" | {{done}}<br />
|[http://git.altlinux.org/people/legion/packages/?p=make-initrd.git;a=tree;f=features/raid raid (autodetect)]<br />
|-<br />
| align="center" | {{done}}<br />
|[http://git.altlinux.org/people/legion/packages/?p=make-initrd.git;a=tree;f=features/mdadm raid (mdadm)]<br />
|-<br />
| align="center" | {{done}}<br />
|[http://git.altlinux.org/people/legion/packages/?p=make-initrd.git;a=tree;f=features/luks luks]<br />
|-<br />
| align="center" | {{done}}<br />
|[http://git.altlinux.org/people/legion/packages/?p=make-initrd.git;a=tree;f=features/multipath multipath]<br />
|-<br />
| align="center" | {{done}}<br />
|[http://git.altlinux.org/people/legion/packages/?p=make-initrd.git;a=tree;f=features/usb-storage usb]<br />
|-<br />
| align="center" | {{done}}<br />
|Настройка нескольких сетевых интерфейсов<br />
|-<br />
| align="center" | {{done}}<br />
|[http://git.altlinux.org/people/legion/packages/?p=make-initrd.git;a=tree;f=features/nfsroot nfs]<br />
|-<br />
| align="center" | {{done}}<br />
|resume<br />
|-<br />
| align="center" | {{done}}<br />
|Поддержка рута на btrfs<br />
|-<br />
| align="center" | {{done}}<br />
|Поддержка systemd<br />
|-<br />
|align="center" | {{done}}<br />
|[http://git.altlinux.org/people/legion/packages/?p=make-initrd.git;a=tree;f=features/syslog klog/syslog]<br />
|-<br />
| align="center" | {{done}}<br />
|[http://git.altlinux.org/people/legion/packages/?p=make-initrd.git;a=tree;f=features/bootsplash bootsplash]<br />
|-<br />
| align="center" | {{done}}<br />
|[http://git.altlinux.org/people/legion/packages/?p=make-initrd.git;a=tree;f=features/plymouth plymouth]<br />
|-<br />
| align="center" | {{done}}<br />
|Автодетект модулей<br />
|-<br />
| align="center" | {{done}}<br />
|Использовать [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob;f=usr/gen_init_cpio.c gen_init_cpio] для создания cpio архива<br />
|-<br />
| align="center" | {{done}}<br />
|Использование glibc и системных библиотек<br />
|-<br />
|<br />
|(glibc) Использовать nfs-utils вместо nfsmount<br />
|-<br />
| align="center" | {{done}}<br />
|Создание нескольких образов за один вызыв make-initrd. Это полезно, если в процессе обновления необходимо создать как initrd под текущую конфигурацию, так и образ с большим количеством модулей (утилит?) для более общий конфигурации.<br />
|-<br />
| align="center" | {{done}}<br />
|Возможность монтировать не только корневую файловую систему.<br />
|-<br />
| align="center" | {{done}}<br />
|Возможность не указывать при загрузке параметры '''root''' / '''rootfstype''' / '''rootflags''', если загрузка идёт на той же системе, где был создан initrd.<br />
|-<br />
| align="center" | {{done}}<br />
|Поддержка работы с busybox. Для неё особенного ничего не нужно. Существует дополнительный [http://git.altlinux.org/people/legion/packages/make-initrd-busybox.git пакет] с собранным busybox расположенным в определённом месте, откуда его берёт make-initrd.<br />
|<br />
|}<br />
<br />
== ToDo ==<br />
* Добавить проверку разделов.<br />
* Доработать и добавить поддержку [http://git.altlinux.org/people/legion/packages/unet.git unet].<br />
* Добавить поддержку zram/zcache.<br />
* Добавить возможность монтирования корня с iscsi ([https://bugzilla.altlinux.org/show_bug.cgi?id=27354 ALT#27354]).<br />
* Добавить возможность монтирования корня с bcache ([https://bugzilla.altlinux.org/show_bug.cgi?id=29561 ALT#29561]).<br />
* Добавить фичу для генерации kdump.<br />
<br />
== Документация ==<br />
* [http://git.altlinux.org/people/legion/packages/?p=make-initrd.git;a=blob;f=make-initrd.texi make-initrd.texi]<br />
* [http://git.altlinux.org/people/legion/packages/?p=make-initrd.git;a=blob;f=README.ru README.ru]<br />
<br />
== Исходный код ==<br />
* [http://git.altlinux.org/people/legion/packages/?p=make-initrd.git make-initrd.git]<br />
* [http://git.altlinux.org/people/legion/packages/?p=kinit-utils.git kinit-utils.git]<br />
<br />
== Авторы ==<br />
* Alexey Gladkov<br />
* Kirill A. Shutemov<br />
<br />
[[Категория:make-initrd]]<br />
[[en:Make-initrd]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:Update/p7&diff=24033Обсуждение:Update/p72013-05-02T23:11:08Z<p>EvgeniiTerechkov: fixed</p>
<hr />
<div>Я бы предложил тем, кто обновляется с использованием беспроводного подключения сначала скачать все пакеты и лишь затем их устанавливать.<br><br />
Что-то типа такого:<br />
<pre><br />
apt-repo rm all<br />
apt-repo add branch p7<br />
apt-get update && apt-get -y --download-only dist-upgrade && update-kernel -f -n && apt-get -y --download-only install systemd-sysvinit<br />
apt-get -y dist-upgrade && update-kernel -f && apt-get install systemd-sysvinit<br />
apt-get clean && shutdown -r now<br />
</pre></div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Sisyphus_changes&diff=23658Sisyphus changes2013-03-26T04:08:01Z<p>EvgeniiTerechkov: udev-197</p>
<hr />
<div>[[Категория:Sisyphus]]<br />
[[Категория:Changes]]<br />
{{Шаблон:ОбновляемаяСтатья}}<br />
== Замечания об обновлении Sisyphus ==<br />
<br />
[[Изображение:zn1_26.gif]] Здесь собираются важные замечания, связанные с обновлением системы из [[Sisyphus]]; текущие критичные ошибки отмечены на {{altbug|9100}}. Пожалуйста, если вы вносите предупреждения заранее, то потом либо убирайте их, либо конкретизируйте проблему. Извещения «месяц назад надо было бояться» бесполезны.<br />
<br />
Старые по меркам Сизифа замечания накапливаются в [[changes/archive|архиве]].<br />
<br />
=== Рекомендации ===<br />
* [[changes/intro|общие]]; [[changes/glibc|glibc-*]]; [[changes/rpm|rpm]]; [[changes/apt|apt]]; [[downgrade]]<br />
* ветки/дистрибутивы: [[Changes/Branch6|p6/t6]]; [[changes/Branch51|5.1]]; [[changes/Branch50|5.0]]; [[changes/Branch41|4.1]]; [[changes/Branch40|4.0]]; [[changes/Branch30|3.0]]; [[changes/Master24|2.4]]; [[changes/Compact23|2.3]]; [[changes/Master22|2.2]]<br />
<br />
== 2013 ==<br />
=== Март ===<br />
Следует внимательно отнестись к обновлению {{pkg|grub2-efi}} до 2.00-alt12: изменяется имя подкаталога ESP, стоит перепроверить глазами успешность миграции и на всякий держать под рукой [[rescue]]-диск/флэшку.<br />
<br />
=== Февраль ===<br />
Если при обновлении системы с {{pkg|sysvinit}} попытался впереться {{pkg|systemd}} — воздержитесь от установки {{pkg|indexhtml-common}} 0.6.2-alt1 ({{altbug|28528}}) и {{pkg|samba}} 4.0.x < 4.0.3-alt2 ({{altbug|28585}}); если поздно спохватились, можно<br />
rpm -e agetty libnss-myhostname libsystemd-journal systemd<br />
<br />
=== Январь ===<br />
В udev-197 [http://lists.altlinux.org/pipermail/devel/2013-January/196331.html изменились] правила именования новых сетевых интерфейсов, не удивляйтесь. См. также {{altbug|28484}}.<br />
<br />
== 2012 ==<br />
=== Декабрь ===<br />
На сборке {{pkg|rpm-4.0.4-alt100.58}} под i586 текущим компилятором вылезла серьёзная бага, которая ранее оказывалась замаскирована; [http://lists.altlinux.org/pipermail/sisyphus/2012-December/359280.html исправление] имени at@ в течение суток попало в сизиф как {{pkg|rpm-4.0.4-alt100.59}}. Если кто успел поставить alt100.58, может понадобиться вытащить и установить обновление вручную. Типичным признаком при работе {{cmd|apt-get}} является:<br />
<pre>error: failed dependencies:<br />
libaudit.so.1 >= set:jhK9a5Z0 is needed by login-0.60-alt33</pre><br />
<br />
=== Ноябрь ===<br />
[http://lists.altlinux.org/pipermail/sisyphus/2012-November/358927.html Сообщается], что при использовании {{pkg|etcnet}} с {{pkg|ifplugd}} требуется указание <tt>CONFIG_WIRELESS=no</tt> вдобавок к <tt>USE_IFPLUGD=yes</tt>; см. тж. {{altbug|27797}}.<br />
<br />
=== Октябрь ===<br />
Использующим системы на сизифе '''с корнем (/boot) на md raid1''' и загрузчиком {{pkg|grub2-pc}} стоит обратить внимание на [http://lists.altlinux.org/pipermail/devel/2012-October/195751.html это сообщение]. NB: '''с grub2-pc-2.00-alt1 конкретно в этом случае гарантированно будет проблема''' (upstream bug), исправление в 2.00-alt2. См. тж. [http://lists.altlinux.org/pipermail/sisyphus/2012-November/358897.html процедуру восстановления] при необходимости.<br />
<br />
=== Сентябрь ===<br />
[http://lists.altlinux.org/pipermail/devel/2012-September/195184.html В Сизиф отправлен очередной свежий буст, на этот раз 1.51.0]; в devel@ -- подробные рекомендации по переводу пакетов на него. Возможно, также пригодится [http://lists.altlinux.org/pipermail/devel/2012-August/195075.html предыдущий тред]. PS: теперь все, кто используют boost/thread/mutex.hpp или Boost.Pool, должны компоноваться с -lboost_thread -lboost_system.<br />
<br />
=== Август ===<br />
"[http://lists.altlinux.org/pipermail/sisyphus/2012-August/358212.html Это обновление пакета pam, собранного с новой версией glibc.<br>Можно сказать, традиционные грабли в новой редакции.<br>Подробности см. в /var/log/auth/secure.<br>Рекомендуется service crond restart.]"<br />
<br />
Собирающим дистрибутивы из сизифа стоит знать, что у {{cmd|modprobe}} [http://lists.altlinux.org/pipermail/sisyphus/2012-August/358077.html теперь нет опции --list], ранее помеченной как deprecated; соответствующее изменение [http://git.altlinux.org/people/boyarsh/packages/?p=propagator.git;a=commitdiff;h=a109bc3706c117701db8e570a3bd56969a431180 внесено] в {{pkg|propagator-20101130-alt18}}.<br />
<br />
=== Май ===<br />
<br />
В связи с враждебной политикой апстрима {{pkg|systemd}} в отношении людей, не являющихся пользователями такового, при нежелании переходить с SysV init пользователям {{pkg|NetworkManager}} и/или {{pkg|udisks2}} во избежание излишних заявлений «Not authorized» рекомендуется установить ({{cmd|rpm -Uvh --oldpackage}}) из [[Sisyphus archive|архива сизифа]] и [[Hold|захолдить]] используемое из:<br />
* libpolkit-0.104-alt1 ([http://ftp.altlinux.org/pub/distributions/archive/Sisyphus/2012/05/12/files/i586/RPMS/libpolkit-0.104-alt1.i586.rpm i586], [http://ftp.altlinux.org/pub/distributions/archive/Sisyphus/2012/05/12/files/x86_64/RPMS/libpolkit-0.104-alt1.x86_64.rpm x86_64])<br />
* [http://lists.altlinux.org/pipermail/sisyphus/2012-May/357527.html polkit-0.104-alt1] ([http://ftp.altlinux.org/pub/distributions/archive/Sisyphus/2012/05/12/files/i586/RPMS/polkit-0.104-alt1.i586.rpm i586], [http://ftp.altlinux.org/pub/distributions/archive/Sisyphus/2012/05/12/files/x86_64/RPMS/polkit-0.104-alt1.x86_64.rpm x86_64])<br />
* libudisks2-1.94.0-alt1.1 ([http://ftp.altlinux.org/pub/distributions/archive/Sisyphus/2012/04/12/files/i586/RPMS/libudisks2-1.94.0-alt1.1.i586.rpm i586], [http://ftp.altlinux.org/pub/distributions/archive/Sisyphus/2012/04/12/files/x86_64/RPMS/libudisks2-1.94.0-alt1.1.x86_64.rpm x86_64])<br />
* [http://lists.altlinux.org/pipermail/sisyphus/2012-May/357588.html udisks2-1.94.0-alt1.1] ([http://ftp.altlinux.org/pub/distributions/archive/Sisyphus/2012/04/12/files/i586/RPMS/udisks2-1.94.0-alt1.1.i586.rpm i586], [http://ftp.altlinux.org/pub/distributions/archive/Sisyphus/2012/04/12/files/x86_64/RPMS/udisks2-1.94.0-alt1.1.x86_64.rpm x86_64])<br />
* [http://lists.altlinux.org/pipermail/sisyphus/2012-May/357527.html NetworkManager-0.9.4.0-alt2] ([http://ftp.altlinux.org/pub/distributions/archive/Sisyphus/2012/04/12/ тоже archive/Sisyphus/2012/04/12/])<br />
<br />
<br />
[http://lists.altlinux.org/pipermail/devel/2012-May/194445.html В Сизиф попал udev-176], которому обязательно нужен devtmpfs в ядре, без этого ни initrd, ни система не запустятся.<br />
В ядра ovz-el и std-def необходимые изменения внесены. Проверить свои ядра можно командой<br />
# grep -i config_devtmpfs /boot/config-*<br />
<br />
<br />
В Сизиф приехало libcairo-1.12.2, после обновления до него перестали запускаться XFCE/LXDE через удалённое подключение по NX (RX@Etersoft). Предположительно, проблема в Иксах 6.9, которые используются в nx. Пока помогает [[Downgrade|даунгрейд]] до 1.10.2. Дополнительные сведения приветствуются. Портирование NX на новые Иксы в процессе.<br />
<br />
=== Апрель ===<br />
При проблемах с {{pkg|automake_1.11}} см. тж. [http://lists.altlinux.org/pipermail/devel/2012-April/193963.html данное письмо].<br />
<br />
[http://lists.altlinux.org/pipermail/devel/2012-April/193864.html Выделены] в отдельную компоненту пакеты '''{{pkg|*-debuginfo}}'''<ref>в т.ч. ради уменьшения размеров индексов</ref>; для использования теперь [http://lists.altlinux.org/pipermail/devel/2012-April/193866.html следует подключить] их в явном виде — например, так:<pre>rpm [alt] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus x86_64 classic debuginfo</pre><br />
<br />
[http://lists.altlinux.org/pipermail/sisyphus/2012-April/357216.html Изменена] инфраструктура сборки [[biarch]]-оверлея для x86_64 (теперь создание i586-пакетов для предоставления 32-битного ABI происходит синхронно при сборке пакетов). [http://lists.altlinux.org/pipermail/devel/2012-April/193781.html Предупреждают], что '''arepo-репозитории x86_32 и x86_64-i586 несовместимы''' (одноименные пакеты отличаются по составу и зависимостям), '''автоматическое обновление со старого на новый не предусмотрено'''. Тем, кто имел <s>неосторожность</s>смелость установить пакеты из arepo-репозитория x86_32, перед подключением arepo-репозитория x86_64-i586 настоятельно рекомендуется удалить все пакеты, имя которых начинается на "i586-"; поскольку новый оверлей несёт больше пакетов, также рекомендуется добавить <tt>APT::Cache-Limit 67108864;</tt> в {{path|/etc/apt/apt.conf}}. Типичный sources-list для желающих использовать arepo теперь выглядит так:<pre><br />
rpm [alt] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus x86_64 classic<br />
rpm [alt] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus noarch classic<br />
rpm [alt] ftp://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus x86_64-i586 classic</pre><br />
<br />
=== Март ===<br />
Едет [http://lists.altlinux.org/pipermail/sisyphus/2012-March/357142.html xorg-1.12], на новых intel может решать вопросы<ref>проверено с [http://lists.altlinux.org/pipermail/sisyphus/2012-March/357129.html 3.3.0-std-ng]</ref>, с [https://bugzilla.altlinux.org/show_bug.cgi?id=27121 nouveau у cairo] они заведомо возникнут (может потребоваться [http://lists.altlinux.org/pipermail/sisyphus/2012-April/357242.html откат версии]); fglrx опять задерживается. YHBW.<br />
<br />
Майнтейнер java [http://lists.altlinux.org/pipermail/devel/2012-March/193454.html предупреждает] о готовящемся переезде с maven2 на maven3, что чревато временными крупными разломами по части собираемости java-пакетов.<br />
<br />
=== Январь ===<br />
<br />
Обновление vsftpd до 2.3.5 принесло невозможность пускать в домашние каталоги пользователей при [http://www.opennet.ru/openforum/vsluhforumID3/81603.html#1 заведомо небезопасной конфигурации], которая стала неподдерживаемой (ошибка 500 OOPS: vsftpd: refusing to run with writable root inside chroot()). См. [http://centos.alt.ru/?p=649#comments здесь] и [http://www.benscobie.com/fixing-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot/ здесь]. Это вызывает проблемы ftp-доступа на shared-хостинге. Исправление — запретить пользователю запись в домашний каталог и впредь обращать внимание на предупреждения в конфигурационных файлах и changelog.<br />
<br />
Браузер Chromium на новых ядрах (предположительно начиная с 3.1.5) стал зависать при открытии нескольких вкладок. В качестве временного решения можно закомментировать<br />
$ grep sec /etc/chromium-browser/default <br />
#CHROMIUM_FLAGS="--enable-seccomp-sandbox"<br />
Заведена бага [https://bugzilla.altlinux.org/show_bug.cgi?id=25407 25407].<br />
<br />
== Ссылки ==<br />
<references/><br />
<br />
{{Category navigation|title=changes|category=Changes|sortkey={{SUBPAGENAME}}}}</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=OpenVZ&diff=23584OpenVZ2013-03-13T11:55:12Z<p>EvgeniiTerechkov: fe:ff:ff:ff:ff:ff</p>
<hr />
<div>[[Категория:Admin]]<br />
[[Категория:OpenVZ]]<br />
{{викифицировать}}<br />
<br />
[http://openvz.org OpenVZ] — технология «лёгкой» виртуализации, позволяющая на одной аппаратной системе держать несколько различных корней Linux с одним ядром (поддерживающим ovz и содержащимся, как правило, на небольшом корне с ограниченным доступом по ssh и без других сервисов). В отличие от «тяжёлых» вариантов вроде Xen, Qemu или VMware, накладные расходы обычно составляют единицы процентов.<br />
<br />
__TOC__<br />
<br />
Сначала конечно необходимо прочитать [http://download.openvz.org/doc/OpenVZ-Users-Guide.pdf документацию], для понимания что это такое и для чего можно использовать и как. PDF содержит более сотни страниц, но десяток из них '''обязательно''' следует прочитать для экономии времени — в начале про терминологию, около с.88 про Action Scripts и bind mounts, и в конце — секцию Troubleshooting. Также доступен [http://www.opennet.ru/docs/RUS/virtuozzo/ перевод].<br />
<br />
В настоящий момент в репозитории есть практически все компоненты для полноценной работы. Но на данный момент openvz не поддерживает систему управления пакетами <tt>apt</tt>, поэтому мы не можем воспользоваться утилитой <tt>vzpkg</tt>.<br />
<br />
=== Установка ===<br />
<br />
==== ветки p6/t6, p5/5.1 ====<br />
<pre># apt-get install vzctl kernel-image-ovz-el</pre><br />
При этом установятся ядро с поддержкой openvz и необходимые утилиты; далее необходимо перегрузить систему и при загрузке выбрать ядро <tt>-ovz</tt>.<br />
<br />
==== ветка 4.0 ====<br />
Аналогично, только {{cmd|apt-get install vzctl kernel-image-ovz-rhel}}<br />
<br />
==== инсталер ====<br />
* [[Releases/40|ALT Linux 4.0 Server]]<br />
* http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/ovz/ (что-то близкое к p6/t6)<br />
<br />
=== Планирование ресурсов ===<br />
Если предполагается более-менее равномерное разделение HN между несколькими VE (или примерно можно означить ограничения как «1/10», «1/4»), то рекомендуется использовать <tt>vzsplit</tt> для создания заготовок конфигурации (не самих серверов! — получается меташаблон такой).<br />
<pre>vzsplit -n 2 -f ltsp<br />
vzsplit -n 10 -f misc10</pre><br />
<br />
Заготовки окажутся в <tt>/etc/vz/conf/ve-ИМЯ.conf-sample</tt> и пригодны для использования в <tt>vzctl create $VEID --config ИМЯ</tt>. Имейте в виду, что штатный vps.basic весьма ограничен, а light — скорее непригоден к использованию.<br />
<br />
Перепланировать можно и потом; если есть возможность — бывает полезно дать память с запасом и посмотреть через какое-то время реальное использование (накинуть резерв и уменьшить до полученной цифры). Также рекомендуется почитать про [http://wiki.openvz.org/UBC_systemwide_configuration UBC], а также man-страницы <tt>vzctl</tt>, <tt>vzmemcheck</tt>, <tt>vzcpucheck</tt>.<br />
<br />
Начиная с vzctl-3 и ядра ovz-el есть поддержка [http://wiki.openvz.org/VSwap VSwap] и соответственно новые шаблоны в формате ve-vswap-<mem_size>.conf-sample<br />
<br />
=== Создание шаблона ===<br />
<br />
==== mkimage-profiles ====<br />
См. [[Mkimage/Profiles/m-p/examples|примеры к m-p]]; проверено на Sisyphus и p6/t6, может заработать на p5/5.1. Готовые тарболы на p6 доступны [http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/ovz/ здесь].<br />
<br />
==== spt-0.6.0-alt7+ ====<br />
Внимание: эта информация относится скорее к 4.0 и более старым веткам.<br />
<br />
Необходимо создать шаблон, который будет использоваться для создания виртуального сервера. На [http://openvz.org/download/template/cache сайте] находится много шаблонов. Для ALT шаблоны см. в [http://download.openvz.org/contrib/template/precreated/ contrib],[http://cryo.net.ru/~thresh/altlinux-2.4.tar.gz altlinux-2.4.tar.gz], [http://paq.osdn.org.ua/~mike/tmp/openvz/altlinux-3.0.tar.gz altlinux-3.0.tar.gz] и [http://download.openvz.org/template/precreated/contrib/altlinux-4.0-i586.tar.gz altlinux-4.0-i586.tar.gz] . Шаблон представляет собой запакованый в архив корневой раздел. Поэтому для создания шаблона можно использовать <tt>spt</tt> или <tt>hasher</tt>. Я воспользовался [http://freesource.info/wiki//ALTLinux/Sisyphus/Separator spt], так как он содержит уже готовый профиль для ovz.<br />
Устанавливаем spt:<br />
<pre># apt-get install spt spt-profiles-ovz</pre><br />
На этом этапе необходимо получить работоспособный [[hasher]]. А именно, следует настроить его для работы с вашим пользователем согласно [http://www.altlinux.org/Hasher/%D0%9A%D1%80%D0%B0%D1%82%D0%BA%D0%BE%D0%B5_%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE инструкции].<br />
Для правильной работы <tt>vzctl</tt> необходимо, чтобы в <tt>/dev</tt> находились следующие устройства: <tt>/dev/ptmx</tt>, <tt>/dev/tty</tt> и был смонтирован <tt>/dev/pts/</tt>. Для их создания требуется наличие параметра <tt>allow_ttydev=YES</tt> в <tt>/etc/hasher-priv/*</tt> (см. hasher-priv.conf(8), [http://lists.altlinux.org/pipermail/devel/2006-July/034431.html http://lists.altlinux.org/pipermail/devel/2006-July/034431.html])<br />
<br />
Затем необходимо создать профиль, по которому spt будет строить шаблон. Возможно использовать готовый профиль. Готовые профили, предназначенные для создания openvz-шаблонов, находятся в пакете spt-profiles-ovz.<br />
<br />
Создаем рабочий каталог и копируем туда дефолтный ovz-профиль, если хотим самостоятельно сформировать список пакетов<br />
<pre>mkdir ~/ovz<br />
cp -r /etc/spt/profiles/ovz/.default ~/ovz/profile</pre><br />
<br />
или копируем готовый профиль:<br />
<pre>cp -r /etc/spt/profiles/ovz/proxy-server ~/ovz/profile</pre><br />
<br />
Можно поменять имя создаваемого образа в <tt>ovz/profile/ovz/config/</tt>. Заменим значение в OUT на altlinux-4.0.tar.gz .<br />
Список пакетов находится в — <tt>~/ovz/profile/ovz/packages</tt> — например, можно добавить openssh-server, vim-console, bash-completion. В ovz-контейнер нет необходимости ставить пакет interactivesystem.<br />
Минимальный список пакетов:<br />
<pre>basesystem<br />
apt<br />
etcnet<br />
glibc<br />
sysklogd</pre><br />
<br />
Или вместо попакетного списка можно указать один виртуальный пакет из:<br />
<pre>ve-asterisk - Asterisk server<br />
ve-base - Basic appliance<br />
ve-build-scripts - scripts used for VE building<br />
ve-caching-nameserver - Caching name server<br />
ve-ftp-server - FTP server<br />
ve-imap-server - POP3/IMAP4 server<br />
ve-kerberos-server - Kerberos server<br />
ve-list-server - Mailing list server<br />
ve-ntp-server - NTP server<br />
ve-openvpn-server - virtual package for openvpn server appliance<br />
ve-pptp-server - virtual package for pptp server appliance<br />
ve-print-server - Print server<br />
ve-proxy-server - Proxy server<br />
ve-smtp-server - SMTP server</pre><br />
<br />
Если предполагается использовать в контейнере alterator, добавьте '''ve-base''' в список пакетов.<br />
<br />
Теперь необходимо создать сам образ:<br />
<pre>$ spt -v --image-type=tgz ~/ovz</pre><br />
<br />
<div style="display: inline; color: red;">Внимание: создание образов на i586-машине для архитектуры x86_64 не работает.</div><br />
<br />
Если все прошло хорошо, то в <tt>~/ovz/</tt> будет находится файл altlinux-4.0.tar.gz. Его необходимо скопировать в <tt>/var/lib/vz/template/cache</tt>. Не забудьте поменять владельца и группу.<br />
<br />
=== Создание виртуального сервера ===<br />
'''Внимание:''' ещё один момент, где лучше заранее почитать документацию, чем потом сожалеть: в PDF рекомендуется выдавать VEID’ы сообразно IP (например, для xxx.xxx.7.123 — <tt>7123</tt> или для 10.0.1.254 — #1254##). Это более удобно с точки зрения администрирования как мнемонически, так и при необходимости переноса контейнеров между физическими хостами — если везде есть VEID 101, перенос будет сильно затруднён (на forum.openvz.org в соответствующей теме встретился вариант решения — свернуть одноразовый template cache из переносимого VE (например с помощью vzdump) и создать на новом месте из этого темплейта; штатный способ изменения VEID мне пока неизвестен). При создании из такого темплейта можно указать использовать старый конфиг и все работает хорошо.<br />
<br />
Теперь мы можем создать сервер из шаблона.<br />
<pre># vzctl create 101 --ostemplate altlinux-4.0 --config vps.basic<br />
Creating VPS private area<br />
VPS private area was created</pre><br />
<br />
Имя, которое Вы дали вашему шаблону (то что следует за — ostemplate), имеет важное значение. При создании VE это имя заносится в конфигурационный файл в переменную OSTEMPLATE. По этой переменной vzctl определяет какие скрипты использовать (разным OS нужны разные скрипты). Если вы используете ALT, то оно обязательно должно начинаться с altlinux (определяет нюансы настройки). Дальше разбор имени идет по такому алгоритму:<br />
<pre>> > а по-какому критерию тогда vzctl ищет нужные scripts?<br />
<br />
См. get_dist_conf_name(). В случае --ostemplate altlinux-i686-minimal<br />
будут проверены:<br />
altlinux-i686-minimal.conf<br />
altlinux-i686.conf<br />
altlinux.conf<br />
default<br />
Будет использован первый найденный.<br />
<br />
-- ldv</pre><br />
<br />
=== Именование виртуального сервера ===<br />
Начиная с версии 3.0.11, vzctl поддерживает именование виртуальных серверов. Это удобно, когда у вас их много, ибо помнить, что <tt>proxy</tt> это <tt>103</tt> — не очень удобно.<br />
<pre># vzctl set 103 --name proxy --save<br />
Saved parameters for VPS 103</pre><br />
Теперь в командах vzctl вместо 103 можно использовать proxy.<br />
<br />
=== Конфигурация виртуального сервера ===<br />
Конфигурация включает такие пункты:<br />
<br />
==== 1. Установка параметров запуска ====<br />
<pre># vzctl set 101 --onboot yes --save<br />
Saved parameters for VPS 101</pre><br />
<br />
==== 2. Установка параметров сети ====<br />
<br />
===== Общие настройки =====<br />
Установка имени сервера:<br />
<pre># vzctl set 101 --hostname test101.my.org --save<br />
Saved parameters for VPS 101</pre><br />
<br />
Установка nameserver:<br />
<pre># vzctl set 101 --nameserver 192.168.1.165 --save<br />
Saved parameters for VPS 101</pre><br />
<br />
Установка searchdomain:<br />
<pre>vzctl set 101 --searchdomain my.org --save</pre><br />
<br />
Учтите, что параметры ipadd и hostname можно задать сразу при создании VE.<br />
<br />
===== Сетевые соединения =====<br />
В [[OpenVZ|OpenVZ]] в VE возможно настраивать 3 типа соединений:<br />
# [http://wiki.openvz.org/Virtual_network_device venet]<br />
# [http://wiki.openvz.org/Virtual_Ethernet_device veth]<br />
# Просто «пробросить» внутрь физический ethernet интерфейс. См. параметры netdev_add name/netdev_del name для vzctl.<br />
<br />
Различия между venet и veth описаны [http://wiki.openvz.org/Differences_between_venet_and_veth тут]. Кратко можно сказать, что чаще всего вам потребуется venet. Но в некоторых случаях, для запуска таких приложений внутри VE, которые требуют для своей работы: MAC address, Broadcasts inside VE, Traffic sniffing, (например dhcpd, samba) или вам нужен IPv6 — необходимо создавать veth. Также veth можно использовать в некоторых [http://forum.openvz.org/index.php?t=msg&th=951&start=0& сложных случаях]. Во всех остальных случаях (например, сложный роутинг или несколько ethx устройств с разными маршрутами/коммутацией, или когда нужно именно физическое ethernet устройство внутри VE), необходимо использовать netdev.<br />
<br />
====== [http://wiki.openvz.org/Virtual_network_device venet] ======<br />
Настройка venet внутри VE полностью осуществляется средствами vzctl. При старте VE конфигурация venet устройств переписывается на основании конфига для VE.<br />
<pre># vzctl set 101 --ipadd 10.10.186.1 --save<br />
Saved parameters for VPS 101</pre><br />
<br />
При этом внутри VE создастся 2 интерфейса:<br />
<pre># vzctl exec 101 /sbin/ip a<br />
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue<br />
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00<br />
inet 127.0.0.1/8 scope host lo<br />
inet6 ::1/128 scope host<br />
valid_lft forever preferred_lft forever<br />
3: venet0: <BROADCAST,POINTOPOINT,NOARP,UP> mtu 1500 qdisc noqueue<br />
link/void<br />
inet 10.10.186.1/32 scope global venet0:1</pre><br />
<br />
Маршрут при этом выглядеть должен так:<br />
<pre># vzctl exec 101 /sbin/ip r<br />
192.0.2.0/24 dev venet0 scope host<br />
default via 192.0.2.1 dev venet0</pre><br />
Такой адрес выбран [http://forum.openvz.org/index.php?t=msg&goto=4929 сознательно]<br />
<br />
====== [http://wiki.openvz.org/Virtual_Ethernet_device veth для IPv4] ======<br />
'''UPDATE:''' в свежем <tt>vzctl</tt> уже автоматизировано:<br />
<pre>3.0.10: Wed Jun 7 2006 <igor@openvz.org><br />
* added virtual ethernet device support (--veth_add, --veth_del)</pre><br />
<br />
'''UPDATE2:''' про создание veth только средствами etcnet есть эта [[OpenVZ_veth_etcnet|страница]]<br />
<br />
Настройка veth не осуществляется средствами vzctl, так как подразумевается, что администратор VE должен настроить сеть средствами той ОС, которая внутри VE.<br />
<br />
1. Необходимо обеспечить загрузку модуля vzethdev:<br />
<pre># modprobe vzethdev</pre><br />
Разработчики рекомендуют дописать этот модуль в переменную NET_MODULES в скрипте /etc/init.d/vz. Но думаю, что лучше его просто прописать в /etc/modules (при обновлении vzctl скрипт обновляется -- явно напрашивается на /etc/sysconfig/vz-что-то, совсем непонятно, зачем сейчас это симлинк на ../vz/vz.conf).<br />
<br />
'''vvk:''' <tt>похоже что сейчас ничего этого не требуется, модули подгружаются автоматически</tt><br />
<br />
2. Добавим сам veth к VE:<br />
<pre># vzctl set 101 --netif_add eth0,,,fe:ff:ff:ff:ff:ff --save</pre><br />
, где eth0 — имя veth-интерфейса на стороне VE. Необходимости прописывать мак-адреса вручную теперь нет.<br />
<div style="display: inline; color: red;">Внимание! MAC-адреса должны быть разными и не пересекаться с реальными интерфейсами — можно чуть изменить взятый со старой карты в ящике.</div><br />
Добавлять IP командой vzctl set 101 --ipadd 10.10.186.1 --save не надо, так как тогда будет настраиваться venet.<br />
<br />
3. Настроим создание eth0 в VE:<br />
Для этого можно использовать средства настройки сети той OS что установлена в VE. Для ALT это etcnet. Для этого просто настроим стандартный интерфейс типа eth. Или можно настраивать из HN используя «типичный скрипт» 101.start (в /etc/vz/conf/), добавив туда:<br />
<pre>/sbin/ifconfig eth0 0<br />
/sbin/ip addr add 10.10.186.1 dev eth0<br />
/sbin/ip route add default dev eth0<br />
/sbin/ip route replace default via $HN_IP dev eth0</pre><br />
<small>Последняя строчка нужна в случае если HN и VE находятся в разных сетях, без нее пакеты VE не будут ходить за пределы этих сетей. Если кто предложит вариант лучше — исправления приветствуются</small><br />
<br />
Скрипт должен иметь права на выполнение.<br />
<br />
4. Запустим VE:<br />
<pre># vzctl start 101</pre><br />
<br />
После запуска в VE должны быть такие интерфейсы:<br />
<pre>$ /sbin/ip a<br />
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue<br />
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00<br />
inet 127.0.0.1/8 scope host lo<br />
inet6 ::1/128 scope host<br />
valid_lft forever preferred_lft forever<br />
3: venet0: <BROADCAST,POINTOPOINT,NOARP,UP> mtu 1500 qdisc noqueue<br />
link/void<br />
inet 127.0.0.1/32 scope host venet0<br />
5: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue<br />
link/ether 00:12:34:56:78:9b brd ff:ff:ff:ff:ff:ff<br />
inet 10.10.186.1/32 scope global eth0</pre><br />
<br />
и маршруты (почему-то добавляется):<br />
<pre>$ /sbin/ip r<br />
191.255.255.0/24 dev venet0 scope host<br />
default dev eth0 scope link<br />
default via 191.255.255.1 dev venet0</pre><br />
<br />
Теоретически администратор VE может сам менять IP, но я не проверял :-)<br />
<br />
5. Теперь, после запуска VE нужно настроить veth на стороне ##DEFINITION HN => Hardware Node##:<br />
Для этого в [[OpenVZ|OpenVZ]] после старта VE автоматически вызывается утилита vznetcfg, которая инициализирует veth на стороне HN путем вызова команды ip link set veth101.0 up. Т.о. вы имеете поднятый интерфейс, но без IP и без настроенного маршрута. Поэтому дальнейшую настройку приходится делать руками или прописать в rc.local. (В следующей версии vzctl вроде уже добавили поддержку)<br />
Настроим proxy_arp и forwarding для eth0 и veth на HN:<br />
Для eth0 можно использовать штатные средства Sisyphus:/admin/etcnet, установив переменную <tt>net.ipv4.ip_forward = 1</tt> в файле <tt>/etc/net/sysctl.conf</tt> и <tt>proxy_arp=1</tt> в <tt>/etc/net/ifaces/eth0/sysctl.conf</tt>.<br />
Для veth нужно выполнить:<br />
<pre># echo 1 > /proc/sys/net/ipv4/conf/veth101.0/forwarding<br />
# echo 1 > /proc/sys/net/ipv4/conf/veth101.0/proxy_arp</pre><br />
<br />
Добавляем IP<br />
<pre>ip addr add 10.10.186.1 dev veth101.0</pre><br />
<br />
<div style="display: inline; color: red;">Примечание :</div><br />
На самом деле, правильно:<br />
<pre>ip addr add 0 dev veth101.0</pre><br />
А не 10.10.186.1 иначе с ноды 101 пакеты в мир уйдут, а те что будут направлены ноде 101-й будут приняты HN и дальше не пройдут.<br />
<br />
И добавить маршрут:<br />
<pre># ip route add 10.10.186.1 dev veth101.0</pre><br />
<br />
Нюансы:<br />
* На данный момент venet настраивается при любых условиях, то есть даже когда используется veth. [http://forum.openvz.org/index.php?t=msg&th=967&start=0& Вот ответ разработчиков].<br />
* [https://bugzilla.altlinux.org/show_bug.cgi?id=9877 https://bugzilla.altlinux.org/show_bug.cgi?id=9877]<br />
* Похоже, что еще можно не мучаться с rc.local и патчами и все настроить через etcnet и hotplug. Более подробно я напишу по окончании разборок с этим хозяйством. <div style="display: inline; color: red;">напишите кто-нибудь, как автоматически в HN ловить появление veth и настраивать ему ip-параметры</div> [http://freesource.info/wiki//AfanasovDmitry /AfanasovDmitry]: сделал «маленькую хитрость»/<br />
* Если в VE iptables не работает с -t nat, скорее всего модуль iptable_nat был загружен на HN уже '''после''' старта контейнера.<br />
* Мне захотелось иметь 2 VETH интерфейса в VE, соединённых с двумя сетевыми карточками HE, одна — ведущая в WAN, другая — в LAN. Результаты можно почитать здесь: [http://vireso.blogspot.com/2008/02/2-veth-with-2-brindges-on-openvz-at.html http://vireso.blogspot.com/2008/02/2-veth-with-2-brindges-on-openvz-at.html] (извиняюсь, на английском).<br />
<br />
==== 3. Установка пользовательских параметров ====<br />
Установим пароль для рута:<br />
<pre># vzctl set 101 --userpasswd root:test<br />
Saved parameters for VPS 101</pre><br />
В этом примере мы установили пароль для root в VPS 101 в «test», и вы можете залогиниться<br />
<br />
==== 4. Установка квот ====<br />
Для включения дисковых квот необходимо выполнить следующие команды:<br />
<br />
<pre># vzctl set 101 --quotaugidlimit число --save<br />
# vzctl restart 101</pre><br />
<br />
где, '''''число''''' -- максимальное количество пользователей и групп, которые могут размещаться в контейнере (например, 1000).<br />
<div style="display: inline; color: red;">Внимание:</div> на сейчас поддержка реализована только для ext2/3 :-(<br />
<br />
=== Запуск виртуального сервера ===<br />
<pre># vzctl start 101<br />
Starting VPS ...<br />
VPS is mounted<br />
Adding IP address(es): 10.0.186.101<br />
Hostname for VPS 101 set: test.my.org<br />
VPS start in progress...</pre><br />
<br />
=== Выполнение команд на сервере ===<br />
<pre># vzctl exec 101 service sshd status<br />
sshd is stopped<br />
# vzctl exec 101 service sshd start<br />
Starting sshd: [ OK ]<br />
# vzctl exec 101 service sshd status<br />
sshd is running</pre><br />
<br />
=== Административный вход на сервер ===<br />
<pre># vzctl enter 101</pre><br />
Если огребаем такое:<br />
<pre># vzctl enter 101<br />
enter into VE 101 failed<br />
Unable to open pty: No such file or directory</pre><br />
— то [http://lists.altlinux.org/pipermail/sysadmins/2006-November/003072.html дело] в <tt>/dev/tty</tt>, <tt>/dev/ptmx</tt> и (не)смонтированном <tt>/dev/pts/</tt>. Надо добавить в <tt>/etc/fstab</tt> этого VE нечто вроде<br />
<pre>devpts /dev/pts devpts gid=5,mode=620 0 0</pre><br />
<br />
NB: если эта проблема вылезла вследствие выполнения команд start и enter цепочкой — вероятно, /dev/pts просто не успевает смонтироваться, попробуйте добавить задержку:<br />
<pre>VE=NNN; vzctl start $VE; sleep 1; vzctl enter $VE</pre><br />
<br />
=== Уничтожение сервера ===<br />
<pre># vzctl destroy 101</pre><br />
<br />
=== Альтлинукс как VPS в других дистрибутивах ===<br />
(Я пробовал на примере CentOS4)<br />
Если у вас есть шаблон altlinux.tar.gz, сделанный как описано выше, в главе «Создание Шаблона»,<br />
то его можно скопировать в директорию /vz/template/cache/.<br />
Если версия пакета vzctl в HN меньше чем 3.0.19, то для того чтобы работала сеть,<br />
надо также взять из альтовского пакета vzctl файлы<br />
/etc/vz/dists/altlinux.conf, /etc/vz/dists/scripts/etcnet-add_ip.sh и /etc/vz/dists/scripts/etcnet-del_ip.sh<br />
или обновить пакет vzctl до версии >= 3.0.19.<br />
Далее всё согласно этому документу, — создание, именование, настройка…<br />
<br />
(также можно взять у ldv@ [http://git.altlinux.org/people/ldv/packages/?p=vzctl.git;a=tree;hb=HEAD в git]: бранч master)<br />
<br />
=== NFS/FUSE и LTSP ===<br />
[[OpenVZ/NFS|NFS здеся]]; [[OpenVZ/FUSE|FUSE здеся]].<br />
<br />
=== mount --bind из HN в VE при старте последнего ===<br />
[http://forum.openvz.org/index.php?t=msg&th=159&#msg_720 здеся] (вообще про action scripts есть в документации, тут же — примеры удобные)<br />
<br />
=== openntpd ===<br />
В принципе, openntpd заводится с пол-пинка, но есть два замечания:<br />
* не хотел стартовать с <tt>listen on *</tt>, помогает указание ip-адреса vps-а или 0.0.0.0<br />
* необходимо разрешить VPS-у подкручивать системные часы:<br />
<pre># vzctl set 101 --capability sys_time:on --save</pre><br />
<br />
=== nut ===<br />
Заводится с пол-пинка, единственный момент — дать доступ к устройству:<br />
<pre>vzctl set 101 --devnodes ttyS0:rw --save</pre><br />
<br />
=== Миграция с [[VServer|VServer]] ===<br />
<pre>Date: Wed, 9 Aug 2006 02:07:06 +0400<br />
From: "Dmitry V. Levin" <ldv@><br />
To: ALT Linux sysadmin discuss <sysadmins@><br />
Subject: Re: [Sysadmins] vserver -> openvz migrate?<br />
<br />
> Скажите пожалуйста, если имеются работающие парочка VServers, один -<br />
> текущий Сизиф 32-битный чтобы пользоваться в 64-битном Сизифе смотреть<br />
> флэш и ещё что не нашёл 64-битное. Второй - Федора5. Мигрировать на<br />
> OpenVZ - что для этого надо будет делать? Или проще заново их<br />
> сгенерировать?<br />
<br />
Мигрировать контейнеры с linux-vserver на openvz достаточно легко.<br />
Я недавно делал такую миграцию для контейнеров, сделанных на основе M24.<br />
Могу отметить 4 момента:<br />
1. vserver'ная конфигурация контейнеров беднее, чем openvz'шная; имеет<br />
смысл сперва установить достаточно большие лимиты, потом на основе опыта<br />
эксплуатации уменьшить их до рабочего уровня.<br />
2. Имя файла template cache должно соответствовать имени системы, на основе<br />
которой сделан контейнер. Например, если контейнер сделан на основе<br />
чего-то ALT'ового с net-scripts, то имя должно начинаться с "altlinux-2.4-",<br />
если на основе ALT'ового с etcnet, то с "altlinux-", для FC - с<br />
"fedora-core-".<br />
3. С удивлением обнаружил, что внутри vserver'ных контейнеров выключена<br />
служба network. Не забудьте выполнить "chkconfig network on".<br />
4. В пакете vzctl-3.0.10-alt5 я добавил дополнительные правила<br />
корректировки в /etc/vz/dists/scripts/postcreate.sh, которые выключают<br />
запуск mingetty в inittab'е и лог в /dev/tty12 в syslog.conf.<br />
Если вы захотите обойтись без vzctl create, то надо будет каким-то образом<br />
выполнить этот /etc/vz/dists/scripts/postcreate.sh внутри контейнеров.</pre><br />
<pre>Date: Wed, 9 Aug 2006 13:10:39 +0400 (MSD) <br />
From: "Konstantin A. Lepikhov" <lakostis@> <br />
To: sysadmins@<br />
Subject: Re: [Sysadmins] [wiki] Re: vserver -> openvz migrate?<br />
<br />
>> Мигрировать контейнеры с linux-vserver на openvz достаточно легко.<br />
агасчас. Это все легко, если используется старый vserver/vserver-utils,<br />
не 2.0.x. В новых vserver введен внешний package management, поэтому<br />
сначала придется в vserver поставить apt/rpm, потом скопировать базы<br />
rpm/apt из /vservers/.pkg/ внутрь vserver (кажется, там были грабли, т.к.<br />
vrpm использует db3 вместо db4). И лишь только когда это все сделано,<br />
можно создавать cache для ovz.</pre><br />
<pre>Или наоборот, создать template cache, создать тз него ovz-контейнер,<br />
скопировать туда базу данных rpm и поставить туда apt/rpm.<br />
-- <br />
ldv</pre><br />
<br />
=== Template caches ===<br />
* http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/ovz/ (4.0, p6)<br />
* http://download.openvz.org/template/precreated/contrib/altlinux-4.0-i586.tar.gz<br />
<br />
==== устаревшие ====<br />
* http://fly.osdn.org.ua/~mike/tmp/openvz/altlinux-5.1-x86_64.tar.gz (apt, nameserver 8.8.8.8)<br />
* http://fly.osdn.org.ua/~mike/tmp/openvz/altlinux-5.1-i586.tar.gz (apt, nameserver 8.8.8.8)<br />
* http://fly.osdn.org.ua/~mike/tmp/openvz/altlinux-20060914-x86_64.tar.gz<br />
* http://fly.osdn.org.ua/~mike/tmp/openvz/altlinux-20060914.tar.gz<br />
* http://fly.osdn.org.ua/~mike/tmp/openvz/altlinux-3.0.tar.gz<br />
* http://ftp.linux.kiev.ua/pub/Linux/ALT/people/thresh/altlinux-2.4.tar.gz<br />
<br />
=== Замечания по использованию ===<br />
* vzquota [http://bugzilla.openvz.org/show_bug.cgi?id=125 не дружит с xfs] (поскольку xfs использует свою реализацию квот, отличных от linuxquota). Поэтому для /vz лучше использовать ext3.<br />
* user_beancounters по-умолчанию сильно закручены по ресурсам, поэтому после развертывания VPS, необходимо внимательно изучить содержимое /proc/user_beancounters. Значения, на которые надо смотреть — kmemsize, numproc, numfile, numtcpsock, numothersock. В случае нагруженной tcp подсистемы — tcpsndbuf и tcprcvbuf.<br />
* В ovz ядрах [http://bugzilla.openvz.org/show_bug.cgi?id=469 глючит nfs], поэтому внутрь VPS ресурсы лучше экспортировать через mount --bind. Несекурно, зато работает.<br />
* Чтобы собрать кэш темплейт для M24 надо пересобрать сизифный console-data.<br />
<tt>А вот и собранный template для M24 с исправлением: [http://cryo.net.ru/~thresh/altlinux-2.4.tar.gz http://cryo.net.ru/~thresh/altlinux-2.4.tar.gz] размер: 24660183, md5sum: e575da3dc4841367ba0d74e7063703bf </tt><br />
* Чтобы в контейнере с Compact 3.0.4 заработала сеть, нужен etcnet-0.8.3-alt2, с etcnet-0.7.16-alt1 [http://lists.altlinux.org/pipermail/sysadmins/2006-September/002371.html не работает] (<tt>ip route list</tt> пустой).<br />
<tt>А вот и собранный template для M30 с исправлением: [http://paq.osdn.org.ua/~mike/tmp/openvz/altlinux-3.0.tar.gz http://paq.osdn.org.ua/~mike/tmp/openvz/altlinux-3.0.tar.gz] размер: 20741540, md5sum: cd74ef7dc8f117626b1701061cb1973f </tt><br />
* Проверьте. есть ли все необходимые устройства. например, без /dev/full rpm --sign вылетает по SIGPIPE.<br />
<br />
=== Маленькие хитрости ===<br />
Для того, чтобы выполнить команду на всех серверах, можно воспользоваться такой конструкцией:<br />
<pre># for i in `vzlist -a -H -o veid`; do echo "VPS $i"; vzctl exec $i <command>; done</pre><br />
<br />
Чтобы показывался размер виртуального раздела в контейнере, надо выполнить следующие команды внутри контейнера:<br />
<pre>rm -f /etc/mtab && ln -s /proc/mounts /etc/mtab</pre><br />
(уже obsoleted с spt >= 0.3.1-alt4)<br />
<br />
Чтобы следить за «нарушителями границ» (предназначено для VE, не HN):<br />
<pre>watch grep -v ' 0$' /proc/user_beancounters</pre><br />
<br />
NB: в /proc/sys/net/ipv4/conf/venet0/proxy_arp после ребута или service network restart оказался ноль => nmap -P0 говорил, что порты закрыты, в то время как telnet :22, :111, :2049 — соединялся. Занеся 1, получаем нормальную картинку по nmap, но точно так же не монтируется (server is down).<br />
<br />
Правка дефолтного i18n (если не сделали себе в template cache сразу как требуется):<br />
<pre>vi /etc/rpm/macros<br />
apt-get -y reinstall `rpm -qf --queryformat '%{NAME}\n' /usr/share/locale/ru/LC_MESSAGES/* | sort -u`</pre><br />
<br />
<br />
'''Для автоподхвата интерфейсов''' достаточно поставить hotplug и в файл options дописать <tt>USE_HOTPLUG=yes</tt><br />
Например устройство до почтовика <tt>/etc/net/ifaces/smtp0</tt> организовано следующим обрзом:<br />
<tt>/etc/net/ifaces/smtp0/options</tt><br />
<pre>TYPE=eth<br />
REQUIRES=br0<br />
USE_HOTPLUG=yes</pre><br />
Он у меня автоматом в мост <tt>br0</tt> добавляется. Это файлы <tt>/etc/net/ifaces/smtp0/ifup-post</tt> и <tt>/etc/net/ifaces/smtp0/ifdown-post</tt> с кодмандами<br />
<pre>NAME="$1"; /sbin/brctl addif br0 "$NAME"</pre><br />
<pre>NAME="$1"; /sbin/brctl delif br0 "$NAME"</pre><br />
<div style="display: inline; color: red;">хе, интересно, а как в <tt>brctl</tt> метка AUTO тут обрабатывается?</div><br />
Если мост не нужен, тогда как обычно создаем файлы <tt>ipv4address</tt>, <tt>ipv4route</tt>, <tt>ipv4link</tt>.<br />
<br />
=== TODO ===<br />
* причесать логический порядок страницы (вынести подстранички?) // mike<br />
<br />
=== Ссылки ===<br />
* [http://openvz.org openvz.org], [http://wiki.openvz.org wiki.openvz.org]<br />
* [http://kir.vtx.ru/lj/openvz-intro-ru.pdf Введение в виртуализацию]<br />
* [http://download.openvz.org/doc/OpenVZ-Users-Guide.pdf Официальная документация]<br />
* [http://www.opennet.ru/docs/RUS/virtuozzo/ Русская документация по openvz на opennet]<br />
* [http://ru.wikipedia.org/wiki/OpenVZ OpenVZ в Wikipedia]<br />
* [http://k001.livejournal.com/361042.html OpenVZ vs VMWare]<br />
* [http://www.linux.com/print.pl?sid=07/01/11/2038252 A guide to running OpenVZ] (linux.com)<br />
* [http://rus-linux.net/kos.php?name=papers/virtual/virtual-linux.koi Виртуализация] (вообще и в частности)<br />
* [http://www.montanalinux.org/openvz-kir-interview.html Интервью] с Кириллом Колышкиным [en]<br />
* [http://wiki.openvz.org/Download/template/precreated Готовые шаблоны для различных дистрибутивов]<br />
* [http://openvz.org/pipermail/users/2010-January/003192.html Сравнение с VServer и LXC] (январь 2010)</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=OpenVZ_veth_etcnet&diff=23583OpenVZ veth etcnet2013-03-13T11:54:16Z<p>EvgeniiTerechkov: /* Конфигурация veth интерфейса с помощью etcnet */</p>
<hr />
<div>Здесь приведена информация, добытая в глубинах различных источников, которую я собрал для попытки описать максимально просто и последовательно, что же нужно сделать, чтобы получить следующее.<br />
<br />
== Работа с интерфейсом veth, etcnet и скриптами openvz ==<br />
<br />
=== Конфигурация veth интерфейса с помощью etcnet ===<br />
<br />
В различной документации для настройки veth-интерфейса для контейнера openvz предлагается использовать вручную вводимые команды или их наборы, помещаемые в стартовые скрипты([http://wiki.openvz.org/Veth#Configure_devices_in_CT0 например]). При наличии Etcnet дублировать (часть настраивать с помощью него, а часть нет) настройку не удобно, поэтому тут я привожу вариант только с помощью etcnet.<br />
<br />
1. включить форвардинг пакетов на ноде в файле /etc/net/sysctl.conf:<br />
<br />
net.ipv4.ip_forward = 1<br />
<br />
2. создать и стартовать контейнер, но не добавлять адрес с помощью vzctl set --ipadd (он добавит интерфейс типа venet)<br />
<br />
vzctl start 101<br />
<br />
3. добавить veth-интерфейс в контейнер (формат команды подходит для vzctl 3.0.22, варианты см. по ссылке «например» выше).<br />
<br />
vzctl set 101 --netif_add eth0,,,fe:ff:ff:ff:ff:ff --save<br />
<br />
при этом vzctl запишет в конфиг vz строку такого вида:<br />
<br />
NETIF="ifname=eth0,mac=00:18:51:62:4E:08,host_ifname=veth101.0,host_mac=00:18:51:21:5F:E4"<br />
<br />
(если же vzctl выдает ругань вида "According to vps.basic CT<N> has no veth interface configured." - значит, вы уже настраивали контейнеры и надо на данный момент закомментировать EXTERNAL_SCRIPT в /etc/net/vznet.conf)<br />
<br />
первый mac-адрес будет использоваться для интерфейса в контейнере (обычный eth0 или как было задано в команде добавления)), а второй — для интерфейса на ноде (у него будет имя veth<номер ve>.0). mac-адреса можно указать и вручну, а если нет — то они вычислятся автоматически. Конечно, они не должны быть одинаковыми с соседними онтерфейсами (и вообще ни с чем в сети).<br />
<br />
4. создать на ноде папку по имени интерфейса в etc/net/ifaces, а в нее положить такие файлы:<br />
<br />
* <tt>ipv4address</tt>:<br />
0 dev veth101.0<br />
<br />
* <tt>ipv4route</tt>:<br />
10.1.10.10 dev veth101.0<br />
<br />
* <tt>options</tt>:<br />
TYPE=eth<br />
BOOTPROTO=static<br />
ONBOOT=yes<br />
USE_HOTPLUG=yes<br />
<br />
* <tt>sysctl.conf</tt>:<br />
proxy_arp=1<br />
ipv4_forwarding=1<br />
<br />
файл ipv4address запустит интерфейс, но не назначит ему адреса (адрес присуствует у части, которая внутри VE, а снаружи — нет).<br />
файл ipv4route пропишет маршрут для адреса VE на конкретный интерфейс на ноде.<br />
файл options содержит важную опцию USE_HOTPLUG, она позволяет запускать интерфейс только тогда, когда VE реально стартует, без нее при старте сети будет ругань на невозможность сконфигурировать отсутствующий интерфейс.<br />
файл sysctl.conf задает параметры sysctl для конкретного интерфейса, используя [[Etcnet#Как использовать автодополнение в sysctl.conf|автодополнение]]<br />
<br />
5. такой же файл sysctl.conf надо положить в каталог физического eth-интерфейса сервера (eth0, если вы не [[Etcnet#В каких случаях eth0 вреден|переименовали]] его).<br />
<br />
* <tt>sysctl.conf</tt>:<br />
proxy_arp=1<br />
ipv4_forwarding=1<br />
<br />
6. Теперь надо зайти в VE (например, vzctl enter 101) и настроить интерфейс там. Положить следующие файлы в каталог etc/net/ifaces/eth0/ (если при создании вы назвали его eth0):<br />
<br />
* <tt>ipv4address</tt>:<br />
10.1.10.10/16<br />
<br />
* <tt>ipv4route</tt>:<br />
default via 10.1.10.150 dev eth0<br />
<br />
* <tt>options</tt>:<br />
TYPE=eth<br />
BOOTPROTO=static<br />
ONBOOT=yes<br />
<br />
Здесь 10.1.10.10 — это адрес, который присваивается интерфейсу внутри VE, а 10.1.10.150 — адрес, присвоенный физическому интерфейсу на ноде.<br />
Проблема: если в качестве маршрута указать default dev eth0, то в локальной сети (10.1.*) этот интерфейс доступен будет, но при попытке выйти за ее пределы (например, в интернет) - работать не будет, так как будет считать что абсолютно все адреса должны быть доступны через arp-запрос в локальной сети). Что в случае адресов из интернета, конечно, неверно.<br />
<br />
=== Проверка результатов ===<br />
<br />
Теперь можно проверить, что получилось:<br />
<br />
Выключить VE<br />
<br />
vzctl stop 101<br />
<br />
Тут желательно уже раскомментировать EXTERNAL_SCRIPT в /etc/net/vznet.conf, и проверить наличие в /etc/vz/conf/101<br />
<br />
CONFIG_CUSTOMIZED="yes"<br />
BRIDGEDEV="br0"<br />
<br />
если вы включаете интерфейсы в бридж.<br />
<br />
Включить VE<br />
<br />
vzctl start 101<br />
<br />
и проверить наличие интерфейса veth и маршрута:<br />
<br />
ip a<br />
ifconfig<br />
route -n<br />
<br />
например, оно может выглядеть так:<br />
2: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue<br />
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00<br />
inet 127.0.0.1/8 scope host lo<br />
14: extbi: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000<br />
link/ether 00:19:99:01:4b:82 brd ff:ff:ff:ff:ff:ff<br />
inet 10.1.10.150/16 brd 10.1.255.255 scope global extbi<br />
21: veth1040.0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue<br />
link/ether 00:18:51:21:5f:e4 brd ff:ff:ff:ff:ff:ff<br />
<br />
extbi Link encap:Ethernet HWaddr 00:19:99:01:4B:82<br />
inet addr:10.1.10.150 Bcast:10.1.255.255 Mask:255.255.0.0<br />
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1<br />
lo Link encap:Local Loopback<br />
inet addr:127.0.0.1 Mask:255.0.0.0<br />
veth1040.0 Link encap:Ethernet HWaddr 00:18:51:21:5F:E4<br />
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1<br />
<br />
10.1.10.40 0.0.0.0 255.255.255.255 UH 0 0 0 veth1040.0<br />
10.1.0.0 0.0.0.0 255.255.0.0 U 0 0 0 extbi<br />
<br />
<br />
и при этом обязательно должны быть включены forwarding и proxy_arp на соотв. интерфейсах (п .3 и 4)<br />
<br />
[node]# cat /proc/sys/net/ipv4/conf/extbi/proxy_arp<br />
1<br />
[node]# cat /proc/sys/net/ipv4/conf/veth1040.0/proxy_arp<br />
1<br />
<br />
аналогично с forwarding.<br />
<br />
с другого компьютера сети можно запустить ping<br />
<br />
$ ping 10.1.10.10<br />
PING 10.1.10.10 (10.1.10.10) 56(84) bytes of data.<br />
64 bytes from 10.1.10.10: icmp_seq=1 ttl=64 time=2.82 ms<br />
<br />
при этом в arp-таблице ноды появится запись<br />
<br />
#arp<br />
samba.local ether 00:18:51:62:4E:08 C veth101.0<br />
<br />
Если же у вас не так — смотрите, где что перепутано или забыто ;)<br />
<br />
=== Как добиться прохождения broadcast в VE с интерфейсом veth ===<br />
<br />
Если вы сделали все вышеописанное, то у вас будут работать сервисы в контейнере, которые получают пакеты, адресованные непосредственно им.<br />
(Такие как FTP, DNS, LDAP и другие).<br />
Но они работали бы и с интерфейсом venet, а veth обычно настраивают тогда, когда хотят поместить в контейнер что-то, что получало бы пакеты типа broadcast, адресованные всей подсети. Но на данном этапе работать это не будет ;)<br />
Причина в том, что в такой конфигурации между контейнером и остальной сетью есть роутер (это HN). Это можно легко проверить:<br />
<br />
# traceroute -n 10.1.10.40<br />
traceroute to 10.1.10.40 (10.1.10.40), 30 hops max, 40 byte packets<br />
1 10.1.10.150 (10.1.10.150) 0.149 ms 0.123 ms 0.119 ms<br />
2 10.1.10.40 (10.1.10.40) 0.139 ms 0.116 ms 0.118 ms<br />
<br />
Т.е. пакеты из наружной сети проходя сначала через HN, но broadcast-пакеты роутеры не передают. Поэтому если поместить в такой контейнер сервисы типа DHCP или Samba, то работать они будут некорректно: например, Samba сможет работать как WINS-сервер, регистрируя имена тех, кто прямо укажет у себя адрес WINS-сервера, но она не сможет ответить за широковещательный запрос о наличии в сети master browser. Поэтому остальные машины выберут master browser кого-то другого, а не этот Samba-сервер ;)<br />
<br />
А вот чтобы все же такие рассылки проходили и в этот контейнер, нужно сделать следующее.<br />
<br />
1. Создать интерфейс типа bridge, как описано в пункте [[Etcnet#Как настроить Ethernet-мост|3.6]] статьи Etcnet. Поместить в него только один интерфейс, который является физическим ethernet на HN. С ним позже будет связываться интерфейс типа veth, который расположен на HN.<br />
<br />
2. Использовать статью (и в частности раздел) OpenVZ [http://wiki.openvz.org/Veth#Making_a_veth-device_persistent wiki] , где описано какие внести изменения в файлы конфигурации контейнера на HN.<br />
<br />
3. Использовать приведенный там скрипт vznetcfg.custom, поместив его куда-нибудь, например в /usr/local/sbin/. Но исправить путь brctl=/usr/sbin/brctl<br />
на /sbin.<br />
<br />
для простоты скопирую его и тут:<br />
#!/bin/bash<br />
# /usr/sbin/vznetaddbr<br />
# a script to add virtual network interfaces (veth's) in a CT to a bridge on CT0<br />
CONFIGFILE=/etc/vz/conf/$VEID.conf<br />
. $CONFIGFILE<br />
VZHOSTIF=`echo $NETIF |sed 's/^.*host_ifname=\(.*\),.*$/\1/g'`<br />
if [ ! -n "$VZHOSTIF" ]; then<br />
echo "According to $CONFIGFILE CT$VEID has no veth interface configured."<br />
exit 1<br />
fi<br />
if [ ! -n "$VZHOSTBR" ]; then<br />
echo "According to $CONFIGFILE CT$VEID has no bridge interface configured."<br />
exit 1<br />
fi<br />
echo "Adding interface $VZHOSTIF to bridge $VZHOSTBR on CT0 for CT$VEID"<br />
/usr/sbin/brctl addif $VZHOSTBR $VZHOSTIF<br />
exit 0<br />
<br />
Этот скрипт читает конфиг VE в /etc/vz/conf, где добавлены соотв. параметры. VZHOSTBR - это имя бриджа из п.1, а VZHOSTIF определится скриптом из строки конфига NETIF. Скрипт проверяет наличие нужных параметров и просто добавляет еще один интерфейс (а именно интерфейс вида veth<номер VE> в уже существующий к этому моменту бридж.<br />
<br />
4. veth интерфейсы, попадающие в бридж, не требуют специальной записи в таблице роутинга на ноде. поэтому в файле ipv4route в соотв. папке /etc/net/ifaces/veth* можно закомментировать установку маршрута. (Или это обязательно требуется? проверьте). <br />
<br />
<br />
Поменяйте таким образом конфигурацию всех VE и интерфейсами veth, и они окажутся в одном бридже, что позволит им беспрепятственно, без роутинга, общаться между собой.<br />
<br />
Результат:<br />
# brctl show<br />
bridge name bridge id STP enabled interfaces<br />
br0 8000.001851215fe4 yes extbi<br />
veth1010.0<br />
veth1040.0<br />
<br />
При старте сервера сначала стартует etcnet, который создает бридж с одним ethernet-интерфейсом хоста (в этом примере - extbi) и пропускает veth-интерфейсы еще не стартовавших контейнеров (они USE_HOTPLUG):<br />
<br />
May 21 14:40:46 fujitsu network: Starting veth1010.0:<br />
May 21 14:40:46 fujitsu network: skipping hotplug iface 'veth1010.0'<br />
May 21 14:40:46 fujitsu network: SKIPPED<br />
<br />
А позже при старте VE и поднимается интерфейс и добавляет себя в бридж:<br />
<br />
May 21 14:40:49 fujitsu vzctl: Configure veth devices: veth1010.0<br />
May 21 14:40:49 fujitsu vzctl: ifname=eth0 <br />
May 21 14:40:49 fujitsu vzctl: mac=00:18:51:AE:1F:20 <br />
May 21 14:40:49 fujitsu vzctl: host_ifname=veth1010.0 <br />
May 21 14:40:49 fujitsu vzctl: host_mac=00:18:51:75:1B:64 <br />
May 21 14:40:49 fujitsu vzctl: Adding interface veth1010.0 to the bridge br0.<br />
<br />
<br />
=== Проблемы ===<br />
<br />
1. Если пытаться полностью полагаться на etcnet, то можно попробовать использовать скрипт ifup-post в каталоге интерфейса для добавления его в бридж. <br />
Тогда VZHOSTBR и VZHOSTIF прописать явно, они будут для каждого свои. У меня не получилось, но я не все варианты попробовал ;)<br />
<br />
2. Если на HN находятся одновременно интерфейсы типа veth и типа venet, то у меня терялась между ними связь после экспериментов с добавлением veth в бридж. Те, кто конфигурировал такое, обычно опасались смешивать интерфейсы разного типа. Но может быть и такое, что это просто временные проблемы ядра, а у вас заработает. Пробуйте.<br />
<br />
<br />
3 Если у вас часть интерфейсов veth, а часть venet и вы хотите переделать venet в veth, то, удалив адрес с venet и пытаясь сконфигурировать veth в том контейнере получится такое:<br />
<br />
# vzctl set 1030 --ipdel 10.1.10.30 --save<br />
Deleting IP address(es): 10.1.10.30<br />
Saved parameters for VE 1030<br />
# vzctl set 1030 --netif_add eth0,,,fe:ff:ff:ff:ff:ff --save<br />
Configure veth devices: veth1030.0<br />
According to vps.basic CT1030 has no veth interface configured.<br />
/usr/sbin/vznetcfg exited with error<br />
Saved parameters for VE 1030<br />
<br />
Проблема курицы и яйца - сконфигурирован внешний скрипт, который при выполнении берет параметры из строки в конфиге NETIF (см. выше). А ее там еще нет, потому что она как раз и пытается добавиться. В результате ничего не изменится (NETIF не будет сконфигурирован). <br />
Выход, например - временно отключить в /etc/vz/vznet.conf параметр EXTERNAL_SCRIPT (или доработать скрипт?)<br />
<br />
<br />
== Как в нормальной системе использовать мост (bridge) в VE ==<br />
<br />
Предыдущие разделы очень сложны по набору информации, и понять, что же нужно выбрать, может быть затруднительно.<br />
Скажу коротко, что если вам нужны контейнеры с внешними адресами, то надо использовать bridge — это самый простой<br />
вариант, не имеющий большинства проблем.<br />
<br />
Возможно, что в серверном дистрибутиве уже используется bridge для сети (создано устройство breth0).<br />
Если этого нет, то создаём по пункту [[Etcnet#Как настроить Ethernet-мост|3.6]] статьи Etcnet. Если коротко, то в физическом интерфейсе оставляем только файл options с содержимым примерно<br />
TYPE=eth<br />
MODULE=r8169<br />
а все остальные настройки переносим в /etc/net/ifaces/breth0, где в options пишем<br />
TYPE=bri<br />
HOST='eth0'<br />
И создаём brctl с содержимым<br />
stp AUTO on<br />
(не понял, насколько это нужно).<br />
Остальные настройки (ipv4address, ipv4route, resolv.conf) должны быть скопированы, и обычно не требуют изменения.<br />
<br />
Также обязательно должен быть включен ip forwarding (net.ipv4.ip_forward = 1 в /etc/net/sysctl.conf).<br />
<br />
Далее в /etc/vz/vznet.conf вносим строку<br />
EXTERNAL_SCRIPT="/usr/sbin/vznetaddbr"<br />
<br />
Предварительно удалив из конфига контейнера (/etc/vz/conf/501.conf) строку NETIF, запускаем<br />
vzctl set 501 --netif_add breth0,,,fe:ff:ff:ff:ff:ff,breth0 --save<br />
для каждого контейнера, который мы хотим подключить к сетевому мосту.<br />
<br />
Дальше только не забываем в каждом контейнере поменять сетевые настройки, поскольку сменится название интерфейса внутри (с eth0 на breth0), соответственно нужно переименовать каталог /etc/net/ifaces/eth0.<br />
<br />
Больше ничего делать не нужно.<br />
<br />
Проверяем, что всё получилось:<br />
# brctl show<br />
bridge name bridge id STP enabled interfaces<br />
breth0 8000.00185167a3cb yes eth0<br />
veth501.0<br />
<br />
Запускаем контейнер:<br />
# vzctl start 501<br />
...<br />
File resolv.conf was modified<br />
Configure veth devices: veth501.0 <br />
Adding interface veth501.0 to bridge breth0 on CT0 for CT501<br />
<br />
<br />
==Ресурсы для справок ==<br />
[http://wiki.openvz.org/Using_private_IPs_for_Hardware_Nodes#Making_the_configuration_persistent openvz wiki net configuration]<br />
<br />
<br />
[[Категория:Admin]]<br />
[[Категория:OpenVZ]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=OpenVZ_veth_etcnet&diff=23582OpenVZ veth etcnet2013-03-13T11:46:15Z<p>EvgeniiTerechkov: fe:ff:ff:ff:ff:ff</p>
<hr />
<div>Здесь приведена информация, добытая в глубинах различных источников, которую я собрал для попытки описать максимально просто и последовательно, что же нужно сделать, чтобы получить следующее.<br />
<br />
== Работа с интерфейсом veth, etcnet и скриптами openvz ==<br />
<br />
=== Конфигурация veth интерфейса с помощью etcnet ===<br />
<br />
В различной документации для настройки veth-интерфейса для контейнера openvz предлагается использовать вручную вводимые команды или их наборы, помещаемые в стартовые скрипты([http://wiki.openvz.org/Veth#Configure_devices_in_CT0 например]). При наличии Etcnet дублировать (часть настраивать с помощью него, а часть нет) настройку не удобно, поэтому тут я привожу вариант только с помощью etcnet.<br />
<br />
1. включить форвардинг пакетов на ноде в файле /etc/net/sysctl.conf:<br />
<br />
net.ipv4.ip_forward = 1<br />
<br />
2. создать и стартовать контейнер, но не добавлять адрес с помощью vzctl set --ipadd (он добавит интерфейс типа venet)<br />
<br />
vzctl start 101<br />
<br />
3. добавить veth-интерфейс в контейнер (формат команды подходит для vzctl 3.0.22, варианты см. по ссылке «например» выше).<br />
<br />
vzctl set 101 --netif_add eth0,,fe:ff:ff:ff:ff:ff --save<br />
<br />
при этом vzctl запишет в конфиг vz строку такого вида:<br />
<br />
NETIF="ifname=eth0,mac=00:18:51:62:4E:08,host_ifname=veth101.0,host_mac=00:18:51:21:5F:E4"<br />
<br />
(если же vzctl выдает ругань вида "According to vps.basic CT<N> has no veth interface configured." - значит, вы уже настраивали контейнеры и надо на данный момент закомментировать EXTERNAL_SCRIPT в /etc/net/vznet.conf)<br />
<br />
первый mac-адрес будет использоваться для интерфейса в контейнере (обычный eth0 или как было задано в команде добавления)), а второй — для интерфейса на ноде (у него будет имя veth<номер ve>.0). mac-адреса можно указать и вручну, а если нет — то они вычислятся автоматически. Конечно, они не должны быть одинаковыми с соседними онтерфейсами (и вообще ни с чем в сети).<br />
<br />
4. создать на ноде папку по имени интерфейса в etc/net/ifaces, а в нее положить такие файлы:<br />
<br />
* <tt>ipv4address</tt>:<br />
0 dev veth101.0<br />
<br />
* <tt>ipv4route</tt>:<br />
10.1.10.10 dev veth101.0<br />
<br />
* <tt>options</tt>:<br />
TYPE=eth<br />
BOOTPROTO=static<br />
ONBOOT=yes<br />
USE_HOTPLUG=yes<br />
<br />
* <tt>sysctl.conf</tt>:<br />
proxy_arp=1<br />
ipv4_forwarding=1<br />
<br />
файл ipv4address запустит интерфейс, но не назначит ему адреса (адрес присуствует у части, которая внутри VE, а снаружи — нет).<br />
файл ipv4route пропишет маршрут для адреса VE на конкретный интерфейс на ноде.<br />
файл options содержит важную опцию USE_HOTPLUG, она позволяет запускать интерфейс только тогда, когда VE реально стартует, без нее при старте сети будет ругань на невозможность сконфигурировать отсутствующий интерфейс.<br />
файл sysctl.conf задает параметры sysctl для конкретного интерфейса, используя [[Etcnet#Как использовать автодополнение в sysctl.conf|автодополнение]]<br />
<br />
5. такой же файл sysctl.conf надо положить в каталог физического eth-интерфейса сервера (eth0, если вы не [[Etcnet#В каких случаях eth0 вреден|переименовали]] его).<br />
<br />
* <tt>sysctl.conf</tt>:<br />
proxy_arp=1<br />
ipv4_forwarding=1<br />
<br />
6. Теперь надо зайти в VE (например, vzctl enter 101) и настроить интерфейс там. Положить следующие файлы в каталог etc/net/ifaces/eth0/ (если при создании вы назвали его eth0):<br />
<br />
* <tt>ipv4address</tt>:<br />
10.1.10.10/16<br />
<br />
* <tt>ipv4route</tt>:<br />
default via 10.1.10.150 dev eth0<br />
<br />
* <tt>options</tt>:<br />
TYPE=eth<br />
BOOTPROTO=static<br />
ONBOOT=yes<br />
<br />
Здесь 10.1.10.10 — это адрес, который присваивается интерфейсу внутри VE, а 10.1.10.150 — адрес, присвоенный физическому интерфейсу на ноде.<br />
Проблема: если в качестве маршрута указать default dev eth0, то в локальной сети (10.1.*) этот интерфейс доступен будет, но при попытке выйти за ее пределы (например, в интернет) - работать не будет, так как будет считать что абсолютно все адреса должны быть доступны через arp-запрос в локальной сети). Что в случае адресов из интернета, конечно, неверно.<br />
<br />
=== Проверка результатов ===<br />
<br />
Теперь можно проверить, что получилось:<br />
<br />
Выключить VE<br />
<br />
vzctl stop 101<br />
<br />
Тут желательно уже раскомментировать EXTERNAL_SCRIPT в /etc/net/vznet.conf, и проверить наличие в /etc/vz/conf/101<br />
<br />
CONFIG_CUSTOMIZED="yes"<br />
BRIDGEDEV="br0"<br />
<br />
если вы включаете интерфейсы в бридж.<br />
<br />
Включить VE<br />
<br />
vzctl start 101<br />
<br />
и проверить наличие интерфейса veth и маршрута:<br />
<br />
ip a<br />
ifconfig<br />
route -n<br />
<br />
например, оно может выглядеть так:<br />
2: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue<br />
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00<br />
inet 127.0.0.1/8 scope host lo<br />
14: extbi: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000<br />
link/ether 00:19:99:01:4b:82 brd ff:ff:ff:ff:ff:ff<br />
inet 10.1.10.150/16 brd 10.1.255.255 scope global extbi<br />
21: veth1040.0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue<br />
link/ether 00:18:51:21:5f:e4 brd ff:ff:ff:ff:ff:ff<br />
<br />
extbi Link encap:Ethernet HWaddr 00:19:99:01:4B:82<br />
inet addr:10.1.10.150 Bcast:10.1.255.255 Mask:255.255.0.0<br />
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1<br />
lo Link encap:Local Loopback<br />
inet addr:127.0.0.1 Mask:255.0.0.0<br />
veth1040.0 Link encap:Ethernet HWaddr 00:18:51:21:5F:E4<br />
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1<br />
<br />
10.1.10.40 0.0.0.0 255.255.255.255 UH 0 0 0 veth1040.0<br />
10.1.0.0 0.0.0.0 255.255.0.0 U 0 0 0 extbi<br />
<br />
<br />
и при этом обязательно должны быть включены forwarding и proxy_arp на соотв. интерфейсах (п .3 и 4)<br />
<br />
[node]# cat /proc/sys/net/ipv4/conf/extbi/proxy_arp<br />
1<br />
[node]# cat /proc/sys/net/ipv4/conf/veth1040.0/proxy_arp<br />
1<br />
<br />
аналогично с forwarding.<br />
<br />
с другого компьютера сети можно запустить ping<br />
<br />
$ ping 10.1.10.10<br />
PING 10.1.10.10 (10.1.10.10) 56(84) bytes of data.<br />
64 bytes from 10.1.10.10: icmp_seq=1 ttl=64 time=2.82 ms<br />
<br />
при этом в arp-таблице ноды появится запись<br />
<br />
#arp<br />
samba.local ether 00:18:51:62:4E:08 C veth101.0<br />
<br />
Если же у вас не так — смотрите, где что перепутано или забыто ;)<br />
<br />
=== Как добиться прохождения broadcast в VE с интерфейсом veth ===<br />
<br />
Если вы сделали все вышеописанное, то у вас будут работать сервисы в контейнере, которые получают пакеты, адресованные непосредственно им.<br />
(Такие как FTP, DNS, LDAP и другие).<br />
Но они работали бы и с интерфейсом venet, а veth обычно настраивают тогда, когда хотят поместить в контейнер что-то, что получало бы пакеты типа broadcast, адресованные всей подсети. Но на данном этапе работать это не будет ;)<br />
Причина в том, что в такой конфигурации между контейнером и остальной сетью есть роутер (это HN). Это можно легко проверить:<br />
<br />
# traceroute -n 10.1.10.40<br />
traceroute to 10.1.10.40 (10.1.10.40), 30 hops max, 40 byte packets<br />
1 10.1.10.150 (10.1.10.150) 0.149 ms 0.123 ms 0.119 ms<br />
2 10.1.10.40 (10.1.10.40) 0.139 ms 0.116 ms 0.118 ms<br />
<br />
Т.е. пакеты из наружной сети проходя сначала через HN, но broadcast-пакеты роутеры не передают. Поэтому если поместить в такой контейнер сервисы типа DHCP или Samba, то работать они будут некорректно: например, Samba сможет работать как WINS-сервер, регистрируя имена тех, кто прямо укажет у себя адрес WINS-сервера, но она не сможет ответить за широковещательный запрос о наличии в сети master browser. Поэтому остальные машины выберут master browser кого-то другого, а не этот Samba-сервер ;)<br />
<br />
А вот чтобы все же такие рассылки проходили и в этот контейнер, нужно сделать следующее.<br />
<br />
1. Создать интерфейс типа bridge, как описано в пункте [[Etcnet#Как настроить Ethernet-мост|3.6]] статьи Etcnet. Поместить в него только один интерфейс, который является физическим ethernet на HN. С ним позже будет связываться интерфейс типа veth, который расположен на HN.<br />
<br />
2. Использовать статью (и в частности раздел) OpenVZ [http://wiki.openvz.org/Veth#Making_a_veth-device_persistent wiki] , где описано какие внести изменения в файлы конфигурации контейнера на HN.<br />
<br />
3. Использовать приведенный там скрипт vznetcfg.custom, поместив его куда-нибудь, например в /usr/local/sbin/. Но исправить путь brctl=/usr/sbin/brctl<br />
на /sbin.<br />
<br />
для простоты скопирую его и тут:<br />
#!/bin/bash<br />
# /usr/sbin/vznetaddbr<br />
# a script to add virtual network interfaces (veth's) in a CT to a bridge on CT0<br />
CONFIGFILE=/etc/vz/conf/$VEID.conf<br />
. $CONFIGFILE<br />
VZHOSTIF=`echo $NETIF |sed 's/^.*host_ifname=\(.*\),.*$/\1/g'`<br />
if [ ! -n "$VZHOSTIF" ]; then<br />
echo "According to $CONFIGFILE CT$VEID has no veth interface configured."<br />
exit 1<br />
fi<br />
if [ ! -n "$VZHOSTBR" ]; then<br />
echo "According to $CONFIGFILE CT$VEID has no bridge interface configured."<br />
exit 1<br />
fi<br />
echo "Adding interface $VZHOSTIF to bridge $VZHOSTBR on CT0 for CT$VEID"<br />
/usr/sbin/brctl addif $VZHOSTBR $VZHOSTIF<br />
exit 0<br />
<br />
Этот скрипт читает конфиг VE в /etc/vz/conf, где добавлены соотв. параметры. VZHOSTBR - это имя бриджа из п.1, а VZHOSTIF определится скриптом из строки конфига NETIF. Скрипт проверяет наличие нужных параметров и просто добавляет еще один интерфейс (а именно интерфейс вида veth<номер VE> в уже существующий к этому моменту бридж.<br />
<br />
4. veth интерфейсы, попадающие в бридж, не требуют специальной записи в таблице роутинга на ноде. поэтому в файле ipv4route в соотв. папке /etc/net/ifaces/veth* можно закомментировать установку маршрута. (Или это обязательно требуется? проверьте). <br />
<br />
<br />
Поменяйте таким образом конфигурацию всех VE и интерфейсами veth, и они окажутся в одном бридже, что позволит им беспрепятственно, без роутинга, общаться между собой.<br />
<br />
Результат:<br />
# brctl show<br />
bridge name bridge id STP enabled interfaces<br />
br0 8000.001851215fe4 yes extbi<br />
veth1010.0<br />
veth1040.0<br />
<br />
При старте сервера сначала стартует etcnet, который создает бридж с одним ethernet-интерфейсом хоста (в этом примере - extbi) и пропускает veth-интерфейсы еще не стартовавших контейнеров (они USE_HOTPLUG):<br />
<br />
May 21 14:40:46 fujitsu network: Starting veth1010.0:<br />
May 21 14:40:46 fujitsu network: skipping hotplug iface 'veth1010.0'<br />
May 21 14:40:46 fujitsu network: SKIPPED<br />
<br />
А позже при старте VE и поднимается интерфейс и добавляет себя в бридж:<br />
<br />
May 21 14:40:49 fujitsu vzctl: Configure veth devices: veth1010.0<br />
May 21 14:40:49 fujitsu vzctl: ifname=eth0 <br />
May 21 14:40:49 fujitsu vzctl: mac=00:18:51:AE:1F:20 <br />
May 21 14:40:49 fujitsu vzctl: host_ifname=veth1010.0 <br />
May 21 14:40:49 fujitsu vzctl: host_mac=00:18:51:75:1B:64 <br />
May 21 14:40:49 fujitsu vzctl: Adding interface veth1010.0 to the bridge br0.<br />
<br />
<br />
=== Проблемы ===<br />
<br />
1. Если пытаться полностью полагаться на etcnet, то можно попробовать использовать скрипт ifup-post в каталоге интерфейса для добавления его в бридж. <br />
Тогда VZHOSTBR и VZHOSTIF прописать явно, они будут для каждого свои. У меня не получилось, но я не все варианты попробовал ;)<br />
<br />
2. Если на HN находятся одновременно интерфейсы типа veth и типа venet, то у меня терялась между ними связь после экспериментов с добавлением veth в бридж. Те, кто конфигурировал такое, обычно опасались смешивать интерфейсы разного типа. Но может быть и такое, что это просто временные проблемы ядра, а у вас заработает. Пробуйте.<br />
<br />
<br />
3 Если у вас часть интерфейсов veth, а часть venet и вы хотите переделать venet в veth, то, удалив адрес с venet и пытаясь сконфигурировать veth в том контейнере получится такое:<br />
<br />
# vzctl set 1030 --ipdel 10.1.10.30 --save<br />
Deleting IP address(es): 10.1.10.30<br />
Saved parameters for VE 1030<br />
# vzctl set 1030 --netif_add eth0,,,fe:ff:ff:ff:ff:ff --save<br />
Configure veth devices: veth1030.0<br />
According to vps.basic CT1030 has no veth interface configured.<br />
/usr/sbin/vznetcfg exited with error<br />
Saved parameters for VE 1030<br />
<br />
Проблема курицы и яйца - сконфигурирован внешний скрипт, который при выполнении берет параметры из строки в конфиге NETIF (см. выше). А ее там еще нет, потому что она как раз и пытается добавиться. В результате ничего не изменится (NETIF не будет сконфигурирован). <br />
Выход, например - временно отключить в /etc/vz/vznet.conf параметр EXTERNAL_SCRIPT (или доработать скрипт?)<br />
<br />
<br />
== Как в нормальной системе использовать мост (bridge) в VE ==<br />
<br />
Предыдущие разделы очень сложны по набору информации, и понять, что же нужно выбрать, может быть затруднительно.<br />
Скажу коротко, что если вам нужны контейнеры с внешними адресами, то надо использовать bridge — это самый простой<br />
вариант, не имеющий большинства проблем.<br />
<br />
Возможно, что в серверном дистрибутиве уже используется bridge для сети (создано устройство breth0).<br />
Если этого нет, то создаём по пункту [[Etcnet#Как настроить Ethernet-мост|3.6]] статьи Etcnet. Если коротко, то в физическом интерфейсе оставляем только файл options с содержимым примерно<br />
TYPE=eth<br />
MODULE=r8169<br />
а все остальные настройки переносим в /etc/net/ifaces/breth0, где в options пишем<br />
TYPE=bri<br />
HOST='eth0'<br />
И создаём brctl с содержимым<br />
stp AUTO on<br />
(не понял, насколько это нужно).<br />
Остальные настройки (ipv4address, ipv4route, resolv.conf) должны быть скопированы, и обычно не требуют изменения.<br />
<br />
Также обязательно должен быть включен ip forwarding (net.ipv4.ip_forward = 1 в /etc/net/sysctl.conf).<br />
<br />
Далее в /etc/vz/vznet.conf вносим строку<br />
EXTERNAL_SCRIPT="/usr/sbin/vznetaddbr"<br />
<br />
Предварительно удалив из конфига контейнера (/etc/vz/conf/501.conf) строку NETIF, запускаем<br />
vzctl set 501 --netif_add breth0,,,fe:ff:ff:ff:ff:ff,breth0 --save<br />
для каждого контейнера, который мы хотим подключить к сетевому мосту.<br />
<br />
Дальше только не забываем в каждом контейнере поменять сетевые настройки, поскольку сменится название интерфейса внутри (с eth0 на breth0), соответственно нужно переименовать каталог /etc/net/ifaces/eth0.<br />
<br />
Больше ничего делать не нужно.<br />
<br />
Проверяем, что всё получилось:<br />
# brctl show<br />
bridge name bridge id STP enabled interfaces<br />
breth0 8000.00185167a3cb yes eth0<br />
veth501.0<br />
<br />
Запускаем контейнер:<br />
# vzctl start 501<br />
...<br />
File resolv.conf was modified<br />
Configure veth devices: veth501.0 <br />
Adding interface veth501.0 to bridge breth0 on CT0 for CT501<br />
<br />
<br />
==Ресурсы для справок ==<br />
[http://wiki.openvz.org/Using_private_IPs_for_Hardware_Nodes#Making_the_configuration_persistent openvz wiki net configuration]<br />
<br />
<br />
[[Категория:Admin]]<br />
[[Категория:OpenVZ]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=%D0%90%D0%BB%D1%8C%D1%82_%D0%9B%D0%B8%D0%BD%D1%83%D0%BA%D1%81_7.0_%D0%9A%D0%B5%D0%BD%D1%82%D0%B0%D0%B2%D1%80&diff=23449Альт Линукс 7.0 Кентавр2013-03-02T13:20:36Z<p>EvgeniiTerechkov: /* Известные недоработки */ - ALT#28625</p>
<hr />
<div>== Продукт ==<br />
<br />
Альт Линукс 7.0 Кентавр — многофункциональный дистрибутив для серверов и рабочих станций. Включает ядро 3.6.9 (std-def). В качестве графической среды для рабочей станции поставляется среда MATE (опционально), в качестве минимальной среды для администрирования сервера поставляется FVWM (также опционально).<br />
<br />
=== Основные преимущества ===<br />
* Выбор разворачиваемых решений (например, веб-сервер и графическая среда) на этапе установки.<br />
* Возможность как развернуть [[Домен|интегрированное решение на базе Kerberos/LDAP]], так и использовать только определённые службы без Alterator.<br />
* Установка серверных решений и решений конечных пользователей с одного диска.<br />
* Простое разворачивание [[Centaurus:_Бездисковый_клиент|загрузки бездисковых клиентов]].<br />
<br />
== Новое в версии 7.0 ==<br />
<br />
Основная статья по планам на Седьмую платформу: [[План выпуска бранча p7]]<br />
<br />
* При установке как сервера используется sysvinit, при установке как десктопа и в live -- systemd.<br />
* Во многих местах (etcnet, alterator) добавлена поддержка IPv6.<br />
* Проведена работа по интеграции pam_ccreds, что позволяет нормально использовать компьютер, подключённый к домену, вне его (включается в Центре управления системой → Аутентификация).<br />
* Домен можно использовать для [[Домен/Windows|аутентификации компьютеров под управлением Windows]]<br />
* Обеспечена возможность установки на зашифрованные разделы (требуется незашифрованый /boot)<br />
<br />
== Платформа ==<br />
[[Branches/p7|Седьмая платформа]]<br />
<br />
== Срок выпуска ==<br />
Начало 2013 года<br />
<br />
== Скачать образы ==<br />
<br />
{{Attention|Данный дистрибутив находится в состоянии разработки и вы можете использовать его только в тестовых целях}}<br />
<br />
Для перечисленных ресурсов доступ по ftp:// и http:// взаимозаменяем:<br />
* http://beta.altlinux.com/centaurus/ (основной сервер)<br />
<br />
Торренты:<br />
* http://torrent.altlinux.ru<br />
<br />
<br />
== Известные недоработки ==<br />
<br />
Основная ошибка по недоработкам Альт Линукс 7.0 Кентавр: '''{{Altbug|27685}}'''.<br />
<br />
Вопросы установки на EFI: [[UEFI]]<br />
<br />
{{Todo|Список недоработок будет заполняться по мере тестирования}}<br />
* {{Altbug|27802}} Полезно показывать MAC-адрес в поле информации интерфейса<br />
* <s>В LiveCD MATE запускается с интерфейсом на английском языке</s><br />
* При установке на шифрованные разделы, пароль при загрузке невозможно ввести при значении параметра vga отличном от normal <br />
* Временно перестала работать функциональность live, запоминающего изменения при записи образа на flash (так как таблица разделов теперь ещё более странная: MBR и GPT одновременно)<br />
* Не все нужные сервисы при установке в режиме "рабочая станция" будут активированы автоматически<br />
* Нет справки по шагу установки «Установка паролей на LUKS-разделы»<br />
* В LiveCD фон программы установки серый с белым текстом букв<br />
* При установке профиля сервера показываются ошибки:<br />
** не найден /etc/xinet.d/vsftpd<br />
** не найден бакенд postfix-dovecot<br />
* В установленном по умолчанию десктопе MDM с чёрным фоном<br />
* В MDM невозможно через меню выключить или перезагрузить компьютер<br />
* В установленном по умолчанию сервере показываются ошибки при запуске следующих служб: smartd, vzeventd, plymouth (Deactivating splash)<br />
* {{Altbug|28625}} '''В установленном на EFI сервере (без разделов LUKS) при запущенном графическом Plymouth на середине загрузки машина наглухо зависает. Если в начале загрузки нажать Esc и оставить текстовые сообщения, то загрузка проходит нормально'''<br />
* Шаг ввода пароля LUKS установщик с LiveCD пропускает и заканчивает работу без выхода на последний "прощальный" экран (на обычной системе доходит до конца)<br />
<br />
== Снимки экрана ==<br />
<br />
<gallery perrow="4"><br />
Image:Centaurus-7.0-bootmenu.png|Меню загрузочного диска<br />
Image:Centaurus-7.0-installer.png|Установка системы<br />
Image:Centaurus-7.0-loader.png|Загрузчик системы<br />
Image:Centaurus-7.0-loading.png|Загрузка системы<br />
Image:Centaurus-7.0-system.png|Запущенная система<br />
Image:Centaurus-7.0-alterator-net-domain.png|Веб-интерфейс Центра управления системой<br />
Image:Centaurus-7.0-indexhtml.png|Страница сведений о дистрибутиве<br />
</gallery><br />
<br />
=== Обои ===<br />
<br />
<gallery perrow="2"><br />
Image:Centaurus-7.0-wallpapers-1600x1200.jpg|1600x1200<br />
Image:Centaurus-7.0-wallpapers-1900x1080.jpg|1900x1080<br />
</gallery><br />
<br />
<br />
{{Category navigation|title=Releases/70|category=Releases/70|sortkey={{SUBPAGENAME}}}}<br />
<br />
[[Category:Centaurus]][[Category:Планы]]<br />
{{Category navigation|title=Дистрибутивы|category=Дистрибутивы}}</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=UEFI&diff=23024UEFI2013-01-07T14:29:25Z<p>EvgeniiTerechkov: /* Linkdump */ - ссылка на efi user manual</p>
<hr />
<div>[[Category:Devel]]<br />
[[Category:Distributions]]<br />
{{Stub}}<br />
<br />
= Поддержка UEFI в ALT Linux =<br />
== Цель ==<br />
Обеспечить возможность совместного использования с ОС, установленными в UEFI-режиме, прямо сейчас (переключение BIOS/UEFI более хлопотно); предоставить возможность использования «железа» вообще без BIOS (legacy mode).<br />
<br />
== Состояние ==<br />
В работе, есть промежуточные итоги.<br />
<br />
== Результат ==<br />
По состоянию на конец 2012 года начальная поддержка UEFI включена в альфу [[Альт Линукс 7.0 Кентавр|Centaurus 7.0]] и [[регулярные сборки образов]].<br />
<br />
Всё так же доступен более ранний [http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/mkimage-profiles/efi/live-uefi-20121112-x86_64.iso экспериментальный Live-образ], поддерживающий загрузку в EFI mode и Legacy mode, будучи записанным на CD/DVD-болванку или USB-флэшку. Проверен на ASUS/Gigabyte UEFI и MacBook/MBP EFI.<br />
<br />
Также есть пробный [http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/mkimage-profiles/efi/icewm-uefi-20121115-x86_64.iso графический инсталятор], ныне требующий [http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/mkimage-profiles/efi/README некоторого внимания и ручной работы] для установки.<br />
<br />
== mkimage ==<br />
Начальная поддержка сборки UEFI-загружаемых гибридных образов добавлена в {{pkg|mkimage-0.2.5}}; в качестве образца можно использовать example4 из документации пакета, а суть требуемых изменений в профиле сводится к:<br />
* добавлению в инсталер {{pkg|dosfstools}} ({{pkg|efibootmgr}} будет вытянут текущим {{pkg|alterator-grub}});<br />
* добавлению в базовую устанавливаемую систему {{pkg|grub2-efi}};<br />
* добавлению в {{path|modules}} для {{pkg|propagator}} {{path|kernel/drivers/firmware}} ради {{path|efivars.ko}};<br />
* передаче mkimage значения <tt>EFI_BOOTLOADER = elilo</tt> (другие типы бутлоадеров ещё не реализованы, см. {{path|tools/mki-copy-efiboot}}; установка этого приведёт к добавлению в <tt>BOOT_TYPE</tt> значения <tt>efiboot</tt>).<br />
<br />
== HOWTO ==<br />
Приборы и материалы:<br />
* свежий Sisyphus (в т.ч. xorriso 1.2.4+, syslinux-4.04-alt5+ либо 4.06+)<br />
* «простая» live-исошка (например, [http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/mkimage-profiles/tmp/live-efi-20121112-x86_64.iso live-efi] с нужными утилитами и live-install, но пока без EFI-загрузчика)<br />
<br />
Действия от имени root (может быть удобно записать в скрипт):<br />
<br />
cd ${TMP:-/tmp}<br />
apt-get install bsdtar dosfstools elilo syslinux xorriso<br />
rm -rf ISO<br />
mkdir ISO<br />
cd ISO<br />
wget -O - http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/mkimage-profiles/tmp/live-efi-20121112-x86_64.iso | bsdtar -xf -<br />
mkdir -p EFI/BOOT<br />
cp -a syslinux/alt0/{vmlinuz,full.cz} EFI/BOOT<br />
cp -a /usr/lib64/efi/elilo.efi EFI/BOOT/bootx64.efi<br />
cat > EFI/BOOT/elilo.conf << EOF<br />
prompt<br />
timeout="20"<br />
default="linux"<br />
image="vmlinuz"<br />
label="linux"<br />
read-only<br />
initrd=full.cz<br />
append="fastboot live lowmem showopts automatic=method:cdrom ramdisk_size=131072 stagename=live"<br />
EOF<br />
cd ..<br />
rm -rf EFIBOOT<br />
mkdir EFIBOOT<br />
dd if=/dev/zero of=efiboot.img bs=16384 count=1024<br />
mkfs.vfat efiboot.img<br />
mount -o loop efiboot.img EFIBOOT<br />
cp -a ISO/EFI EFIBOOT<br />
wget -O EFIBOOT/shellx64.efi https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/EdkShellBinPkg/FullShell/X64/Shell_Full.efi<br />
umount EFIBOOT<br />
mv efiboot.img ISO/EFI/<br />
xorriso -as mkisofs -r -V ALT -isohybrid-mbr /usr/lib/syslinux/isohdpfx.bin \<br />
-partition_offset 16 -J -l -b syslinux/isolinux.bin -c syslinux/boot.cat \<br />
-no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e EFI/efiboot.img \<br />
-no-emul-boot -isohybrid-gpt-basdat -o live-efi.iso ISO<br />
pwd<br />
echo rm -rf EFIBOOT ISO<br />
<br />
Копия результата выполнения именно этого скрипта доступна [http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/mkimage-profiles/tmp/live-uefi-20121112-x86_64.iso здесь] (120M).<br />
<br />
== Проверка ==<br />
<br />
При загрузке в EFI-режиме загрузчиком будет текстовое ELILO, в BIOS-режиме -- синяя менюшка SYSLINUX; после собственно загрузки и логина именем root в EFI-режиме должны отработать команды {{cmd|modprobe efivars; efibootmgr}}, в BIOS-режиме вторая из них скажет<br />
Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.<br />
Try 'modprobe efivars' as root.<br />
<br />
'''ВНИМАНИЕ: не пытайтесь запускать {{cmd|efibootmgr}} на оборудовании Apple, [http://www.rodsbooks.com/efi-bootloaders/installation.html известны случаи повреждения его firmware таким образом].'''<br />
<br />
=== VirtualBox ===<br />
Желательна ветка 4.2 и выше, в 4.1 реализация EFI несколько странная и крайне задумчивая. Требуется 64-битный экземпляр со включенной галкой "EFI" в настройках материнской платы. ISO рекомендуется подключать через SATA-, а не IDE-контроллер (спасибо vsu@ за подсказку). Диск -- динамический на 10Gb или больше, чтобы по возможности отрабатывала авторазбивка.<br />
<br />
Получить доступ к настройкам можно быстрым нажатием F8, пока промелькивает логотип VirtualBox. Следует отметить, что NVRAM на виртуальном железе VirtualBox-а не переживает выключение экземпляра (это известная [http://www.virtualbox.org/ticket/11177 проблема]). Т.е. установщик/efibootmgr не может добавить ссылку на grub, а если добавить её руками, она исчезнет при следующем запуске экземпляра. Объезд упомянут по этой же ссылке: выполнить echo '"fs0:\EFI\ALT Linux\grubx64.efi"' > /boot/efi/startup.nsh (внешние кавычки для UNIX-шелла, внутренние для EFI-шелла, чтобы не пугался пробела) в загруженной системе.<br />
<br />
=== KVM ===<br />
Нужно загрузить экземпляр kvm с [http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=OVMF TianoCore firmware].<br />
<br />
== Использование ==<br />
<br />
В упомянутом образе есть скрипт {{cmd|live-install}}, использовать который можно примерно так:<br />
# загружаем полученный live-efi.iso с болванки, флэшки или ещё чего<br />
# проверяем то, что загрузились в EFI mode:<br />
#* {{cmd|modprobe efivars}}<br />
#* {{cmd|efibootmgr}}<br />
# готовим на диске (далее <tt>sda</tt>) [http://www.rodsbooks.com/efi-bootloaders/installation.html GPT-разбивку], не забываем FAT32-раздел ESP (~100—500 Мб), далее <tt>sda1</tt>; корень пусть будет <tt>sda2</tt>:<br />
#* {{cmd|fdisk /dev/sda}}<br />
#* [ сносим MBR-разделы ]<br />
#* {{cmd|gdisk /dev/sda}}<br />
#* [ создаём GPT ]<br />
#* n<br />
#* 1<br />
#* +100M<br />
#* [http://www.rodsbooks.com/efi-bootloaders/principles.html ef00]<br />
#* n<br />
#* 2<br />
#* +1G<br />
#* 8300 (enter)<br />
#* p<br />
#* w<br />
#* y<br />
# {{cmd|live-install --no-lilo /dev/sda2 /dev/sda2}}<br />
# {{cmd|mount /dev/sda2 /mnt}}<br />
# {{cmd|for i in dev proc sys; do mount --bind /$i /mnt/$i; done}}<br />
# {{cmd|chroot /mnt /bin/bash}}<br />
#* {{cmd|echo "/dev/sda1 /boot/efi vfat defaults 0 0" >> /etc/fstab}}<br />
#* {{cmd|mount /boot/efi}}<br />
#* {{cmd|grub-install --target&#x3d;x86_64-efi --efi-directory&#x3d;/boot/efi --bootloader-id&#x3d;altlinux --recheck}}<br />
#* {{cmd|update-grub}}<br />
#* {{cmd|umount /boot/efi}}<br />
#* {{cmd|exit}}<br />
# {{cmd|umount /mnt/{dev,sys,proc,&#125;}}<br />
# {{cmd|reboot}}<br />
<br />
Возможно применение {{cmd|parted}} вместо {{cmd|gdisk}}.<br />
<br />
== Linkdump ==<br />
* http://www.rodsbooks.com/efi-bootloaders/index.html<br />
* https://wiki.archlinux.org/index.php/UEFI<br />
* http://www.linuxfoundation.org/news-media/blogs/browse/2012/10/linux-foundation-uefi-secure-boot-system-open-source<br />
* http://en.opensuse.org/KVM/UEFI_Secure_boot_using_qemu-kvm<br />
* http://www.suse.com/blogs/uefi-secure-boot-overview/<br />
* http://www.suse.com/blogs/uefi-secure-boot-plan/<br />
* http://www.suse.com/blogs/uefi-secure-boot-details/<br />
* http://cdimage.debian.org/cdimage/unofficial/efi-development/upload4/<br />
* https://help.ubuntu.com/community/UEFI<br />
* https://wiki.archlinux.org/index.php/UEFI_Bootloaders<br />
* https://felipec.wordpress.com/2012/01/18/efi-adventures/<br />
* http://mjg59.dreamwidth.org/4957.html<br />
** https://bugs.launchpad.net/ubuntu-cdimage/+bug/1062737<br />
* http://download.intel.com/support/motherboards/server/sr9000mk4u/sb/d71474002_sr9000mk4u_efi_userguide.pdf<br />
<br />
[[MacBookPro]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=UEFI&diff=23023UEFI2013-01-07T14:08:40Z<p>EvgeniiTerechkov: /* VirtualBox */ - объезд для автоматической загрузки</p>
<hr />
<div>[[Category:Devel]]<br />
[[Category:Distributions]]<br />
{{Stub}}<br />
<br />
= Поддержка UEFI в ALT Linux =<br />
== Цель ==<br />
Обеспечить возможность совместного использования с ОС, установленными в UEFI-режиме, прямо сейчас (переключение BIOS/UEFI более хлопотно); предоставить возможность использования «железа» вообще без BIOS (legacy mode).<br />
<br />
== Состояние ==<br />
В работе, есть промежуточные итоги.<br />
<br />
== Результат ==<br />
По состоянию на конец 2012 года начальная поддержка UEFI включена в альфу [[Альт Линукс 7.0 Кентавр|Centaurus 7.0]] и [[регулярные сборки образов]].<br />
<br />
Всё так же доступен более ранний [http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/mkimage-profiles/efi/live-uefi-20121112-x86_64.iso экспериментальный Live-образ], поддерживающий загрузку в EFI mode и Legacy mode, будучи записанным на CD/DVD-болванку или USB-флэшку. Проверен на ASUS/Gigabyte UEFI и MacBook/MBP EFI.<br />
<br />
Также есть пробный [http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/mkimage-profiles/efi/icewm-uefi-20121115-x86_64.iso графический инсталятор], ныне требующий [http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/mkimage-profiles/efi/README некоторого внимания и ручной работы] для установки.<br />
<br />
== mkimage ==<br />
Начальная поддержка сборки UEFI-загружаемых гибридных образов добавлена в {{pkg|mkimage-0.2.5}}; в качестве образца можно использовать example4 из документации пакета, а суть требуемых изменений в профиле сводится к:<br />
* добавлению в инсталер {{pkg|dosfstools}} ({{pkg|efibootmgr}} будет вытянут текущим {{pkg|alterator-grub}});<br />
* добавлению в базовую устанавливаемую систему {{pkg|grub2-efi}};<br />
* добавлению в {{path|modules}} для {{pkg|propagator}} {{path|kernel/drivers/firmware}} ради {{path|efivars.ko}};<br />
* передаче mkimage значения <tt>EFI_BOOTLOADER = elilo</tt> (другие типы бутлоадеров ещё не реализованы, см. {{path|tools/mki-copy-efiboot}}; установка этого приведёт к добавлению в <tt>BOOT_TYPE</tt> значения <tt>efiboot</tt>).<br />
<br />
== HOWTO ==<br />
Приборы и материалы:<br />
* свежий Sisyphus (в т.ч. xorriso 1.2.4+, syslinux-4.04-alt5+ либо 4.06+)<br />
* «простая» live-исошка (например, [http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/mkimage-profiles/tmp/live-efi-20121112-x86_64.iso live-efi] с нужными утилитами и live-install, но пока без EFI-загрузчика)<br />
<br />
Действия от имени root (может быть удобно записать в скрипт):<br />
<br />
cd ${TMP:-/tmp}<br />
apt-get install bsdtar dosfstools elilo syslinux xorriso<br />
rm -rf ISO<br />
mkdir ISO<br />
cd ISO<br />
wget -O - http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/mkimage-profiles/tmp/live-efi-20121112-x86_64.iso | bsdtar -xf -<br />
mkdir -p EFI/BOOT<br />
cp -a syslinux/alt0/{vmlinuz,full.cz} EFI/BOOT<br />
cp -a /usr/lib64/efi/elilo.efi EFI/BOOT/bootx64.efi<br />
cat > EFI/BOOT/elilo.conf << EOF<br />
prompt<br />
timeout="20"<br />
default="linux"<br />
image="vmlinuz"<br />
label="linux"<br />
read-only<br />
initrd=full.cz<br />
append="fastboot live lowmem showopts automatic=method:cdrom ramdisk_size=131072 stagename=live"<br />
EOF<br />
cd ..<br />
rm -rf EFIBOOT<br />
mkdir EFIBOOT<br />
dd if=/dev/zero of=efiboot.img bs=16384 count=1024<br />
mkfs.vfat efiboot.img<br />
mount -o loop efiboot.img EFIBOOT<br />
cp -a ISO/EFI EFIBOOT<br />
wget -O EFIBOOT/shellx64.efi https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2/EdkShellBinPkg/FullShell/X64/Shell_Full.efi<br />
umount EFIBOOT<br />
mv efiboot.img ISO/EFI/<br />
xorriso -as mkisofs -r -V ALT -isohybrid-mbr /usr/lib/syslinux/isohdpfx.bin \<br />
-partition_offset 16 -J -l -b syslinux/isolinux.bin -c syslinux/boot.cat \<br />
-no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e EFI/efiboot.img \<br />
-no-emul-boot -isohybrid-gpt-basdat -o live-efi.iso ISO<br />
pwd<br />
echo rm -rf EFIBOOT ISO<br />
<br />
Копия результата выполнения именно этого скрипта доступна [http://ftp.linux.kiev.ua/pub/Linux/ALT/people/mike/iso/mkimage-profiles/tmp/live-uefi-20121112-x86_64.iso здесь] (120M).<br />
<br />
== Проверка ==<br />
<br />
При загрузке в EFI-режиме загрузчиком будет текстовое ELILO, в BIOS-режиме -- синяя менюшка SYSLINUX; после собственно загрузки и логина именем root в EFI-режиме должны отработать команды {{cmd|modprobe efivars; efibootmgr}}, в BIOS-режиме вторая из них скажет<br />
Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables.<br />
Try 'modprobe efivars' as root.<br />
<br />
'''ВНИМАНИЕ: не пытайтесь запускать {{cmd|efibootmgr}} на оборудовании Apple, [http://www.rodsbooks.com/efi-bootloaders/installation.html известны случаи повреждения его firmware таким образом].'''<br />
<br />
=== VirtualBox ===<br />
Желательна ветка 4.2 и выше, в 4.1 реализация EFI несколько странная и крайне задумчивая. Требуется 64-битный экземпляр со включенной галкой "EFI" в настройках материнской платы. ISO рекомендуется подключать через SATA-, а не IDE-контроллер (спасибо vsu@ за подсказку). Диск -- динамический на 10Gb или больше, чтобы по возможности отрабатывала авторазбивка.<br />
<br />
Получить доступ к настройкам можно быстрым нажатием F8, пока промелькивает логотип VirtualBox. Следует отметить, что NVRAM на виртуальном железе VirtualBox-а не переживает выключение экземпляра (это известная [http://www.virtualbox.org/ticket/11177 проблема]). Т.е. установщик/efibootmgr не может добавить ссылку на grub, а если добавить её руками, она исчезнет при следующем запуске экземпляра. Объезд упомянут по этой же ссылке: выполнить echo '"fs0:\EFI\ALT Linux\grubx64.efi"' > /boot/efi/startup.nsh (внешние кавычки для UNIX-шелла, внутренние для EFI-шелла, чтобы не пугался пробела) в загруженной системе.<br />
<br />
=== KVM ===<br />
Нужно загрузить экземпляр kvm с [http://sourceforge.net/apps/mediawiki/tianocore/index.php?title=OVMF TianoCore firmware].<br />
<br />
== Использование ==<br />
<br />
В упомянутом образе есть скрипт {{cmd|live-install}}, использовать который можно примерно так:<br />
# загружаем полученный live-efi.iso с болванки, флэшки или ещё чего<br />
# проверяем то, что загрузились в EFI mode:<br />
#* {{cmd|modprobe efivars}}<br />
#* {{cmd|efibootmgr}}<br />
# готовим на диске (далее <tt>sda</tt>) [http://www.rodsbooks.com/efi-bootloaders/installation.html GPT-разбивку], не забываем FAT32-раздел ESP (~100—500 Мб), далее <tt>sda1</tt>; корень пусть будет <tt>sda2</tt>:<br />
#* {{cmd|fdisk /dev/sda}}<br />
#* [ сносим MBR-разделы ]<br />
#* {{cmd|gdisk /dev/sda}}<br />
#* [ создаём GPT ]<br />
#* n<br />
#* 1<br />
#* +100M<br />
#* [http://www.rodsbooks.com/efi-bootloaders/principles.html ef00]<br />
#* n<br />
#* 2<br />
#* +1G<br />
#* 8300 (enter)<br />
#* p<br />
#* w<br />
#* y<br />
# {{cmd|live-install --no-lilo /dev/sda2 /dev/sda2}}<br />
# {{cmd|mount /dev/sda2 /mnt}}<br />
# {{cmd|for i in dev proc sys; do mount --bind /$i /mnt/$i; done}}<br />
# {{cmd|chroot /mnt /bin/bash}}<br />
#* {{cmd|echo "/dev/sda1 /boot/efi vfat defaults 0 0" >> /etc/fstab}}<br />
#* {{cmd|mount /boot/efi}}<br />
#* {{cmd|grub-install --target&#x3d;x86_64-efi --efi-directory&#x3d;/boot/efi --bootloader-id&#x3d;altlinux --recheck}}<br />
#* {{cmd|update-grub}}<br />
#* {{cmd|umount /boot/efi}}<br />
#* {{cmd|exit}}<br />
# {{cmd|umount /mnt/{dev,sys,proc,&#125;}}<br />
# {{cmd|reboot}}<br />
<br />
Возможно применение {{cmd|parted}} вместо {{cmd|gdisk}}.<br />
<br />
== Linkdump ==<br />
* http://www.rodsbooks.com/efi-bootloaders/index.html<br />
* https://wiki.archlinux.org/index.php/UEFI<br />
* http://www.linuxfoundation.org/news-media/blogs/browse/2012/10/linux-foundation-uefi-secure-boot-system-open-source<br />
* http://en.opensuse.org/KVM/UEFI_Secure_boot_using_qemu-kvm<br />
* http://www.suse.com/blogs/uefi-secure-boot-overview/<br />
* http://www.suse.com/blogs/uefi-secure-boot-plan/<br />
* http://www.suse.com/blogs/uefi-secure-boot-details/<br />
* http://cdimage.debian.org/cdimage/unofficial/efi-development/upload4/<br />
* https://help.ubuntu.com/community/UEFI<br />
* https://wiki.archlinux.org/index.php/UEFI_Bootloaders<br />
* https://felipec.wordpress.com/2012/01/18/efi-adventures/<br />
* http://mjg59.dreamwidth.org/4957.html<br />
** https://bugs.launchpad.net/ubuntu-cdimage/+bug/1062737<br />
<br />
[[MacBookPro]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=SerialLogin&diff=22501SerialLogin2012-11-05T09:18:41Z<p>EvgeniiTerechkov: /* Systemd */ - поправка на местность, дополнительное чтение</p>
<hr />
<div>{{span|font-size: 180%|Как настроить вход на машину через последовательный порт (Serial Login)}}<br />
<br />
Для чего может понадобиться вход на Linux-машину через последовательный порт? Да мало ли для чего — например, если других способов связи нет, или для подключения к «безголовой» машине, конфигурация сети которой в общем случае неизвестна. В общем, бывает нужно.<br />
<br />
Напомню, что последовательные порты в Linux именуются в виде файлов {{path|/dev/ttyS*}} (на месте звёздочки может быть любой номер порта, начиная с нуля). Иногда, если используются адаптеры COM2USB, порты могут именоваться {{path|/dev/ttyUSB*}} (тоже начиная с нуля).<br />
<br />
Для настройки входа через последовательный порт вам надо выполнить два обязательных шага и, возможно, один необязательный:<br />
<br />
== Установка mgetty ==<br />
В ALT Linux вход по модемным линиям (здесь я их не рассматриваю) и последовательным портам обслуживает утилита '''mgetty'''. Для настройки входа вам нужно установить её. Сделайте это обычным методом (apt-get, aptitude, synaptic).<br />
<br />
== /etc/inittab ==<br />
Нужно поправить файл {{path|/etc/inittab}}, указать init-у запускать mgetty на нужных портах. Формат файла довольно прост и хорошо комментирован (в частности, есть пример и для mgetty). Подробности можно уточнить в inittab(5).<br />
<br />
Например, это может выглядеть так:<br />
<pre><br />
~ # grep -iE '^[^#].*mgetty' /etc/inittab<br />
T3:23:respawn:/sbin/mgetty -r -s 9600 -x 0 ttyS0<br />
T4:23:respawn:/sbin/mgetty -r -s 9600 -x 0 ttyS1<br />
</pre><br />
<br />
Эти параметры (с которыми init запустит mgetty для первых двух последовательных портов) означают, что на портах /dev/ttyS[01] (mgetty сам умеет добавлять /dev/) ожидаются прямые (-r, то есть, с других компьютеров/терминалов, в противоположность модемным) соединения со скоростью 9600 бод (-s) и с уровнем отладочной информации равным нулю (-x). Изменения вступят в силу лишь после прочтения файла init-ом (в результате команды {{cmd|telinit q}} от суперпользователя или перезагрузки машины).<br />
<br />
Дополнительную краткую информацию по вызову mgetty можно почерпнуть из mgetty(8).<br />
<br />
== /etc/mgetty+sendfax/mgetty.config ==<br />
Это необязательный шаг. Всё поведение mgetty контролируется ключами командной строки, однако если вы захотите задать параметры в отдельном файле (и перенести туда все специфичные для портов параметры), то для этого есть файл {{path|/etc/mgetty+sendfax/mgetty.config}}. Здесь вы можете задать как параметры, общие для всех портов, так и индивидуальные параметры линий. Подробности (а так же множество другой информации по последовательному входу) можно уточнить в полном руководстве — {{cmd|info mgetty}}.<br />
<br />
== Проверка ==<br />
Для проверки надо присоединить к только что настроенному порту кабель (COM2USB или DB-9 «мама-мама», для соединения с другим компьютером, либо другие кабеля, для другого оборудования), запустить терминальную программу ('''cu''', '''minicom''', '''cutecom'''), указать ей параметры соединения — порт (на машине откуда соединяемся) и скорость (указанную при запуске mgetty) и дать команду на соединение. В случае успеха на экран ничего не выводится — надо попробовать нажать несколько буквенно-цифовых (не функциональных) клавиш, чтобы mgetty распознал, что его зовут. Если всё хорошо — mgetty откликнется приглашением '''login:'''. Можно вводить имя пользователя и пароль, как обычно. Заметьте, что по умолчанию ALT Linux не пускает пользователя '''root''' через последовательные порты. Вы можете это изменить, поправив файл {{path|/etc/securetty}}.<br />
<br />
== GRUB и последовательный порт ==<br />
Может случиться так, что до входа в систему дело не дойдёт из-за неправильно настроенной загрузки. Существует способ взаимодействовать с загрузчиком GRUB по последовательному порту. Для этого в файл /boot/grub/menu.lst (или /boot/grub/grub.conf, смотря как у вас) нужно записать:<br />
<pre><br />
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1<br />
terminal --timeout=30 console serial<br />
</pre><br />
При этом во время загрузки GRUB 30 секунд будет выводить и на VGA-консоль и в последовательный порт сообщение "press any key". Откуда поступит первое нажатие клавиши, та консоль и будет считаться рабочей. Туда выведется стандартное меню GRUB, в котором обычно можно выбрать ядро или отредактировать параметры, передаваемые ядру.<br />
<br />
Есть ещё один приём, рассказанный мне Сергеем Власовым. Не знаю, актуален ли он ещё, но мне в своё время помог. Если GRUB по последовательному порту работает нормально, но ядро, несмотря на параметр console=ttyS0, при загрузке не выводит ни одного сообщения, то может помочь специальное значение параметра console (привожу блок конфига целиком):<br />
<pre><br />
title ALTLinux Sisyphus<br />
root (hd0,0)<br />
kernel /vmlinuz-smp ro root=/dev/hda2 console=uart,io,0x3f8,115200n8 fastboot<br />
initrd /initrd-smp.img<br />
</pre><br />
<br />
==Systemd==<br />
Всё вышеизложенное касается настройки для классического '''SySV-init'''. В случае использования '''systemd''' достаточно дать от суперпользователя команду {{cmd|ln -s /lib/systemd/system/serial-getty@.service /etc/systemd/system/getty.target.wants/serial-getty@ttyS0.service}} (Команда {{cmd|systemctl enable getty@ttyS0}} по умолчанию не действует, т.к. нет отдельного service-файла). Аналогично для других консолей. Это запустит agetty, требуемый systemd, при загрузке. Заметьте, что файл {{path|/etc/securetty}} действует и тут. Параметры запуска getty можно посмотреть в {{path|/lib/systemd/system/getty@.service}}.<br />
<br />
Дополнительное [http://0pointer.de/blog/projects/instances.html чтение].<br />
<br />
[[Категория:Admin]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=SerialLogin&diff=22500SerialLogin2012-11-05T08:50:08Z<p>EvgeniiTerechkov: /* systemd */</p>
<hr />
<div>{{span|font-size: 180%|Как настроить вход на машину через последовательный порт (Serial Login)}}<br />
<br />
Для чего может понадобиться вход на Linux-машину через последовательный порт? Да мало ли для чего — например, если других способов связи нет, или для подключения к «безголовой» машине, конфигурация сети которой в общем случае неизвестна. В общем, бывает нужно.<br />
<br />
Напомню, что последовательные порты в Linux именуются в виде файлов {{path|/dev/ttyS*}} (на месте звёздочки может быть любой номер порта, начиная с нуля). Иногда, если используются адаптеры COM2USB, порты могут именоваться {{path|/dev/ttyUSB*}} (тоже начиная с нуля).<br />
<br />
Для настройки входа через последовательный порт вам надо выполнить два обязательных шага и, возможно, один необязательный:<br />
<br />
== Установка mgetty ==<br />
В ALT Linux вход по модемным линиям (здесь я их не рассматриваю) и последовательным портам обслуживает утилита '''mgetty'''. Для настройки входа вам нужно установить её. Сделайте это обычным методом (apt-get, aptitude, synaptic).<br />
<br />
== /etc/inittab ==<br />
Нужно поправить файл {{path|/etc/inittab}}, указать init-у запускать mgetty на нужных портах. Формат файла довольно прост и хорошо комментирован (в частности, есть пример и для mgetty). Подробности можно уточнить в inittab(5).<br />
<br />
Например, это может выглядеть так:<br />
<pre><br />
~ # grep -iE '^[^#].*mgetty' /etc/inittab<br />
T3:23:respawn:/sbin/mgetty -r -s 9600 -x 0 ttyS0<br />
T4:23:respawn:/sbin/mgetty -r -s 9600 -x 0 ttyS1<br />
</pre><br />
<br />
Эти параметры (с которыми init запустит mgetty для первых двух последовательных портов) означают, что на портах /dev/ttyS[01] (mgetty сам умеет добавлять /dev/) ожидаются прямые (-r, то есть, с других компьютеров/терминалов, в противоположность модемным) соединения со скоростью 9600 бод (-s) и с уровнем отладочной информации равным нулю (-x). Изменения вступят в силу лишь после прочтения файла init-ом (в результате команды {{cmd|telinit q}} от суперпользователя или перезагрузки машины).<br />
<br />
Дополнительную краткую информацию по вызову mgetty можно почерпнуть из mgetty(8).<br />
<br />
== /etc/mgetty+sendfax/mgetty.config ==<br />
Это необязательный шаг. Всё поведение mgetty контролируется ключами командной строки, однако если вы захотите задать параметры в отдельном файле (и перенести туда все специфичные для портов параметры), то для этого есть файл {{path|/etc/mgetty+sendfax/mgetty.config}}. Здесь вы можете задать как параметры, общие для всех портов, так и индивидуальные параметры линий. Подробности (а так же множество другой информации по последовательному входу) можно уточнить в полном руководстве — {{cmd|info mgetty}}.<br />
<br />
== Проверка ==<br />
Для проверки надо присоединить к только что настроенному порту кабель (COM2USB или DB-9 «мама-мама», для соединения с другим компьютером, либо другие кабеля, для другого оборудования), запустить терминальную программу ('''cu''', '''minicom''', '''cutecom'''), указать ей параметры соединения — порт (на машине откуда соединяемся) и скорость (указанную при запуске mgetty) и дать команду на соединение. В случае успеха на экран ничего не выводится — надо попробовать нажать несколько буквенно-цифовых (не функциональных) клавиш, чтобы mgetty распознал, что его зовут. Если всё хорошо — mgetty откликнется приглашением '''login:'''. Можно вводить имя пользователя и пароль, как обычно. Заметьте, что по умолчанию ALT Linux не пускает пользователя '''root''' через последовательные порты. Вы можете это изменить, поправив файл {{path|/etc/securetty}}.<br />
<br />
== GRUB и последовательный порт ==<br />
Может случиться так, что до входа в систему дело не дойдёт из-за неправильно настроенной загрузки. Существует способ взаимодействовать с загрузчиком GRUB по последовательному порту. Для этого в файл /boot/grub/menu.lst (или /boot/grub/grub.conf, смотря как у вас) нужно записать:<br />
<pre><br />
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1<br />
terminal --timeout=30 console serial<br />
</pre><br />
При этом во время загрузки GRUB 30 секунд будет выводить и на VGA-консоль и в последовательный порт сообщение "press any key". Откуда поступит первое нажатие клавиши, та консоль и будет считаться рабочей. Туда выведется стандартное меню GRUB, в котором обычно можно выбрать ядро или отредактировать параметры, передаваемые ядру.<br />
<br />
Есть ещё один приём, рассказанный мне Сергеем Власовым. Не знаю, актуален ли он ещё, но мне в своё время помог. Если GRUB по последовательному порту работает нормально, но ядро, несмотря на параметр console=ttyS0, при загрузке не выводит ни одного сообщения, то может помочь специальное значение параметра console (привожу блок конфига целиком):<br />
<pre><br />
title ALTLinux Sisyphus<br />
root (hd0,0)<br />
kernel /vmlinuz-smp ro root=/dev/hda2 console=uart,io,0x3f8,115200n8 fastboot<br />
initrd /initrd-smp.img<br />
</pre><br />
<br />
==Systemd==<br />
Всё вышеизложенное касается настройки для классического '''SySV-init'''. В случае использования '''systemd''' достаточно дать от суперпользователя команду {{cmd|systemctl enable getty@ttyS0}} (аналогично для других консолей). Это запустит agetty, требуемый systemd, при загрузке. Заметьте, что файл {{path|/etc/securetty}} действует и тут. Параметры запуска getty можно посмотреть в {{path|/lib/systemd/system/getty@.service}}.<br />
<br />
[[Категория:Admin]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Etcnet_QoS&diff=18945Etcnet QoS2011-05-21T01:51:05Z<p>EvgeniiTerechkov: /* Пример 2 */ - маркировка должна идти через mangle/POSTROUTING, а не PREROUTING</p>
<hr />
<div>[[Категория:Admin]]<br />
{{викифицировать}}<br />
<br />
== Настройка QoS в [[etcnet|/etc/net]] (редакция 3) ==<br />
<br />
=== Общая теория ===<br />
QoS — quality of service (качество обслуживания) — общий термин, обозначающий технологии управления скоростными и временными характеристиками пропускаемого трафика.<br />
Конфигурация выполняется для каждого интерфейса отдельно. Для этого создаётся древовидная структура, состоящая из дисциплин очередей и классов. Корень этой структуры — так называемая корневая дисциплина очереди, которая является обязательным атрибутом интерфейса. Увидеть её можно так:<br />
<pre>$ /sbin/ip ad sh dev eth0<br />
3: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000<br />
link/ether 4c:00:10:3b:3e:f0 brd ff:ff:ff:ff:ff:ff<br />
inet 10.1.1.175/23 brd 10.1.1.255 scope global eth0</pre><br />
В данном случае корневая дисциплина очереди — pfifo_fast (она назначается по умолчанию). Иерархия очередей и классов определяет, как именно будут обрабатываться исходящие с интерфейса пакеты: номинальная скорость, параметры допустимых кратковременных всплесков, правила переупорядочивания пакетов внутри очередей, условия взаимного заимствования полосы пропускания между объектами на одном уровне иерархии и прочие параметры, зависящие от конкретной используемой структуры. «Перпендикулярно» этому дереву существует набор фильтров, которые описывают прохождение пакетов по структуре. Наиболее популярными являются дисциплины очередей CBQ (class based queueing) и HTB (hierarchical token bucket).<br />
Дерево CBQ формируется по довольно простым принципам:<br />
* пропускная способность корневой дисциплины очереди интерфейса равна физической пропускной способности интерфейса<br />
* классы могут иметь своим родителем только дисциплину очереди<br />
* решение о направлении пакета в класс принимается в дисциплине очереди с помощью фильтров<br />
* если вам необходимо разделить класс на подклассы, то создайте вложенную дисциплину очереди, а далее делите её<br />
Дерево HTB строится ещё проще:<br />
* классы могут содержать другие классы напрямую, без промежуточных дисциплин очередей<br />
<br />
=== Описание реализации ===<br />
Общая идея реализации в /etc/net заключается в том, что иерархия объектов QoS представляется в виде дерева каталогов и файлов. Конфигурация начинается с каталога <tt>qos</tt>, располагающегося в каталоге конфигурации интерфейса. Далее в нём могут содержаться другие каталоги, которые представляют либо дисциплины очереди, либо классы. В каталогах дисциплин присутствуют файлы с названием <tt>qdisc</tt>, а в каталогах с классами — файлы <tt>class</tt>. Эти файлы содержат параметры дисциплин и классов. Фильтры располагаются в файлах с названием <tt>filter</tt>.<br />
<br />
=== Пример 1 ===<br />
Рассмотрим пример конфигурации HTB, поставляемый с /etc/net: [http://etcnet.org/examples/QoS-HTB-user-guide/1/qdisc http://etcnet.org/examples/QoS-HTB-user-guide/1/qdisc]<br />
Так как дерево начинается с корневой дисциплины, то в каталоге <tt>qos</tt> будет содержаться только один каталог <tt>qos/1</tt>, а в нём будет содержаться файл <tt>qdisc</tt>:<br />
<pre>[DIR] 1/ 22-Aug-2005 14:13 - <br />
[TXT] qdisc 18-Mar-2005 11:06 1k</pre><br />
Корневая дисциплина здесь имеет номер 1. Параметры корневой дисциплины простые: <tt>htb default 12</tt>. Корневая дисциплина кроме своих параметров содержит один класс в каталоге <tt>qos/1/1</tt>. Полным именем объекта будет 1:1. Левое число отсутствует в названии каталога, так как оно всегда равно идентификатору очереди. В файле <tt>qos/1/1/class</tt> содержатся параметры класса: <tt>htb rate 100kbps ceil 100kbps</tt>. Кроме этого, в каталогах <tt>qos/1/1/2</tt> и <tt>qos/1/1/12</tt> определено ещё два класса: 1:2 и 1:12. В файле <tt>qos/1/1/extra</tt> содержатся параметры, общие для классов 1:2 и 1:12: <tt>htb ceil 100kbps</tt>. Это необязательный файл, можно было бы поместить эти параметры в файлы <tt>qos/1/1/2/class</tt> и <tt>qos/1/1/12/class</tt>. Если у вас много классов на одном уровне, то файл <tt>extra</tt> поможет вынести общую часть «за скобки».<br />
Класс 1:12 пуст, а класс 1:2 содержит 1:10 и 1:11. В файлах <tt>qos/1/1/2/10/filter</tt> и <tt>qos/1/1/2/11/filter</tt> содержатся описания фильтров по одному в каждой строке. Местоположение файла <tt>filter</tt> определяет, куда будут направлены пакеты, которые ему удовлетворяют. Для класса 1:10 будет использован один фильтр <tt>protocol ip prio 1 u32 match ip src 1.2.3.4 match ip dport 80 0xffff</tt>, что соответствует исходящему HTTP-трафику с адреса 1.2.3.4, а для класса 1:11 будет использован фильтр <tt>protocol ip prio 1 u32 match ip src 1.2.3.4</tt>, что соответствует всему исходящему трафику с адреса 1.2.3.4. Файлы <tt>class</tt> классов 1:10 и 1:11 содержат соответственно <tt>rate 30kbps</tt> и <tt>rate 10kbps</tt>.<br />
<br />
=== Пример 2 ===<br />
1. Я советую, поставив пакет etcnet, сначала спрятать куда-нибудь все каталоги интерфейсов из <tt>/etc/net/ifaces</tt> (кроме <tt>lo</tt>, <tt>default</tt> и <tt>unknown</tt>) и запустить <tt>/etc/net/scripts/initconf</tt>. Его выдачу сохранить и на основании этой выдачи организовать файл <tt>/etc/net/iftab</tt>, который определит логические имена интерфейсов. Например, одну сетевую карту можно из eth0 переименовать в соответствии с её макадресом в wan, другую — в lan. Я для себя использовал вместо wan имя провайдера (comcast), а вместо lan — придуманное самим имя локального домена своей сети 192.168.10.0/24 (menlo). Ну и дальше буду их использовать, чтобы не ошибиться где-нибудь заменяя их на более нейтральные типа wan и lan. Далее создайте каталоги с именами определёнными в таблице <tt>/etc/net/iftab</tt>, внутри <tt>/etc/ifaces</tt>. Я создал <tt>/etc/net/ifaces/comcast</tt> и <tt>/etc/net/ifaces/menlo</tt>. И положил туда нужные мне файлы <tt>options</tt>. Для внешней сети <tt>comcast</tt> достаточно определить TYPE и BOOTPROTO, я добавил строчку MODULE как того рекомендовал initconf:<br />
<pre># cat <<EOF >/etc/net/ifaces/comcast/options<br />
TYPE=eth<br />
BOOTPROTO=dhcp<br />
MODULE=tulip<br />
EOF</pre><br />
Для интерфейса локальной сети menlo адрес задан статически, так что там кроме файла options ещё нужен файл ipv4address:<br />
<pre># cat <<EOF >/etc/net/ifaces/menlo/options<br />
TYPE=eth<br />
BOOTPROTO=static<br />
MODULE=natsemi<br />
EOF<br />
# echo "192.168.10.1/24" >/etc/net/ifaces/menlo/ipv4address</pre><br />
2. Дальше настраиваете ip-forwarding и nat masquarading. За первый отвечает строчка<br />
<pre>net.ipv4.ip_forward = 1</pre><br />
в файле <tt>/etc/net/sysctl.conf</tt>, в то время как другое делается добавлением строки<br />
<tt>masquerade out-iface comcast</tt><br />
в файл <tt>/etc/net/ifaces/default/fw/iptables/nat/POSTROUTING</tt>:<br />
<pre>echo "masquerade out-iface comcast" >>/etc/net/ifaces/default/fw/iptables/nat/POSTROUTING</pre><br />
После этого ваш раутер после # service network restart уже должен начать выполнять свою функцию разделения доступа в интернет.<br />
<br />
3. Далее я настраивал распознавание и маркирование пакетов, которым надо было обеспечить гарантированную ширину пропускания канала. Для меня это были два телефонных адаптера, которые не искажают звук только если им предоставлены 10 килобит в секунду. Эти адаптеры стоят в локальной сети и dhcp сервер по их мак-адресам даёт им статические адреса. Эти адреса я и использовал в качестве критерия для маркировки. Маркировка обеспечивается следующим образом:<br />
<pre>#cat <<EOF >/etc/net/ifaces/default/fw/iptables/mangle/POSTROUTING<br />
mark 21 if from 192.168.10.21 from-iface menlo<br />
mark 22 if from 192.168.10.5 from-iface menlo<br />
EOF</pre><br />
Мысль для себя на будущее: наверно можно было маркировать по мак-адресу, и тем самым избежать необходимости настраивать статические адреса выдаваемые dhcpd.<br />
<br />
4. Ну а теперь остаётся самое настроить qos htb для идущего наружу интерфейса comcast.<br />
<pre># # создаём дисциплину 1<br />
# mkdir -p /etc/net/ifaces/comcast/qos/1<br />
<br />
# # определяем что эта дисциплина - htb<br />
# # и её дефолтный класс для неклассифицированного траффика 77.<br />
# echo "htb default 77" >/etc/net/ifaces/comcast/qos/1/qdisc<br />
<br />
# # создаём корневой класс 1 (1:1)<br />
# mkdir /etc/net/ifaces/comcast/qos/1/1<br />
<br />
# # определяем ширину пропускания интерфейса (upload)<br />
# echo "htb rate 360kbit" >/etc/net/ifaces/comcast/qos/1/1/class<br />
<br />
# # организуем фильтр, направляющий весь траффик в класс 1:1<br />
# # !!!Этого фильтра нет в примерах пакета etcnet !!!<br />
# # !!!(по крайней мере для версии etcnet-0.9.3-alt3)!!!<br />
# # !!!Но он действительно нужен, без него трафик !!!<br />
# # !!! не проходит по вложенным классам !!!<br />
# echo "proto ip prio 1 u32 match ip src 0.0.0.0/0" >/etc/net/ifaces/comcast/qos/1/1/filter<br />
<br />
# # создаём класс для первого телефонного адаптера<br />
# mkdir /etc/net/ifaces/comcast/qos/1/1/21/<br />
<br />
# # определяем для него ширину пропускания 80 килобит/сек.<br />
# echo "htb rate 80kbit" >/etc/net/ifaces/comcast/qos/1/1/21/class<br />
<br />
# # задаём фильтр этого класса, отбирающий для него пакеты с маркой "21"<br />
# echo "protocol ip prio 1 handle 21 fw" >/etc/net/ifaces/comcast/qos/1/1/21/filter<br />
<br />
# # создаём класс для второго телефонного адаптера<br />
# mkdir /etc/net/ifaces/comcast/qos/1/1/22/<br />
<br />
# # определяем для него ширину пропускания 80 килобит/сек.<br />
# echo "htb rate 80kbit" >/etc/net/ifaces/comcast/qos/1/1/22/class<br />
<br />
# # задаём фильтр этого класса, отбирающий для него пакеты с маркой "22"<br />
# echo "protocol ip prio 1 handle 22 fw" >/etc/net/ifaces/comcast/qos/1/1/22/filter<br />
<br />
<br />
# # создаём класс для дефолтного траффика:<br />
# mkdir /etc/net/ifaces/comcast/qos/1/1/77/<br />
<br />
# # определяем для него ширину пропускания 200 (= 360 - (80 + 80)) килобит/сек.<br />
# # с возможностью заимствования неиспользуемого в данный момент траффика других классов<br />
# # вплоть до 360kbit, то есть полной ширины исходящего канала<br />
# echo "htb rate 200kbit ceil 360kbit" >/etc/net/ifaces/comcast/qos/1/1/77/class</pre><br />
<br />
Теперь телефонам будет предоставляться 80 килобит в секунду как только они того потребуют, а если они недоиспользуют эти 80kbit, всё оставшееся будет предоставляться другим соединениям.<br />
<br />
P.S Большое спасибо Денису Овсиенко за то, что объяснил, как правильно организовать иерархию фильтров, чтобы эта конструкция заработала.<br />
<br />
=== Утилиты ===<br />
* С 11/07/2006 в contrib находится скрипт eqos (по аналогии с efw), который предназначен для ручного управления [[etcnet/qos|qos]] и умеет следующее:<br />
: <pre>/etc/net QoS handler<br />
Usage: ./eqos [iface] <action> [action options]<br />
<br />
iface - real interface name ('eth0' by default) or 'all' for all interfaces<br />
action - 'start','stop','restart','show|list','stat|stats'<br />
<br />
start - start QoS for given interface<br />
stop - stop QoS for given interface<br />
restart - equivalent to 'stop' then 'start'<br />
show - list qdiscs, classes or filters on given interface<br />
list - same as 'show'<br />
stat - print statistics for qdiscs, classes or filters on given interface<br />
stats - same as 'stat'<br />
<br />
Options for actions 'show' or 'list' and 'stat' or 'stats':<br />
- one of 'qdisc' (by default), 'class' or 'filter'<br />
- component specific options (e.g. 'parent')</pre><br />
<br />
<br />
{{Category navigation|title=etcnet|category=etcnet}}</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=CreateMdRAID1onLiveSystem&diff=18818CreateMdRAID1onLiveSystem2011-05-09T14:07:38Z<p>EvgeniiTerechkov: /* grub2 */ - грубу нужно пересканировать карту устройств</p>
<hr />
<div>[[Категория:Admin]]<br />
[[Категория:HOWTO]]<br />
<br />
== Создание загрузочного программного RAID1 с помощью средств ядра 2.6 на работающей системе ==<br />
<br />
<br />
=== Исходные данные ===<br />
* Два HDD<br />
* Необходимость создания md RAID1<br />
* Ядро 2.6<br />
* Система проинсталлирована на HDD (<tt>/dev/sda</tt>), и он имеет наименьший размер из двух доступных.<br />
<br />
<br />
===Подготовка массивов===<br />
* Создаем такие же разделы с такими же размерами на втором HDD:<br />
<pre>sfdisk -d /dev/sda | sfdisk /dev/sdb</pre><br />
<br />
* Запускаем <tt>fdisk /dev/sdb</tt> и проставляем корневому разделу тип FD (Linux RAID Autodetect), иначе загрузиться будет проблематично<br />
<br />
* Создаем на каждом разделе degraded md RAID1 (нумерацию удобно начинать с единицы, по номерам разделов на HDD). Для корневого раздела создаём массив с версией metadata 0.90:<br />
mdadm -Cv /dev/md1 -b internal --level=1 --raid-devices=2 missing /dev/sdb1 --metadata 0.90<br />
mdadm -Cv /dev/mdX -b internal --level=1 --raid-devices=2 missing /dev/sdbX<br />
и т. д.<br><br />
NB: '''-b internal''' включает отслеживание использования блоков на массиве, то есть при ресинхронизации массива будет синкаться не весь массив целиком, а только блоки с данными.<br />
<br />
* Создаем на каждом массиве нужную файловую систему:<br />
<pre>mkfs.ext3 -E stride=16 /dev/md1</pre><br />
и т. д.<br><br />
NB: для достижения более высокой производительности можно использовать опцию mkfs.ext3 '''-E stride=''', то есть подогнать ФС под размер страйпа. stride=stripe/block-size. То есть в нашем случае это 64/4=16<br />
<br><br />
См. [http://wiki.centos.org/HowTos/Disk_Optimization http://wiki.centos.org/HowTos/Disk_Optimization]<br />
<br />
* swap тоже создаём на raid-массиве. Если диск вылетит, системе не поплохеет внезапно без откушенного куска виртулаьной памяти.<br />
<pre>mkswap /dev/mdX</pre><br />
<br />
* Создаем новый образ initrd:<br />
mkinitrd --with-raid --with raid1 /boot/initrd-`uname -r`-raid1.img `uname -r`<br />
либо<br />
make-initrd<br />
<br />
<br />
===Копирование данных===<br />
* Монтируем новый root (который <tt>/dev/mdX</tt>) куда-нибудь в <tt>/mnt/raid1/root</tt>, создаем в нем нужные каталоги из нашего текущего корня, далее в них монтируем новые разделы, если такие есть (то бишь, создаем <tt>/mnt/raid1/root/var</tt>, к нему монтируем какой-нибудь <tt>/dev/md6</tt>, уже после этого создаем <tt>/mnt/raid1/root/var/log</tt> и к нему уже монтируем какой-нибудь <tt>/dev/md7</tt>)<br />
<br />
* Копируем все файлы с текущего HDD на новый (способов много, cp -ax, cpio, rsync и т.д), не забыл пропустить <tt>/proc</tt> и <tt>/sys</tt> (но создав их в новом root). Пример с rsync:<br />
<pre>#!/bin/sh<br />
<br />
renice 19 -p $$ ||:<br />
ionice -c3 -p$$ ||:<br />
<br />
rsync -vaPHx --delete --delete-after --numeric-ids / /mnt/newroot/<br />
rsync -vaPHx --delete --delete-after --numeric-ids /usr /mnt/newroot/<br />
rsync -vaPHx --delete --delete-after --numeric-ids /var /mnt/newroot/</pre><br />
''Предполагается, что у нас на отдельные разделы вынесены /, /usr, /var. Применён ключ '''-x''' у rsync, чтобы он не выходил за границы одной файловой системы. Полезно, так как у нас могут быть примонтированы разные левые ресурсы куда-нибудь в /mnt, и ещё используются bind-mounts.'' Для уменьшения downtime системы можно выполнить такой rsync два раза — на живой системе и потом перейдя в '''init 1'''<br />
<br />
<br />
===Установка загрузчика===<br />
* Прокидываем в новое окружении /proc, /sys, /dev<br />
<pre>#!/bin/sh<br />
mount --bind /proc /mnt/newroot/proc<br />
mount --bind /sys /mnt/newroot/sys<br />
mount --bind /dev /mnt/newroot/dev<br />
</pre><br />
* Делаем <tt>chroot /mnt/raid1/root</tt><br />
* Правим <tt>/etc/fstab</tt>, изменяя все разделы <tt>/dev/sdaX</tt> на массивы <tt>/dev/mdX</tt><br />
<br />
====grub2====<br />
(продолжаем уже не в chroot-е)<br />
grub-install --recheck /dev/sdb # На sda загрузчик уже есть, чтобы система загружалась без первого диска, нужен ещё и на sdb<br />
grub-mkconfig -o /boot/grub/grub.cfg<br />
См. [[grub|статью про grub2]]<br />
<br />
====grub1====<br />
/boot/grub/menu.lst:<br />
<pre># Boot automatically after 3 secs.<br />
timeout 3<br />
<br />
# By default, boot the first entry.<br />
default 2614-vs26-smp-raid1 (hd0,0)<br />
<br />
title 2614-vs26-smp-raid1 (hd0,0)<br />
root (hd0,0)<br />
kernel (hd0,0)/vmlinuz-2.6.14-vs26-smp-alt5 root=/dev/md2 vga=normal<br />
initrd (hd0,0)/initrd-2.6.14-vs26-smp-alt5-raid1.img<br />
<br />
title 2614-vs26-smp-raid1 (hd1,0)<br />
root (hd1,0)<br />
kernel (hd1,0)/vmlinuz-2.6.14-vs26-smp-alt5 root=/dev/md2 vga=normal<br />
initrd (hd1,0)/initrd-2.6.14-vs26-smp-alt5-raid1.img</pre><br />
<br />
Инсталлируем grub:<br />
<pre>#!/bin/sh<br />
<br />
grub --batch <<EOF<br />
device (hd0) /dev/sda<br />
root (hd0,0) # (0 - это тот раздел, где у вас /boot, обычно /dev/sdX1, в grub-е просто нумерация с 0)<br />
setup (hd0)<br />
device (hd0) /dev/sdb<br />
root (hd0,0)<br />
setup (hd0)<br />
quit<br />
EOF</pre><br />
<br />
====lilo====<br />
lilo.conf:<br />
raid-extra-boot="mbr-only"<br />
boot="/dev/md1"<br />
<br />
<br />
===Перезагрузка с raid===<br />
* Отмонтируем все и перегружается. Если все правильно, то вы должны загрузиться с md raid1 массивов, которые пока располагаются на втором HDD<br />
<br />
* Если все работает, то запускаем <tt>fdisk /dev/sda</tt> и проставляем корневому разделу тип FD (Linux RAID Auto)<br />
<br />
* Далее делаем для каждого raid-массива:<br />
<pre>mdadm /dev/md1 --add /dev/sda1</pre><br />
и т. д.<br />
<br />
* После этого регулярно поглядываем в <tt>/proc/mdstat</tt>, нам нужно дождаться, когда ядро синхронизирует все массивы (при этом в <tt>/proc/mdstat</tt> исчезнут все упоминания о прогрессе синхронизации)<br />
<br />
* Перегружаемся и, если все хорошо, прописываем в <tt>/etc/mdadm.conf</tt> что-то вроде:<br />
<pre>MAILADDR root<br />
PROGRAM /usr/sbin/mdadm-syslog-events<br />
DEVICE partitions<br />
ARRAY /dev/md1 devices=/dev/sda1,/dev/sdb1<br />
ARRAY /dev/md2 devices=/dev/sda2,/dev/sdb2</pre><br />
Записи ARRAY можно сформировать автоматически:<br />
mdadm --examine --scan<br />
<br />
* Включаем сервис mdadm<br />
<br />
* Пробуем отключить каждый HDD по очереди и загрузиться.<br />
<br />
<br />
=== Разрешение проблем ===<br />
* md-массивы с версией метаданных > 0.90 не стартуют при загрузке, но <tt>mdadm --assemble --scan</tt> работает. Наблюдается ошибка:<br />
Error returned from evms_commit_changes(): No such device<br />
Из-за ошибки в evms из rc.sysinit не производится вызов raidstart, в котором находится вызов mdadm. Если evms не используется, можно прописать в опции init <tt>noevms</tt>.<br />
<br />
* Не удаётся установить lilo<br />
** <pre>Fatal: Unusual RAID bios device code: 0xFF</pre> lilo не хочет ставиться на неполный масив. В таком случае ставим lilo в 2 этапа - вначале только на sdb, а после дополнения масива и синхронизации - на mdX<br />
** <pre>Fatal: Unusual RAID bios device code: 0xFF</pre> либо<br />
** <pre>Fatal: Linux experimental device 0xfd00 needs to be defined.</pre> Способ решение проблемы точно не известен. FIXME. Как вариант, можно поставить lilo из старой системы:<br />
lilo -C /mnt/newroot/etc/lilo.conf<br />
<br />
* Загрузка останавливается на этапе initrd<br />
** сообщение<br />
udevd: running netdev handler<br />
сопровождающееся длительной задержкой, с последующими ошибками<br />
initrd: udev: ERROR: unable to mount root<br />
initrd: stage 'udev' failed<br />
Причина: <br />
* не перегенерировано initrd, либо была использована версия make-initrd, содержащая ошибку. Убедитесь, что вы используете версию пакета make-initrd не ниже 0.3.9-alt1<br />
* используется загрузчик lilo. Решение: воспользоваться grub2<br />
<br />
* В некоторых случаях устройства <tt>/dev/md*</tt> будут не доступны. В данном случае могут помочь:<br />
<pre>service udevd stop</pre><br />
и/или<br />
<pre>/lib/mkinitd/busybox raidautorun /dev/mdX</pre><br />
<br />
* Скорость синхронизации массивов очень низкая<br />
<pre><br />
echo 200000 > /proc/sys/dev/raid/speed_limit_max<br />
echo 200000 > /proc/sys/dev/raid/speed_limit_min<br />
</pre></div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=CreateMdRAID1onLiveSystem&diff=18817CreateMdRAID1onLiveSystem2011-05-09T14:06:07Z<p>EvgeniiTerechkov: /* grub2 */ - комментарии для понятности</p>
<hr />
<div>[[Категория:Admin]]<br />
[[Категория:HOWTO]]<br />
<br />
== Создание загрузочного программного RAID1 с помощью средств ядра 2.6 на работающей системе ==<br />
<br />
<br />
=== Исходные данные ===<br />
* Два HDD<br />
* Необходимость создания md RAID1<br />
* Ядро 2.6<br />
* Система проинсталлирована на HDD (<tt>/dev/sda</tt>), и он имеет наименьший размер из двух доступных.<br />
<br />
<br />
===Подготовка массивов===<br />
* Создаем такие же разделы с такими же размерами на втором HDD:<br />
<pre>sfdisk -d /dev/sda | sfdisk /dev/sdb</pre><br />
<br />
* Запускаем <tt>fdisk /dev/sdb</tt> и проставляем корневому разделу тип FD (Linux RAID Autodetect), иначе загрузиться будет проблематично<br />
<br />
* Создаем на каждом разделе degraded md RAID1 (нумерацию удобно начинать с единицы, по номерам разделов на HDD). Для корневого раздела создаём массив с версией metadata 0.90:<br />
mdadm -Cv /dev/md1 -b internal --level=1 --raid-devices=2 missing /dev/sdb1 --metadata 0.90<br />
mdadm -Cv /dev/mdX -b internal --level=1 --raid-devices=2 missing /dev/sdbX<br />
и т. д.<br><br />
NB: '''-b internal''' включает отслеживание использования блоков на массиве, то есть при ресинхронизации массива будет синкаться не весь массив целиком, а только блоки с данными.<br />
<br />
* Создаем на каждом массиве нужную файловую систему:<br />
<pre>mkfs.ext3 -E stride=16 /dev/md1</pre><br />
и т. д.<br><br />
NB: для достижения более высокой производительности можно использовать опцию mkfs.ext3 '''-E stride=''', то есть подогнать ФС под размер страйпа. stride=stripe/block-size. То есть в нашем случае это 64/4=16<br />
<br><br />
См. [http://wiki.centos.org/HowTos/Disk_Optimization http://wiki.centos.org/HowTos/Disk_Optimization]<br />
<br />
* swap тоже создаём на raid-массиве. Если диск вылетит, системе не поплохеет внезапно без откушенного куска виртулаьной памяти.<br />
<pre>mkswap /dev/mdX</pre><br />
<br />
* Создаем новый образ initrd:<br />
mkinitrd --with-raid --with raid1 /boot/initrd-`uname -r`-raid1.img `uname -r`<br />
либо<br />
make-initrd<br />
<br />
<br />
===Копирование данных===<br />
* Монтируем новый root (который <tt>/dev/mdX</tt>) куда-нибудь в <tt>/mnt/raid1/root</tt>, создаем в нем нужные каталоги из нашего текущего корня, далее в них монтируем новые разделы, если такие есть (то бишь, создаем <tt>/mnt/raid1/root/var</tt>, к нему монтируем какой-нибудь <tt>/dev/md6</tt>, уже после этого создаем <tt>/mnt/raid1/root/var/log</tt> и к нему уже монтируем какой-нибудь <tt>/dev/md7</tt>)<br />
<br />
* Копируем все файлы с текущего HDD на новый (способов много, cp -ax, cpio, rsync и т.д), не забыл пропустить <tt>/proc</tt> и <tt>/sys</tt> (но создав их в новом root). Пример с rsync:<br />
<pre>#!/bin/sh<br />
<br />
renice 19 -p $$ ||:<br />
ionice -c3 -p$$ ||:<br />
<br />
rsync -vaPHx --delete --delete-after --numeric-ids / /mnt/newroot/<br />
rsync -vaPHx --delete --delete-after --numeric-ids /usr /mnt/newroot/<br />
rsync -vaPHx --delete --delete-after --numeric-ids /var /mnt/newroot/</pre><br />
''Предполагается, что у нас на отдельные разделы вынесены /, /usr, /var. Применён ключ '''-x''' у rsync, чтобы он не выходил за границы одной файловой системы. Полезно, так как у нас могут быть примонтированы разные левые ресурсы куда-нибудь в /mnt, и ещё используются bind-mounts.'' Для уменьшения downtime системы можно выполнить такой rsync два раза — на живой системе и потом перейдя в '''init 1'''<br />
<br />
<br />
===Установка загрузчика===<br />
* Прокидываем в новое окружении /proc, /sys, /dev<br />
<pre>#!/bin/sh<br />
mount --bind /proc /mnt/newroot/proc<br />
mount --bind /sys /mnt/newroot/sys<br />
mount --bind /dev /mnt/newroot/dev<br />
</pre><br />
* Делаем <tt>chroot /mnt/raid1/root</tt><br />
* Правим <tt>/etc/fstab</tt>, изменяя все разделы <tt>/dev/sdaX</tt> на массивы <tt>/dev/mdX</tt><br />
<br />
====grub2====<br />
(продолжаем уже не в chroot-е)<br />
grub-install /dev/sdb # На sda загрузчик уже есть, чтобы система загружалась без первого диска, нужен ещё и на sdb<br />
grub-mkconfig -o /boot/grub/grub.cfg<br />
См. [[grub|статью про grub2]]<br />
<br />
====grub1====<br />
/boot/grub/menu.lst:<br />
<pre># Boot automatically after 3 secs.<br />
timeout 3<br />
<br />
# By default, boot the first entry.<br />
default 2614-vs26-smp-raid1 (hd0,0)<br />
<br />
title 2614-vs26-smp-raid1 (hd0,0)<br />
root (hd0,0)<br />
kernel (hd0,0)/vmlinuz-2.6.14-vs26-smp-alt5 root=/dev/md2 vga=normal<br />
initrd (hd0,0)/initrd-2.6.14-vs26-smp-alt5-raid1.img<br />
<br />
title 2614-vs26-smp-raid1 (hd1,0)<br />
root (hd1,0)<br />
kernel (hd1,0)/vmlinuz-2.6.14-vs26-smp-alt5 root=/dev/md2 vga=normal<br />
initrd (hd1,0)/initrd-2.6.14-vs26-smp-alt5-raid1.img</pre><br />
<br />
Инсталлируем grub:<br />
<pre>#!/bin/sh<br />
<br />
grub --batch <<EOF<br />
device (hd0) /dev/sda<br />
root (hd0,0) # (0 - это тот раздел, где у вас /boot, обычно /dev/sdX1, в grub-е просто нумерация с 0)<br />
setup (hd0)<br />
device (hd0) /dev/sdb<br />
root (hd0,0)<br />
setup (hd0)<br />
quit<br />
EOF</pre><br />
<br />
====lilo====<br />
lilo.conf:<br />
raid-extra-boot="mbr-only"<br />
boot="/dev/md1"<br />
<br />
<br />
===Перезагрузка с raid===<br />
* Отмонтируем все и перегружается. Если все правильно, то вы должны загрузиться с md raid1 массивов, которые пока располагаются на втором HDD<br />
<br />
* Если все работает, то запускаем <tt>fdisk /dev/sda</tt> и проставляем корневому разделу тип FD (Linux RAID Auto)<br />
<br />
* Далее делаем для каждого raid-массива:<br />
<pre>mdadm /dev/md1 --add /dev/sda1</pre><br />
и т. д.<br />
<br />
* После этого регулярно поглядываем в <tt>/proc/mdstat</tt>, нам нужно дождаться, когда ядро синхронизирует все массивы (при этом в <tt>/proc/mdstat</tt> исчезнут все упоминания о прогрессе синхронизации)<br />
<br />
* Перегружаемся и, если все хорошо, прописываем в <tt>/etc/mdadm.conf</tt> что-то вроде:<br />
<pre>MAILADDR root<br />
PROGRAM /usr/sbin/mdadm-syslog-events<br />
DEVICE partitions<br />
ARRAY /dev/md1 devices=/dev/sda1,/dev/sdb1<br />
ARRAY /dev/md2 devices=/dev/sda2,/dev/sdb2</pre><br />
Записи ARRAY можно сформировать автоматически:<br />
mdadm --examine --scan<br />
<br />
* Включаем сервис mdadm<br />
<br />
* Пробуем отключить каждый HDD по очереди и загрузиться.<br />
<br />
<br />
=== Разрешение проблем ===<br />
* md-массивы с версией метаданных > 0.90 не стартуют при загрузке, но <tt>mdadm --assemble --scan</tt> работает. Наблюдается ошибка:<br />
Error returned from evms_commit_changes(): No such device<br />
Из-за ошибки в evms из rc.sysinit не производится вызов raidstart, в котором находится вызов mdadm. Если evms не используется, можно прописать в опции init <tt>noevms</tt>.<br />
<br />
* Не удаётся установить lilo<br />
** <pre>Fatal: Unusual RAID bios device code: 0xFF</pre> lilo не хочет ставиться на неполный масив. В таком случае ставим lilo в 2 этапа - вначале только на sdb, а после дополнения масива и синхронизации - на mdX<br />
** <pre>Fatal: Unusual RAID bios device code: 0xFF</pre> либо<br />
** <pre>Fatal: Linux experimental device 0xfd00 needs to be defined.</pre> Способ решение проблемы точно не известен. FIXME. Как вариант, можно поставить lilo из старой системы:<br />
lilo -C /mnt/newroot/etc/lilo.conf<br />
<br />
* Загрузка останавливается на этапе initrd<br />
** сообщение<br />
udevd: running netdev handler<br />
сопровождающееся длительной задержкой, с последующими ошибками<br />
initrd: udev: ERROR: unable to mount root<br />
initrd: stage 'udev' failed<br />
Причина: <br />
* не перегенерировано initrd, либо была использована версия make-initrd, содержащая ошибку. Убедитесь, что вы используете версию пакета make-initrd не ниже 0.3.9-alt1<br />
* используется загрузчик lilo. Решение: воспользоваться grub2<br />
<br />
* В некоторых случаях устройства <tt>/dev/md*</tt> будут не доступны. В данном случае могут помочь:<br />
<pre>service udevd stop</pre><br />
и/или<br />
<pre>/lib/mkinitd/busybox raidautorun /dev/mdX</pre><br />
<br />
* Скорость синхронизации массивов очень низкая<br />
<pre><br />
echo 200000 > /proc/sys/dev/raid/speed_limit_max<br />
echo 200000 > /proc/sys/dev/raid/speed_limit_min<br />
</pre></div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Systemd&diff=17744Systemd2011-01-29T05:04:07Z<p>EvgeniiTerechkov: grub-mkconfig</p>
<hr />
<div>[[Категория:Admin]]<br />
<br />
Благодаря стараниям Алексея Шабалина, для ALT Linux [http://lists.altlinux.org/pipermail/sisyphus/2011-January/351784.html собран systemd]. Решение, пока, сырое, поэтому в Сизиф он не попал, но пакеты уже доступны на ftp.altlinux.org. <br />
<br />
=== Установка systemd ===<br />
Для установки systemd надо проделать следующее:<br />
<br />
* Добавить в {{path|/etc/apt/sources.list}} такую запись<br />
<pre><br />
rpm ftp://ftp.altlinux.org/pub/people/shaba/systemd/ i586 hasher<br />
</pre><br />
<br />
* Обновить систему<br />
<source lang="bash"><br />
apt-get update && apt-get dist-upgrade<br />
</source><br />
<br />
После выполнения обновления, в системе должны быть установленные<br />
новые {{pkg|udev}}, {{pkg|ConsoleKit}}, {{pkg|dbus}}. <br />
<br />
* Теперь можно установить непосредственно systemd:<br />
<br />
<source lang="bash"><br />
apt-get install systemd systemd-units<br />
</source><br />
<br />
Что бы использовать systemd при загрузке, надо отредактировать {{path|/etc/sysconfig/grub2}} и<br />
привести строку GRUB_CMDLINE_LINUX_DEFAULT к такому виду:<br />
<br />
<pre><br />
GRUB_CMDLINE_LINUX_DEFAULT='panic=30 init=/bin/systemd'<br />
</pre><br />
<br />
После редактирования этого файла нужно вызвать:<br />
<br />
<source lang="bash">grub-mkconfig -o /boot/grub/grub.cfg</source><br />
<br />
Можно перезагружаться и пробовать.<br />
<br />
=== Отладка systemd ===<br />
* [https://fedoraproject.org/wiki/How_to_debug_Systemd_problems How to debug systemd problems]<br />
<br />
=== О systemd на русском языке ===<br />
* [http://wiki.opennet.ru/Systemd_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2 Systemd для администраторов]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D0%B4%D0%B8%D1%81%D0%BA%D0%B0%D0%BC%D0%B8&diff=17633Работа с дисками2011-01-22T10:29:25Z<p>EvgeniiTerechkov: /* Работа с дисками */ в новых ядрах диски обычно sd</p>
<hr />
<div>== Работа с дисками ==<br />
<br />
См. также [[Документация/ТестированиеКомпьютера|ТестированиеКомпьютера]]<br />
<br />
Не рекомендуется использовать программы fdisk/cfdisk для первичного разбиения диска, один из разделов в котором предназначен для загрузки Windows. Используйте parted.<br />
<br />
0. Создать загрузочную запись<br />
См. man ms-sys или sys в DOS/Win95/Win98 или fixboot в консоли восстановления [[Документация/Windows2000/XP/2003|2003]]<br />
<br />
1. Увидеть, что пишет система о дисках при загрузке <br />
# dmesg | grep sd<br />
или, на старых (< 2.6.18) ядрах<br />
# dmesg | grep hd <br />
<br />
2. Вывести перечень всех разделов и всех дисков <br />
# fdisk -l <br />
<br />
3. Полная информация о диске <br />
# hdparm -I /dev/sda<br />
<br />
4. Вывести информацию о состоянии диска <br />
# smartctl -a /dev/sda<br />
Запустить внутренний тест диска<br />
# smartctl -t short /dev/sda<br />
или<br />
# smartctl -t long /dev/sda<br />
<br />
5. Программа работы с разделами диска <br />
# parted /dev/sd? <br />
<br />
6. Программы восстановления потерянных разделов <br />
# testdisk (более user-friendly)<br />
# gpart (более могучая, но надо тщательно читать man)<br />
<br />
7. Графическая программа для работы с разделами диска <br />
$ qtparted <br />
<br />
8. Вывод температуры диска <br />
# hddtemp /dev/sda<br />
<br />
9. Простая программа работы с разделами диска <br />
# cfdisk <br />
<br />
10. Восстановление файлов на разделе ext2<br />
$ man recover<br />
<br />
Восстановление стёртых файлов с любых файловых систем - photorec из пакета testdisk.<br />
<br />
=== Таблица соответствия устройств ===<br />
<br />
Таблица соответствия IDE-устройств <br />
{| border="1"<br />
|-<br />
| Устройство<br />
| Подключение<br />
|-<br />
| /dev/hda<br />
| Master на IDE0 (Primary)<br />
|-<br />
| /dev/hdb<br />
| Slave на IDE0 (Primary)<br />
|-<br />
| /dev/hdc<br />
| Master на IDE1 (Secondary)<br />
|-<br />
| /dev/hdd<br />
| Slave на IDE1 (Secondary)<br />
|}<br />
<br />
Для SATA-устройств (так же как и для SCSI) чёткого порядка именования нет, устройствам выдаются имена sda,sdb,... в порядке их обнаружения системой.<br />
<br />
=== Как пользоваться smartctl ===<br />
<br />
# smartctl -a /dev/sda<br />
<br />
Смотрим на следующие параметры:<br />
<pre><br />
1 Raw_Read_Error_Rate 0x000b 100 100 051 Pre-fail Always - 11<br />
5 Reallocated_Sector_Ct 0x0033 051 051 010 Pre-fail Always - 101<br />
7 Seek_Error_Rate 0x000b 253 253 051 Pre-fail Always - 0<br />
197 Current_Pending_Sector 0x0033 253 253 010 Pre-fail Always - 0<br />
198 Offline_Uncorrectable 0x0031 253 253 010 Pre-fail Offline - 0<br />
200 Multi_Zone_Error_Rate 0x000b 100 100 051 Pre-fail Always - 0<br />
201 Soft_Read_Error_Rate 0x000b 100 100 051 Pre-fail Always - 2</pre><br />
<br />
Если вкратце, то это все означает, что у вашего диска есть <div style="display: inline; color: red;">проблемы</div> с поверхностью диска и часть секторов уже переназначена на запасные (параметр Reallocated_Sector_Count), а часть вообще потеряна (параметр Offline_Uncorrectable). Когда первый параметр достигнет нуля, есть большая вероятность появления bad секторов. Но эта вероятность есть и сейчас, поскольку нет 100% вероятности, что переназначенный сектор содержит ту же информацию, что и раньше. Я бы вам посоветовал озаботиться сохранением всех важных данных на более надежном носителе.<br />
<br />
Надо сказать, что диск в подобном состоянии вполне еще может послужит в качестве дискеты и выбрасывать его рано :):)<br />
<br />
* Dmitry (Mothlike) Marochko<br />
* Vitaly Lipatov<br />
<br />
=== Ссылки ===<br />
* [[РаботаСДисками/WD|Диски WD с сектором 4Кб]]<br />
* [http://pcjs.chat.ru/smartdoc.html Всё о S.M.A.R.T]<br />
* [http://www.comizdat.com/3/4/6/6170/6176/ "Как я оживлял Linux" - рассказ про использование gpart]<br />
* [http://linuxcenter.ru/lib/books/partitioning/ http://linuxcenter.ru/lib/books/partitioning/]<br />
* [http://offline.computerra.ru/ http://offline.computerra.ru/] - указать ссылку, когда сделают<br />
* [http://smartmontools.sourceforge.net/BadBlockHowTo.txt http://smartmontools.sourceforge.net/BadBlockHowTo.txt]<br />
<br />
=== [[Документация/FreeBSD|FreeBSD]] ===<br />
На [[Документация/FreeBSD|FreeBSD]] нет hdparm (smartctl есть). Вместо него используйте rawio, iozone, or bonnie.<br />
Также в базовой системе есть команда diskinfo.<br />
<br />
[[Category:Documentation]]<br />
[[category:admin]]<br />
[[category:использование оборудования]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=%D0%90%D0%BB%D1%8C%D1%82_%D0%9B%D0%B8%D0%BD%D1%83%D0%BA%D1%81_6.0_%D0%9A%D0%B5%D0%BD%D1%82%D0%B0%D0%B2%D1%80&diff=17026Альт Линукс 6.0 Кентавр2010-11-28T11:51:43Z<p>EvgeniiTerechkov: /* Список недоработок */ - Ковчег</p>
<hr />
<div>== Продукт ==<br />
<br />
{| style="color:black; background-color:#ffe0e0;" cellpadding="10" cellspacing="0" border="0"<br />
|-<br />
|style="border: 3px solid red"|'''Внимание!''' Данная версия находится в состоянии альфа-тестирования и не предназначена для работы<br />
|}<br />
<br />
Данная страница описывает планируемый выпуск LTS-продукта ALTLinux 6.0 "Centaurus" — серверного дистрибутива (типа Server-4.0, а не OfficeServer, с дополнительным функционалом в виде xorg+минимальный DE, средства разработки, ...). Благодаря выбору графической среды, дистрибутив можно использовать и для установки на рабочих станциях обычных пользователей.<br />
<br />
Основные преимущества:<br />
* Выбор разворачиваемых решений (например, веб-сервер и графическая среда) на этапе установки;<br />
* Возможность как развернуть интегрированное решение на базе LDAP, так и использовать только определённые службы без Alterator;<br />
* Установка серверных решений и решений конечных пользователей с одного диска.<br />
<br />
== Сроки выпуска ==<br />
''Все сроки примерные и будут уточняться.''<br />
<br />
* '''Альфа-версия''' — [http://lists.altlinux.org/pipermail/sisyphus/2010-April/346790.html 14 апреля 2010 г.]<br />
* '''Бета-версия''' — [http://lists.altlinux.org/pipermail/sisyphus/2010-September/349065.html 13 сентября 2010 г.]<br />
* '''Релиз-кандидат''' — конец октября 2010 г.<br />
<br />
== Требования к оборудованию ==<br />
<br />
* Минимальная установка (не выбирается ни одна группа ПО): '''1,1 ГБ'''<br />
* Максимальная установка (выбираются все группы ПО): '''5,2 ГБ'''<br />
<br />
== Скачать ==<br />
ftp://ftp.altlinux.org/pub/beta/centaurus/<br />
<br />
{|class="standard"<br />
!Образ<br />
!Объём<br />
!MD5<br />
|-<br />
|colspan="4" align="left"| '''Альт Линукс 5.9.9 Кентавр (20100716)'''<br />
|-<br />
|width=65%|Установочный DVD+LiveCD (i586). Скачать: [http://ftp.altlinux.org/pub/beta/centaurus/altlinux-5.9.9-20100716-centaurus-i586-ru-install-dvd5.iso HTTP] | [ftp://ftp.altlinux.org/pub/beta/centaurus/altlinux-5.9.9-20100716-centaurus-i586-ru-install-dvd5.iso FTP]<br />
|align="right"|<tt>3,4 ГБ</tt><br />
|<tt>a647db79b9e0d802702fe8483682fabc</tt><br />
|-<br />
|width=65%|Установочный DVD+LiveCD (x86_64). Скачать: [http://ftp.altlinux.org/pub/beta/centaurus/altlinux-5.9.9-20100716-centaurus-x86_64-ru-install-dvd5.iso HTTP] | [ftp://ftp.altlinux.org/pub/beta/centaurus/altlinux-5.9.9-20100716-centaurus-x86_64-ru-install-dvd5.iso FTP]<br />
|align="right"|<tt>3,4 ГБ</tt><br />
|<tt>c14b0a19711b886cd74ff6359f9c6263</tt><br />
|}<br />
<br />
== Изменения по сравнению с Пятой платформой ==<br />
<br />
* Установка дистрибутива через VNC <br />
* Настройка установки по VNC в модуле «Сервер сетевых установок»<br />
* Использование GRUB2 в качестве загрузчика<br />
* Выбор установки серверных служб, прикладных приложений и графической среды<br />
* Новая Samba 3.5.4<br />
* Гибридный диск (подходит для записи на DVD и на USB Flash)<br />
<br />
== Планируемые параметры ==<br />
* LTS сроком 5 лет на main<br />
* "Конструктор" в большей степени чем "Законченное решение"<br />
* (DevisOvsienko) возможность получить LAMP-сервер за один запуск <tt>apt-get install</tt>, не привлекая никаких технологий виртуализации<br />
* (EugeneProkopiev) возможность установки "минимальной системы" без альтератора, виртуализации, bind, dnsmasq... т.е. вынесение этого всего в группы пакетов.<br />
* (AntonFarygin) stage2 через vnc, serial console по требованию.<br />
* (AntonFarygin) kickstart<br />
* (MichaelBochkaryov) iSCSI для VM<br />
* ''to be continued''<br />
<br />
== Состав ==<br />
*Загрузчик: очень бы хотелось GRUB2 "из коробки"<br />
*Ядро: (основное) будет синхронизировано с RHEL6<br />
*SELinux<br />
*make-initrd<br />
*Виртуализация: KVM (+"облачная" управлялка типа [http://code.google.com/p/ganeti Ganeti]) и OVZ (который выйдет для ядра RHEL6) для "лёгкой" виртуализации.<br />
*xorg: синхронизированный с Ubuntu-10.04 LTS или RHEL6<br />
*DE: ??? (возможно, минимальный набор гнома).<br />
*Средства разработки: <br />
**GCC<br />
**Hasher<br />
**Python (список включаемых модулей/инструментов???)<br />
**Ruby/Rails (список включаемых модулей/инструментов???)<br />
**Java/J2EE (список включаемых модулей/инструментов??? - мне достаточно jdk и jsvc, очень полезен был бы groovy, если б не его ужасный список зависимостей)<br />
**Perl (список включаемых модулей/инструментов???)<br />
**...<br />
*Браузер?<br />
*drbd8.3<br />
*''to be continued''<br />
<br />
== Список ошибок и недоработок ==<br />
* [https://bugzilla.altlinux.org/show_bug.cgi?id=23155 Метабаг 23155 на bugzilla.altlinux.org]<br />
* В меню Gnome отсутствует значок для запуска Synaptic<br />
<br />
== Обсуждение ==<br />
* [http://forum.altlinux.org/index.php/topic,5988.new.html Тема обсуждения на форуме forum.altlinux.org]<br />
<br />
== Что бы ещё хотелось ==<br />
* Автоматический Regression testing (надо делать инфраструктуру)<br />
* Единый внешний вид для приложений разных тулкитов [http://docs.google.com/View?id=d4829g5_64hjz8kdc2#GTK_Clearlook_KDE]<br />
* Шрифт Droid<br />
* (RadikYusupov) Freenx-сервер<br />
* (MichaelBochkaryov) Ручка "разрешить snmp-мониторинг системы"<br />
* (MichaelShigorin) мониторинг -- monit+collectd "из коробки" (умеют агрегироваться)<br />
* Samba-3.3.4 и выше (поддержка включения клиентов Windows 7 в PDC на ALT 6.0 Центавр)<br />
* Контент фильтр для школ<br />
* Автоматическое создание 10 raid при установке<br />
* Автоматическое создание директорий, для каждого пользователя заведённого в LDAP, на сервере с доступом по SAMBA.<br />
<br />
== Известные недоработки ==<br />
<br />
=== На bugzilla.altlinux.org ===<br />
<br />
[https://bugzilla.altlinux.org/showdependencytree.cgi?id=23155&hide_resolved=1 23155: ALT Linux 6.0 Centaurus]<br />
<br />
=== Список недоработок ===<br />
<br />
* Не работает проверка оперативной памяти<br />
* Не подключаются автоматически найденные диски<br />
* Если установка «зависает» перед настройкой загрузчика, отключите в BIOS поддержку дисковода <!--* Загрузчик не поддерживает дискеты. --><br />
* При установке нельзя настроить оптимальный видеорежим который раньше в ALT 4/5 можно было настроить для lilo (0314, 0303).<br />
* Нет графического bootsplash<br />
* В меню загрузчика много дублирующихся пунктов (с версией ядер)<br />
* Нет ядра OVZ<br />
* В LiveCD в GNOME сообщается о недостатке свободного места на диске<br />
* Критическая ошибка установки с LiveCD: невозможно отмонтировать /media/altinux....<br />
* В alterator-net-eth исчезла информация о модели сетевых карт<br />
* Для FVWM требуется настроенная тема<br />
* Нет дизайна веб-интерфейса Alterator и indexhtml<br />
* Нет пользовательской документации<br />
* В среде FVWM у Firefox не показывается значок на кнопке «Назад»<br />
* При добавлении пользователя на LDAP выдаётся ошибка {{altbug|24486}}: <br />
lib/smbldap.c:731(smb_ldap_start_tls) Failed to issue the StartTLS instruction:<br />
Protocol error<br />
* При входе в alterator-ldap-groups (при ненастроенном LDAP) выдаётся ошибка pipe {{altbug|24415}}<br />
Backend: backend-communication error: ("system-error,(\"write_all\" \"~A\" (\"Broken pipe\") (32))")<br />
* alterator-grub: пункты списка не локализованы в веб-интерфейсе<br />
* alterator-ldap-users: не показывается uid, пустой раздел Samba {{altbug|24416}}<br />
* Не аутентифицируется на сервере LDAP<br />
* Не работает установка по VNC {{altbug|24390}}<br />
* Не настраивается сеть из параметров передаваемых из lilo {{altbug|24392}}<br />
* В интерфейсе настройки сети в альтераторе сначала предлагается заполнить хостнейм, IP, шлюз, а потом нажать кнопку "Дополнительно" где можно выбрать что интерфейс должен быть в бридже. При выборе данной галочки все раньше введенные настройки (хостнейм, IP и т. д.) сбрасываются. Очень не удобно.<br />
* Не работает пакет postfix-ldap {{altbug|24496}}<br />
* Не срабатывает fixmbr<br />
* Убрать из LiveCD пакеты: alterator-lilo, alterator-xkb, alterator-x11, livecd-restore<br />
* В LiveCD не подключаются диски автоматом<br />
* Не запускается служба dovecot<br />
* Требуется добавить пакеты<br />
alterator-updates<br />
* В alterator-logs cтранные символы в названиях локализованных журналов {{altbug|24483}}<br />
* При настройке почтового сервера acc падает {{altbug|24484}}<br />
* При выставленной аутентификации не через LDAP, а через tcb, модуль «Группы» не работает и вываливается с ошибкой {{altbug|24485}}<br />
* не хотела ставиться с sata-dvd-rom'a, говорила что-то вроде "не могу получить доступ к вашему CD" [http://forum.altlinux.org/index.php/topic,8621.msg120852.html#msg120852]<br />
* не определилась автоматически видеокарта (GF8600)<br />
* после подключения сизифа в качестве репозитария синаптик не смог получить список пакетов, apt-get update выдавало ошибку: E: Dynamic MMap ran out of room, решилось прописыванием в apt.conf строчки: APT::Cache-Limit 150000000;<br />
* в GRUB не прописалась автоматом windows xp, установленная на этот же жесткий диск<br />
* На последнем шаге установки инсталятор благодарит за выбор Альт Линукс 5.0 Ковчег<br />
<br />
== Прочее ==<br />
<br />
* [[alt_rhel_ubuntu|Сравнение пакетной базы Кентавра, RHEL и Ubuntu Server]]<br />
<br />
== Screenshots ==<br />
<br />
{| style="color:black; background-color:#ffe0e0;" cellpadding="10" cellspacing="0" border="0"<br />
|-<br />
|style="border: 3px solid red"|'''Внимание!''' Представлены прототипы дизайна для интерфейса, а не реальные снимки экрана.<br />
|}<br />
<br />
=== Вариант 1 ===<br />
<br />
<gallery perrow="6"><br />
Image:Centaurus variant1edit bootmenu style.png|Меню загрузки<br />
Image:Centaurus variant1edit bootsplash.png|Процесс загрузки<br />
Image:Centaurus variant1edit Alterator.png|Центр управления системой<br />
Image:Centaurus variant1edit elements.png|Элементы управления<br />
Image:Centaurus variant1edit Background 800x600.png|Экранные обои 800x600<br />
Image:Centaurus variant1edit Background 1920x1080.png|Экранные обои 1920x1080<br />
</gallery><br />
<br />
=== Вариант 2 ===<br />
<br />
<gallery perrow="6"><br />
Image:Centaurus variant2edit bootmenu style.png|Меню загрузки<br />
Image:Centaurus variant2edit bootsplash.png|Процесс загрузки<br />
Image:Centaurus variant2edit Alterator.png|Центр управления системой<br />
Image:Centaurus variant2edit elements.png|Элементы управления<br />
Image:Centaurus variant2edit Background 800x600.png|Экранные обои 800x600<br />
Image:Centaurus variant2edit Background 1920x1080.png|Экранные обои 1920x1080<br />
</gallery><br />
<br />
=== Вариант 3 ===<br />
<br />
<gallery perrow="6"><br />
Image:Centaurus variant3edit bootmenu style.png|Меню загрузки<br />
Image:Centaurus variant3edit bootsplash.png|Процесс загрузки<br />
Image:Centaurus variant3edit Alterator.png|Центр управления системой<br />
Image:Centaurus variant3edit elements.png|Элементы управления<br />
Image:Centaurus variant3 Background.png|Экранные обои <br />
Image:Centaurus variant3edit Background 800x600.png|Экранные обои 800x600<br />
Image:Centaurus variant3edit Background 1920x1080.png|Экранные обои 1920x1080<br />
</gallery><br />
<br />
<br />
<br />
{{Category navigation|title=Releases/60|category=Releases/60|sortkey={{SUBPAGENAME}}}}<br />
<br />
{{Category navigation|title=Планы|category=Планы}}</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Etcnet&diff=16828Etcnet2010-11-18T12:18:53Z<p>EvgeniiTerechkov: /* Беспроводный Ethernet (или настройка WI-FI) */ - typos</p>
<hr />
<div>{{DISPLAYTITLE:etcnet}}<br />
{{span|font-size: 180%|Подсказки пользователю /etc/net}}<br />
<br />
{| style="border:1px solid #AAA; background:#F9F9F9; width:200px; margin: 0 0 1em 1em; padding:.2em; float: right;" class=noprint<br />
|-<br />
|[[Image:Information.svg|20x20px]] external links:<br />
* [http://sisyphus.ru/en/srpm/etcnet package info]<br />
* [http://git.altlinux.org/people/sbolshakov/packages/?p=etcnet.git;a=summary source git repo]<br />
|}<br />
<br />
Дополнительные страницы:<br />
* [[etcnet/qos|настройка QoS]]<br />
* [[etcnet/firewall|настройка сетевого экрана (firewall]])<br />
<!-- Не убирайте div-ы, на них есть внешние ссылки! --><br />
<div id="quickstart"></div><br />
<br />
== Быстрый старт ==<br />
<div id="docs"></div><br />
<br />
=== Источники информации по /etc/net ===<br />
Обратите внимание, что начиная с версии 0.8.0 документация по [http://etcnet.org/ /etc/net] была собрана из комментариев, расположенных во множестве файлов, в несколько страниц руководств (man). Список всех файлов документации пакета <tt>etcnet</tt> можно получить командой:<br />
<pre>$ rpmquery -d etcnet</pre><br />
<br />
<div id="onecard"></div><br />
<br />
=== Быстрая настройка сетевого интерфейса стандарта Ethernet ===<br />
Для настройки одного сетевого интерфейса следует выполнить следующие шаги:<br />
<br />
Шаг 1: Создать каталог {{path|/etc/net/ifaces/eth0}}. Это каталог конфигурации данного интерфейса (<tt>eth0</tt>), в котором будут храниться файлы с настройками.<br />
<br />
Шаг 2: Определить, какой модуль необходим для вашей сетевой карты. Для этого можно использовать команды: <tt>lspci, lspcidrake, pciscan</tt>.<br />
<br />
Шаг 3: В каталоге конфигурации сетевого интерфейса создать файл <tt>options</tt> и записать в этот файл строку:<br />
<pre>MODULE=<имя модуля></pre> <br />
На данном этапе работу с файлом <tt>options</tt> можно завершить.<br />
<br />
Шаг 4: Выяснить, какой IP-адрес должен быть назначен вашему интерфейсу. Если ваш сетевой интерфейс получает конфигурируется по DHCP, то в файл {{path|/etc/net/ifaces/eth0/options}} следует записать строку:<br />
<pre>BOOTPROTO=dhcp</pre><br />
и перейти к шагу 7.<br />
<br />
'''Замечание:''' В ряде случаев в файле <tt>options</tt> может понадобиться запись:<br />
<pre>DHCP_HOSTNAME=<имя машины без домена></pre><br />
Эта опция описана в странице руководства <tt>etcnet-options(5)</tt>.<br />
<br />
'''Замечание:''' В конце файла <tt>options</tt> необходимо наличие пустой строки.<br />
<br />
У сетевого интерфейса существуют два взаимосвязанных атрибута: <br />
* IP-адрес;<br />
* сетевая маска (mask). <br />
Шаг 5: Текущие значение адреса можно просмотреть командой:<br />
{{cmd|# /sbin/ip address show}} <br />
Вероятнее всего вы увидите, что интерфейс-петля lo (loopback) уже сконфигурирован с адресом 127.0.0.1/8 (что эквивалентно IP-адресу 127.0.0.1 и маске подсети 255.0.0.0). <tt>/8</tt> означает длину префикса CIDR (Classless InterDomain Routing).<br />
Для задания IP-адреса и маски подсети интерфейса <tt>eth0</tt> необходимо создать файл {{path|/etc/net/ifaces/eth0/ipv4address}}, в который следует записать IP-адрес с длиной маски, например:<br />
<pre>10.0.0.20/24</pre> <br />
<br />
Наиболее популярны маски /24 (т.е. длина префикса CIDR равная 24 эквивалентна маске сети 255.255.255.0 - это одна сеть класса C на 254 хоста) и /30. Для справки приводится таблица соответствия сетевых масок в различных нотациях.<br />
<ref><br />
{|<br />
|<br />
{| class="standard"<br />
|-<br />
!маска<br />в битах!!маска<br />точечно-<br />десятичная<br />
|-<br />
|/32||255.255.255.255<br />
|-<br />
|/31||255.255.255.254<br />
|-<br />
|/30||255.255.255.252<br />
|-<br />
|/29||255.255.255.248<br />
|-<br />
|/28||255.255.255.240<br />
|-<br />
|/27||255.255.255.224<br />
|-<br />
|/26||255.255.255.192<br />
|-<br />
|/25||255.255.255.128<br />
|-<br />
|/24||255.255.255.0<br />
|-<br />
|/23||255.255.254.0<br />
|-<br />
|/22||255.255.252.0<br />
|-<br />
|/21||255.255.248.0<br />
|-<br />
|/20||255.255.240.0<br />
|-<br />
|/19||255.255.224.0<br />
|-<br />
|/18||255.255.192.0<br />
|-<br />
|/17||255.255.128.0<br />
|}<br />
|<br />
| ||<br />
{| class="standard"<br />
|-<br />
!маска<br />в битах!!маска<br />точечно-<br />десятичная<br />
|-<br />
|/16||255.255.0.0<br />
|-<br />
|/15||255.254.0.0<br />
|-<br />
|/14||255.252.0.0<br />
|-<br />
|/13||255.248.0.0<br />
|-<br />
|/12||255.240.0.0<br />
|-<br />
|/11||255.224.0.0<br />
|-<br />
|/10||255.192.0.0<br />
|-<br />
|/9||255.128.0.0<br />
|-<br />
|/8||255.0.0.0<br />
|-<br />
|/7||254.0.0.0<br />
|-<br />
|/6||252.0.0.0<br />
|-<br />
|/5||248.0.0.0<br />
|-<br />
|/4||240.0.0.0<br />
|-<br />
|/3||224.0.0.0<br />
|-<br />
|/2||192.0.0.0<br />
|-<br />
|/1||128.0.0.0<br />
|}<br />
|}<br />
</ref><br />
<br />
Шаг 6: Выяснить адрес вашего шлюза (маршрут по умолчанию). Например, IP-адрес вашего шлюза — <tt>10.0.0.254</tt>. Тогда необходимо создать файл {{path|/etc/net/ifaces/eth0/ipv4route}}, в который записать строку:<br />
<pre>default via 10.0.0.254</pre><br />
Шаг 7: Убедиться, что всё выполнено правильно, выполнив команду:<br />
{{cmd|# service network restart}}<br />
Ваш интерфейс <tt>eth0</tt> должен быть успешно сконфигурирован. Если вы конфигурировали <tt>eth0</tt>, используя DHCP-сервер, но адрес интерфейсу не был назначен, то следует искать сообщение от DHCP-сервера в файле {{path|/var/log/messages}}.<br />
<br />
<div id="ifplugd"></div><br />
<br />
=== Настройка ifplugd ===<br />
Начиная с версии 0.7.10, [http://etcnet.org/ /etc/net] управляет ifplugd самостоятельно. Это было сделано для лучшей интеграции пакетов и для возможности следить за несколькими сетевыми интерфейсами одновременно. Для корректного использования ifplugd необходимо выполнить команду:<br />
# chkconfig ifplugd off<br />
<br />
и назначить переменную <tt>USE_IFPLUGD</tt> в файлах <tt>options</tt> соответствующих интерфейсов (<tt>/etc/net/ifaces/<имя интерфейса>/options</tt>). Комментарий по данной переменной дан в странице руководства <tt>etcnet-options(5)</tt>.<br />
<br />
<div id="ppp"></div><br />
<br />
=== Настройка PPP-интерфейса ===<br />
Для настройки обычного модемного PPP-соединения необходимо:<br />
# Создать каталог конфигурации PPP-интерфейса, например, {{path|/etc/net/ifaces/ppp5}}. Вы можете задавать имена PPP-интерфейса вида pppN, pppNN, pppNNN и т. п., где N - любая цифра от 0 до 9;<br />
# Прочитать файл: {{path|/etc/net/ifaces/default/options-ppp}};<br />
# Создать файлы конфигурации. Вероятнее всего вам понадобятся <tt>pppconnect</tt> и <tt>pppdisconnect</tt>, чтобы <tt>pppd</tt> "знал", как дозваниваться и соединяться. Это скрипты для программы <tt>chat(8)</tt>. Кроме этого в файле <tt>pppoptions</tt> можно (часто нужно) перечислить опции <tt>pppd(8)</tt>, определяющие способ авторизации, скорость и название порта и т. п.;<br />
# Заполнить {{path|/etc/ppp/chap-secrets}} или {{/etc/ppp/pap-secrets}}.<br />
<br />
<div id="ppp-pptp-pppoe"></div><br />
<br />
=== Настройка PPtP-интерфейса и PPPoE-интерфейса ===<br />
''[[VPN_(PPTP_PPPoE) | Основная статья: VPN (PPTP PPPoE)]]''<br />
<br />
Хотя PPtP-соединения могут быть настроены и как обычные PPP-соединения, в [http://etcnet.org/ /etc/net] версии 0.7.10 для удобства пользователей была введена опция <tt>PPPTYPE</tt>. Она может принимать следующие значения:<br />
* <tt>dialup</tt> - обычный PPP-интерфейс.<br />
* <tt>pppoe</tt> - интерфейс PPPoE. Для такого интерфейса необходимо в опции <tt>HOST</tt> указывать имя Ethernet-интерфейса, через который будет производиться работа PPPoE. Побочным положительным эффектом будет то, что этот интерфейс будет при необходимости автоматически подниматься (т.е настраиваться) (см. [[#Зависимости между интерфейсами|Зависимости между интерфейсами]]).<br />
* <tt>pptp</tt> - интерфейс PPtP. Для такого интерфейса необходимо в опции <tt>PPTP_SERVER</tt> указывать имя хоста или IP-адрес PPtP-сервера, к которому будет производиться подключение. Обратите внимание, что хотя такие интерфейсы не имеют опции <tt>HOST</tt>, в большинстве случаев есть необходимость указать в опции <tt>REQUIRES</tt> интерфейс, через который будет достижим хост, указанный в <tt>PPTP_SERVER</tt>.<br />
<br />
См. также [[#Замечания о настройке VPN-подключения и туннелей|Замечания о настройке VPN-подключения и туннелей]].<br />
<br />
<div id="DNSandPPP"></div><br />
<br />
=== DNS и PPP-соединения ===<br />
<div style="display: inline; color: red;">Внимание: здесь описывается проблема, которая на самом деле была создана, а не решена — т.е. ради специфики [https://bugzilla.altlinux.org/show_bug.cgi?id=13789 kppp] была создана чётная ошибка в [https://bugzilla.altlinux.org/show_bug.cgi?id=13773 ppp-common]; последняя уже исправлена.</div><br />
<br />
Довольно долгое время существовала проблема неправильной модификации /etc/resolv.conf при установке PPP-соединений: [https://bugzilla.altlinux.org/show_bug.cgi?id=4249 https://bugzilla.altlinux.org/show_bug.cgi?id=4249]. Сейчас она решена, но необходимо дать пояснения. Прежде всего убедитесь, что в файле <tt>/etc/resolv.conf</tt> есть строка:<br />
<pre># ppp temp entry</pre><br />
Если этой строки нет, то в файле не будут модифицироваться строки nameserver, если только какая-нибудь программа типа kppp это не сделает специально. Если такая строка есть, то <tt>/etc/resolv.conf</tt> будет модифицироваться в зависимости от значения булевой (логической) переменной RESOLV_MODS, которую необходимо задать в файле <tt>/etc/sysconfig/network</tt>.<br />
<br />
<div style="display: inline; color: red;">Внимание</div>: при ppp-common >= 0.4-alt1 строки <tt># ppp temp entry</tt> в файле <tt>/etc/resolv.conf</tt> при отсутствии PPP-соединения, поднятого какой-либо программой-«звонилкой», запущенной от администратора системы (пользователь root) — быть '''не должно'''! Если это есть, следует убрать, чтобы <tt>/etc/ppp/ip-up</tt> занимался обновлением записей про DNS в этом файле.<br />
<br />
<div id="restartreload"></div><br />
<br />
=== restart, reload и другие команды ===<br />
У сервиса <tt>network</tt> имеется ряд команд:<br />
* <tt>start</tt> - запустить все стационарные интерфейсы. hotplug-интерфейсы будут сконфигурированы при поступлении соответствующего вызова от hotplug.<br />
* <tt>startwith <имя профиля> </tt> - старт с указанным именем профиля, а не определённым автоматически.<br />
* <tt>stop</tt> - остановить все стационарные интерфейсы. hotplug-интерфейсы будут расконфигурированы при поступлении соответствующего вызова от hotplug.<br />
* <tt>stopwith <имя профиля> </tt> - стоп с указанным именем профиля, а не определённым автоматически.<br />
* <tt>restart</tt> - эквивалентно <tt>stop</tt> с последующим <tt>start</tt>, как и в большинстве других сервисов.<br />
* <tt>restartwith <имя профиля> </tt> - рестарт в контексте указанного профиля, эквивалентно <tt>stopwith <имя профиля> и startwith <имя профиля></tt>.<br />
* <tt>switchto <имя профиля> </tt> - переключение в указанный профиль, эквивалентно <tt>stop</tt> и <tt>startwith <имя профиля></tt>.<br />
* <tt>reload</tt> - семантически обозначает «актуализировать текущую конфигурацию». Для всех сконфигурированных в настоящий момент интерфейсов будет выполнена реконфигурация при наличии конфигурации.<br />
* <tt>check</tt> - автоматическая проверка конфигурационной базы.<br />
<br />
<div id="bootproto"></div><br />
<br />
=== Протоколы конфигурации адресов ===<br />
С помощью опции <tt>BOOTPROTO</tt> вы можете управлять тем, как у интерфейса будут появляться адреса и маршруты (это относится только к протоколу IPv4, так как протоколы IPv6 и IPX получают адреса только статически).<br />
* <tt>static</tt> — адреса и маршруты будут взяты из <tt>ipv4address</tt> и <tt>ipv4route</tt>.<br />
* <tt>dhcp</tt> — интерфейс будет сконфигурирован по DHCP.<br />
* <tt>ipv4ll</tt> — интерфейс будет сконфигурирован с помощью IPv4LL (link-local), ранее известному как ZCIP (zeroconf IP). Это значит, что из сети 169.254.0.0/16 будет подобран ещё не использованный адрес и назначен на интерфейс.<br />
Существует несколько комбинированных способов:<br />
* <tt>dhcp-static</tt> — если конфигурация по DHCP не удалась, конфигурировать методом static.<br />
* <tt>dhcp-ipv4ll</tt> — если конфигурация по DHCP не удалась, конфигурировать методом ipv4ll.<br />
* <tt>dhcp-ipv4ll-static</tt> — если конфигурация по DHCP не удалась, конфигурировать методом ipv4ll. Если и это не удалось, конфигурировать методом static.<br />
<br />
<div id="internals"></div><br />
<br />
== Устройство /etc/net ==<br />
<div id="generalinfo"></div><br />
<br />
=== Общие сведения ===<br />
[http://etcnet.org/ /etc/net] - это система конфигурации сети в Linux, т.е. эта система позволяет администратору Linux достаточно просто произвести настройки сети. Если же вы читаете эту страницу, то, вероятно, у вас возникли трудности с её использованием. Для решения возможных проблем полезно знать:<br />
<br />
# [http://etcnet.org/ http://etcnet.org/] - сайт проекта, на котором можно найти примеры конфигурации и статьи по настройке системы.<br />
# [http://etcnet.org/ /etc/net] интегрирован в ALT Linux Sisyphus в виде пакетов:<br />
#* {{pkg|etcnet}} - базовые сценарии;<br />
#* {{pkg|etcnet-full}} - виртуальный пакет с зависимостями на все пакеты, которые могут использоваться сценариями [http://etcnet.org/ /etc/net], с указанием их точных версий;<br />
#* {{pkg|etcnetconf}} - '''прототип''' конфигуратора;<br />
#* {{pkg|etcnet-defaults-desktop}} - умолчания для рабочей станции;<br />
#* {{pkg|etcnet-defaults-server}} - умолчания для сервера; <br />
# Пакеты {{pkg|etcnet}} и {{pkg|net-scripts}} — две конфликтующие реализации «подсистемы конфигурации сети» (network-config-subsystem).<br />
# При установке etcnet вместо net-scripts (или наоборот) сервис <tt>network</tt> оказывается выключенным. Это означает, что при загрузке системы сеть не будет сконфигурирована, что можно проверить командой {{cmd|chkconfig --list network}}. Для быстрого исправления проблемы можно дать команду {{cmd|chkconfig network reset}}.<br />
# etcnet '''НЕ''' импортирует автоматически настройки net-scripts. Если вы только что установили etcnet, и ваши сетевые интерфейсы всё ещё остаются сконфигурированными (несмотря на уже отсутствующий пакет net-scripts), то вы можете запустить сценарий <tt>/etc/net/scripts/initconf</tt>. Он попытается проанализировать текущее состояние интерфейсов и выведет вам результат. Никаких файлов при этом записано не будет. Если вам подходит вывод initconf, то запустите его с параметром write и он проделает то же самое, но уже с сохранением конфигурации.<br />
# Для корректной работы системы в целом необходимо, чтобы содержимое файла <tt>/etc/sysconfig/network</tt> было корректным.<br />
# Переменные <tt>sysctl</tt> в ОС ALT Linux конфигурируются в следующих местах: <tt>/etc/sysctl.conf</tt> (глобальные системные), <tt>/etc/sysconfig/network-scripts/sysctl.conf</tt> (общие сетевые в net-scripts), <tt>/etc/net/sysctl.conf</tt> (общие сетевые в [http://etcnet.org/ /etc/net]), <tt>/etc/net/ifaces/*/sysctl.conf*</tt> (частные для конкретных интерфейсов или их типов в [http://etcnet.org/ /etc/net]).<br />
<br />
<div id="options.d"></div><br />
<br />
=== Организация опций /etc/net по умолчанию ===<br />
Методология [http://etcnet.org/ /etc/net] предусматривает несколько шагов наследования опций, первый из которых — загрузка опций по умолчанию. В более ранних версиях это происходило из одного файла <tt>/etc/net/options</tt>, сейчас же в вашем распоряжении есть каталог <tt>/etc/net/options.d</tt>, из которого будут последовательно прочитаны все файлы.<br />
<br />
Иными словами: оригинальный архив etcnet содержит только файл <tt>/etc/net/options.d/00-default</tt>. Упаковщик etcnet в какой-либо дистрибутив вместо того, чтобы добавить патч, просто добавляет файл с бОльшим номером, который переопределяет нужные опции.<br />
<br />
Ввиду решения различных задач, администратору системы может не подойти содержание дистрибутивного набора. В этом случае администратор может создать файл с ещё более высоким номером и определить настройки умолчания для своей системы. В результате такого подхода:<br />
# Уменьшается количество патчей (хотя их свойство "отваливаться" от пакета при его упаковке бывает полезным).<br />
# Не изменяются файлы с опциями, принадлежащие пакету. Это делает обновление пакета намного более корректным.<br />
# Можно легко увидеть, какие опции переопределяются на каждом этапе.<br />
<br />
<div id="iftab"></div><br />
<br />
=== Назначение iftab ===<br />
<br />
Начиная с дистрибутивов, основанных на ветках p5 и 5.1, переименование интерфейсов возложено на udev; см. тж. [http://lists.altlinux.org/pipermail/sisyphus/2009-June/340033.html это письмо] и [https://bugzilla.altlinux.org/show_bug.cgi?id=19313 #19313] и [http://sisyphus.ru/srpm/wireless-tools/changelog %changelog ifrename].<br />
<br />
Имена сетевых интерфейсов по умолчанию, как правило, содержат их тип (eth, ppp, wifi, ipsec) и индекс: 0 - для первого созданного интерфейса, 1 - для второго и т. д. При этом соответствие автоматически назначенных имён физическим устройствам может не сохраняться.<br />
<br />
Эта особенность неудобна, когда машина с Linux имеет более одного интерфейса каждого типа. Типичными примерами являются маршрутизаторы и ноутбуки. В маршрутизаторах, как правило, используются однотипные сетевые карты и при их замене или изменении порядка на PCI-шине соответствие оказывается нарушенным. В ноутбуках используются ethernet и wifi-устройства с горячим подключением, при этом слотов и карт может быть более чем 1. В этом случае пользователь/администратор скорее всего пожелает закрепить за каждой сменной картой её конфигурацию.<br />
<br />
[http://etcnet.org/ /etc/net] при конфигурации интерфейса использует то имя, под которым он сконфигурирован, а именно имя каталога, в котором хранятся файлы конфигурации интерфейса.<br />
<br />
Для привязки сетевой карты к имени интерфейса в простых случаях можно воспользоваться файлом <tt>/etc/iftab</tt>, man-страница по формату которого входит в пакет <tt>ifrename</tt> (<tt>iftab(5)</tt>).<br />
<br />
Использование <tt>/etc/iftab</tt> удобно, поскольку позволяет сохранять традиционные имена интерфейсов (например, eth0), но этот механизм не поддерживает расширенную функциональность /etc/net (в частности, ''профили'' /etc/net).<br />
<br />
Средством, позволяющим использовать все возможности <tt>etcnet</tt>, является файл <tt>/etc/net/iftab</tt>, обрабатываемый не утилитой <tt>ifrename</tt>, а непосредственно <tt>etcnet</tt>. Синтаксис этого файла совпадает с синтаксисом <tt>/etc/iftab</tt>. Ограничением же является невозможность использовать стандартные имена интерфейсом (<tt>ethX</tt>, <tt>pppX</tt>), так как переименование интерфейсов происходит уже после конфигурации интерфейса ядром. В случае, если вам необходим <tt>/etc/net/iftab</tt>, имеет смысл переименовать интерфейсы, давая им либо двухзначные номера (<tt>eth00</tt>, <tt>eth01</tt>...), либо осмысленные названия (<tt>isplink</tt>, <tt>lan</tt>...)<br />
<br />
См. письмо про [http://lists.altlinux.org/pipermail/sisyphus/2009-March/337924.html важность /etc/iftab]<br />
и тж. это письмо про [http://lists.altlinux.org/pipermail/devel/2007-October/065097.html отличия etcnet и сервиса ifrename]:<br />
{{начало цитаты}} Комментарии к письмам этого треда (с некоторыми пояснениями):<br />
<br />
1. «etcnet уже научился менять местами eth0 и eth1?»<br />
<br />
Освоение этого приема обладает сомнительной пользой. Рекомендуется <br />
рассматривать eth0 как временное имя с малым сроком жизни,<br />
а для повышения комфорта пользователей Ethernet-интерфейсы предлагается<br />
называть eth00, eth01, eth02 etc.<br />
<br />
2. «Существование (номинальное) net-scripts вынуждает поддерживать<br />
ряд сервисов, которые иначе могли бы быть упразднены»<br />
<br />
Эти сервисы можно "обезвредить" (отключить) контролем CONFMETHOD<br />
из /etc/sysconfig/network. При этом зависимости на пакет etcnet<br />
не возникнет, только на network-config-subsystem. Примеры таких<br />
пакетов должны быть в Sisyphus.<br />
<br />
3. «после приведения в порядок /etc/udev/rules.d/19-udev-ifrename.rules<br />
нужности в /etc/net/iftab я не заметил»<br />
<br />
Важнейшее принципиальное отличие /etc/net/iftab от /etc/iftab —<br />
нахождение /etc/net/iftab в специальном пространстве имён. Для него<br />
действуют механизмы определения профиля и хоста конфигурации. Это,<br />
например, позволит, при необходимости, составить конфигурацию так, что срочный<br />
ремонт маршрутизатора сведётся к переносу диска (или массива)<br />
из сгоревшего шасси в запасное. Возможны и другие примеры, которые<br />
станут невозможными при помещении iftab в /etc и его прямой<br />
интерпретации.<br />
<br />
Конечно, пользователю единственного ноутбука с одним-двумя сетевыми<br />
интерфейсами такая практика — полный overkill (т.е. такая практика ему не нужна), но его никто и не<br />
заставляет видеть всю подводную часть (т.е. все тонкости работы и настройки). В этом и гибкость.{{конец цитаты}}<br />
<br />
<div id="specifaces"></div><br />
<br />
=== Интерфейсы lo, default и unknown ===<br />
Сразу после установки пакета <tt>etcnet</tt> в каталоге <tt>/etc/net/ifaces</tt> (в котором хранятся конфигурации интерфейсов) находятся три каталога: <br />
* lo<br />
* default<br />
* unknown<br />
<br />
Интерфейс '''lo''' — стандартная "петля" (loopback), которая должна быть во всякой Linux-системе, поэтому конфигурация для него включена по умолчанию. В остальном он ничем не отличается от любого другого интерфейса и конфигурируется точно так же файлами <tt>options</tt> и <tt>ipv4address</tt>.<br />
<br />
Интерфейс '''default''' — это не интерфейс, а специальный каталог, файлы в котором обрабатываются следующим образом:<br />
* <tt>resolv.conf</tt> — если присутствует, то копируется в <tt>/etc/resolv.conf</tt>.<br />
* <tt>options</tt> — файл опций, читается после опций по умолчанию. Этот файл содержит комментарии.<br />
* <tt>options-<вид интерфейса></tt> — этот файл содержит опции, специфичные для данного вида интерфейсов. Некоторые из них не обязательны и позволяют использовать особенности данного вида интерфейсов, например, <tt>LINKDETECT</tt> в <tt>options-eth</tt>; другие обязательны, например, <tt>HOST</tt> в <tt>options-bri</tt>. Эти файлы содержат комментарии. Обратите внимание, что эти файлы не рекомендуется редактировать. Если вам нужно задать опцию для интерфейса, то, как правило, это можно сделать в файле <tt>options</tt> в конфигурационном каталоге данного интерфейса. Это облегчит процесс обновления пакета etcnet.<br />
* <tt>sysctl.conf-<вид интерфейса></tt> — файл с переменными sysctl, которые необходимо изменить. Сейчас единственный такой файл — <tt>sysctl.conf-dvb</tt>, который отключает <tt>return path filter</tt>, что всегда нужно в случае асимметричной маршрутизации.<br />
* <tt>iplink-<вид интерфейса></tt> — файл с командами iplink, специфичными для данного вида.<br />
* <tt>selectprofile</tt> — если этот файл исполняемый, то он будет вызван из сценариев <tt>ifup/ifdown</tt>, <tt>setup/shutdown</tt> для того, чтобы вернуть на стандартном выводе имя профиля, которое необходимо использовать. Это позволяет автоматически переключать профили в зависимости от каких-либо условий. В поставку включен комментированный пример сценария: <tt>/etc/net/scripts/contrib/selectprofile</tt>.<br />
* <tt>fw</tt> — каталог с настройками сетевого экрана по умолчанию.<br />
<br />
Интерфейс '''unknown''' — специальная конфигурация, которая будет использована в том случае, когда [http://etcnet.org/ /etc/net] просят сконфигурировать hotplug-интерфейс, для которого не существует каталога конфигурации. Это будет работать только в том случае, если включена опция <tt>ALLOW_UNKNOWN</tt>.<br />
<br />
<div id="broadcast"></div><br />
<br />
=== broadcast address===<br />
<br />
Периодически возникает вопрос: почему после старта [http://etcnet.org/ /etc/net] при запуске <tt>ifconfig</tt> можно видеть <tt>Bcast:0.0.0.0</tt>, хотя при использовании net-scripts это поле было правильным? <br />
<br />
Ответ: net-scripts оперируют адресом, маской, адресом сети и широковещательным адресом, пытаясь определить неизвестные компоненты из известных, а <tt>config-ipv4</tt> просто передаёт утилите <tt>ip</tt> содержимое файла <tt>ipv4address</tt>, не проверяя его содержание.<br />
Важно заметить, что:<br />
* Если <tt>iproute2</tt> изменит свой синтаксис, то с очень вероятно, что администратору будет необходимо редактировать только конфигурационные файлы.<br />
* Не было найдено проблем с «отсутствующим» broadcast address. Он есть в таблице маршрутизации <tt>local</tt>. <br />
* Администратор всегда может назначить адрес broadcast в файле <tt>ipv4address</tt>. Это можно сделать с помощью выражения <tt>broadcast +</tt><ref><br />
Выдержка из файла ip-cref.ps, который входит в документацию пакета iproute2:<br />
<br />
<pre><br />
* broadcast ADDRESS<br />
<br />
the broadcast address on the interface.<br />
It is possible to use the special symbols '+' and '-' instead of the broadcast address. In this case, <br />
the broadcast address is derived by setting/resetting the host bits of the interface prefix.<br />
NB. Unlike ifconfig, the ip utility does not set any broadcast address unless explicitly requested.<br />
</pre><br />
</ref>.<br />
'''Замечание:''' В версии 0.8.0 появилась опция <tt>AUTO_BROADCAST</tt> для автоматического дополнения каждой строки <tt>ipv4address</tt>.<br />
<br />
<div id="never_rmmod"></div><br />
<br />
=== Ядро 2.6 и "пропадающие" интерфейсы ===<br />
Иногда возможна ситуация: Если два интерфейса используют один и тот же модуль ядра, и у них определена опция <tt>MODULE</tt> (то есть скрипты [http://etcnet.org/ /etc/net] сами загружают и выгружают модули), то при опускании (отключении) одного интерфейса пропадает и второй интерфейс. <br />
<br />
Такая ситуация почти наверняка возникает при использовании ядра 2.6, особенностью которого являются значения счётчика ссылок (третий столбец вывода <tt>lsmod</tt>). Когда счетчик оказывается равен нулю (довольно часто), скрипты могут попытаться выгрузить модуль интерфейса, для которого запущен ifdown. И такая выгрузка происходит, несмотря на то, что другой интерфейс, использующий этот же модуль, находится в состоянии UP (т.е. он активен).<br />
<br />
Чтобы заблокировать выгрузку модулей, можно использовать булеву переменную <tt>NEVER_RMMOD</tt>. Возможно, позже это будет происходить автоматически для ядер следующих версий.<br />
<br />
<div id="removables"></div><br />
<br />
=== Cценарии конфигурации сети и hotplug-интерфейсы ===<br />
<br />
==== Cценарии конфигурации сети ====<br />
Существует несколько сценариев конфигурации сети.<br />
<br />
* Первый и самый простой — выполнение <tt>service network start</tt> при старте системы или вручную. При этом требуется только сформировать погруппные (потиповые) списки интерфейсов, подлежащих обработке, и последовательно выполнить требуемые действия. Модули ядра при этом загружаются сценариями [http://etcnet.org/ /etc/net], при этом имена модулей берутся из опции <tt>MODULE</tt> (в этой опции можно в кавычках перечислить несколько имён и они будут последовательно загружены). Этот метод часто используется на практике и лучше всего подходит для маршрутизаторов. Преимущество метода в том, что вся необходимая информация сконцентрирована в одном месте — каталоге <tt>/etc/net</tt>. Если опция <tt>MODULE</tt> не определена, то будет предпринята попытка загрузки по имени интерфейса, подразумевая, что файл <tt>/etc/modules.conf</tt> правильно заполнен.<br />
<br />
* Второй сценарий — реакция на событие <tt>ifplugd</tt>. В предыдущих версиях существовала сложность, так как требовалась синхронная настройка сервиса <tt>ifplugd</tt>. Сейчас логика работы определена, что выражено в том, что [http://etcnet.org/ /etc/net] взяла управление <tt>ifplugd</tt> на себя. В части загрузки модуля этот сценарий не отличается от первого.<br />
<br />
* Третий сценарий — реакция на появление или исчезновение сменного устройства. Для обработки таких событий предназначены сценарии <tt>/etc/net/scripts/{ifup,ifdown}-removable</tt>, которые вызываются из сценариев пакетов hotplug и pcmcia-cs. Сложность заключается в том, что для сменных PCMCIA-карт вызовы могут дублироваться: для одного и того же события первый раз ifup-removable будет вызван из hotplug, второй — из pcmcia-cs. Кроме того, hotplug также реагирует на загрузку модулей ядра для обычных карт PCI и, более того, включает сценарии, которые пытаются загружать модули самостоятельно. В этом контексте [http://etcnet.org/ /etc/net] получает слишком много вызовов от hotplug и по умолчанию их игнорирует (<tt>USE_HOTPLUG=no</tt>).<br />
<br />
==== hotplug-интерфейсы ====<br />
Рассмотрим использование hotplug-интерфейсов. <br />
<br />
Пусть администратору необходимо настроить действительно сменную карту. После заполнения <tt>/etc/iftab</tt> или <tt>/etc/net/iftab</tt> в файле <tt>options</tt> необходимо будет задать <tt>USE_HOTPLUG=yes</tt>. После этого при получении события от hotplug [http://etcnet.org/ /etc/net] будет работать в том контексте, что модуль в загрузке и выгрузке не нуждается. <br />
<br />
Важно заметить, что '''такой интерфейс будет пропущен при обычном старте сети''', т.к. если он сменный, то единственный достоверный способ узнать, что он присутствует — получить вызов от hotplug. Из факта выполнения <tt>service network start</tt> совсем не следует, что какой-то один или несколько из сконфигурированных hotplug-интерфейсов сейчас в наличии и требуют конфигурации. Если вы хотите вручную расконфигурировать hotplug-интерфейс до его извлечения, используйте команду <tt>ifdown</tt>. Для повторной конфигурации вставьте его ещё раз.<br />
<br />
Также существует опция <tt>USE_PCMCIA</tt>. Если события для вашей карты генерирует pcmcia-cs, то вам нужно её включить. Если события генерируются только hotplug, то используйте опцию <tt>USE_HOTPLUG</tt>.<br />
<br />
<div id="eth0"></div><br />
<br />
=== Проблема стандартных имен интерфейсов (eth0 и др.)===<br />
<br />
При использовании файла <tt>/etc/net/iftab</tt>, то есть в случае применения сложных конфигураций, возникает следующая проблема:<br />
* При загрузке модулей имена интерфейсов принимают вид eth0, eth1, eth2… Какие именно — в общем случае контролировать нельзя.<br />
* Имя eth0 обладает наибольшей вероятностью оказаться занятым.<br />
* ifrename не может переименовать интерфейс, если целевое имя уже занято (udev использует <tt>ifrename -t</tt>, но это не работает после начальной загрузки, см. руководство к ifrename).<br />
<br />
С учётом вышеизложенного, если <tt>/etc/net/iftab</tt> содержит тот же набор имён интерфейсов, что уже имеется после загрузки модулей (то есть <tt>eth0</tt>/<tt>eth1</tt> и другие «стандартные» названия), то единственный случай, когда etcnet сможет без ошибок обработать такой файл — изначальное соответствие, не требующее переименования.<br />
<br />
Таким образом, при использовании <tt>/etc/net/iftab</tt> имеет смысл давать интерфейсам названия, отличные по виду от тех, что назначает ядро. В простых случаях лучше использовать <tt>/etc/iftab</tt>.<br />
<br />
<div id="advanced"></div><br />
<br />
== Расширенные возможности ==<br />
<div id="multipleIPs"></div><br />
<br />
=== Несколько IP-адресов или маршрутов на одном интерфейсе ===<br />
<br />
Вы можете помещать произвольное количество IP-адресов в файл <tt>ipv4address</tt> по одному адресу на каждой строке. То же самое относится к статическим маршрутам и файлу <tt>ipv4route</tt>.<br />
<br />
Обратите внимание, что [http://etcnet.org/ /etc/net] не анализирует содержимое этих файлов, а формирует на основе каждой строки командную строку для утилиты <tt>ip</tt>. Это означает, что вы можете помещать в этих файлах произвольные поддерживаемые <tt>ip</tt> опции и они будут обработаны. Например, в файле <tt>ipv4route</tt> можно поместить строку:<br />
<pre>10.0.1.0/24 via 10.0.0.253 metric 50 weight 5 table 100</pre><br />
<br />
<div id="requires"></div><br />
<br />
=== Зависимости между интерфейсами ===<br />
У интерфейсов:<br />
* vlan<br />
* bond <br />
* bri <br />
* teql <br />
входящих в группу зависимых физических, должна быть определена опция <tt>HOST</tt> со списком интерфейсов, необходимых для инициализации текущего интерфейса. Если хост-интерфейс не сконфигурирован при поднятии зависимого интерфейса, то это будет исправлено.<br />
<br />
Кроме обязательной для определённых интерфейсов опции <tt>HOST</tt>, может быть задана и необязательная для всех остальных интерфейсов опция <tt>REQUIRES</tt>. Интерфейсы, перечисленные в этой опции, будут считаться зависимостями текущего интерфейса. Например, по умолчанию попытка сконфигурировать интерфейс А, который зависит от Б и В, приведёт сначала к конфигурации Б и В. Аналогично, при расконфигурации Б или В сначала будет расконфигурирован А.<br />
<br />
Зависимость одного интерфейса от другого не всегда формальна. Например, в сценарии <tt>ifup-pre</tt> одного интерфейса может использоваться команда, которая потребует разрешения DNS-имени, которое может быть разрешено только с помощью <tt>resolv.conf</tt>, инсталлируемого другим интерфейсом. Или это может быть PPPoE/PPtP-интерфейс, требующий Ethernet-интерфейс для работы.<br />
<br />
Для того, чтобы избежать неожиданных сбоев в таких случаях, правильно задавайте опцию <tt>REQUIRES</tt>.<br />
<br />
<div id="postpre"></div><br />
<br />
=== Пользовательские сценарии post и pre ===<br />
Существует возможность поместить в каталог конфигурации интерфейса файлы, которые будут выполнены в определённые моменты. Для этого они должны быть исполняемыми и называться следующим образом:<br />
* <tt>ifup-pre</tt> — для выполнения перед конфигурированием интерфейса.<br />
* <tt>ifup-post</tt> — для выполнения после конфигурирования интерфейса. Например, можно запустить почтовую систему.<br />
* <tt>ifdown-pre</tt> — для выполнения перед расконфигурированием интерфейса. Например, можно остановить почтовую систему.<br />
* <tt>ifdown-post</tt> — для выполнения после расконфигурирования интерфейса.<br />
<br />
Также в версии до 0.8.0 возможно использовать следующие сценарии (они должны быть исполняемыми):<br />
* <tt>/etc/net/scripts/ifup-pre-local</tt><br />
* <tt>/etc/net/scripts/ifup-post-local</tt><br />
* <tt>/etc/net/scripts/ifdown-pre-local</tt><br />
* <tt>/etc/net/scripts/ifdown-post-local</tt><br />
<br />
Они будут вызваны для каждого интерфейса. Начиная с версии 0.8.0 эти сценарии называются так:<br />
* <tt>/etc/net/ifup-pre</tt><br />
* <tt>/etc/net/ifup-post</tt><br />
* <tt>/etc/net/ifdown-pre</tt><br />
* <tt>/etc/net/ifdown-post</tt><br />
Семантика сохранена.<br />
<br />
<div id="iplink"></div><br />
<br />
=== Управление канальными параметрами интерфейсов ===<br />
<br />
Если поместить в конфигурационный каталог интерфейса файл <tt>iplink</tt>, в котором в каждой строке будут записаны команды режима link утилиты <tt>ip</tt>, то они будут выполнены при конфигурации интерфейса. <br />
<br />
Например, если необходимо, чтобы интерфейс net1 имел MAC-адрес aa:bb:cc:dd:ee:ff и MTU 200 байт, то в файл <tt>/etc/net/ifaces/net1/iplink</tt> нужно поместить следующее:<br />
<pre>address aa:bb:cc:dd:ee:ff<br />
mtu 200</pre><br />
<br />
Обратите внимание, что в этом случае в <tt>/etc/net/iftab</tt> вам необходимо будет использовать селектор <tt>businfo</tt> или <tt>driver</tt> вместо <tt>mac</tt>.<br />
<br />
<div id="ethtool"></div><br />
<br />
=== Управление физическими параметрами интерфейсов ===<br />
Если поместить в конфигурационный каталог интерфейса файл <tt>ethtool</tt>, в котором будет строка с параметрами программы ethtool, то она будет выполнена при конфигурации интерфейса. <br />
<br />
Например, если есть необходимость, чтобы интерфейс net1 имел скорость 10Мбит/с и авто-согласование скорости было отключено, то в файл <tt>/etc/net/ifaces/net1/ethtool</tt> нужно поместить следующую строку:<br />
<br />
<pre>speed 10 autoneg off</pre><br />
<br />
<div id="bridge"></div><br />
<br />
=== Настройка Ethernet-моста ===<br />
<br />
Перед настройкой Ethernet-моста (далее - моста) с помощью etcnet сначала необходимо убедиться, что установлен пакет bridge-utils. Etcnet использует утилиту brctl для настройки моста, и, если утилита не установлена, то при перезапуске системы сеть станет недоступна. Если интерфейсы, входящие в состав моста, единственные физически подключённые, и настройка моста происходит с удаленного узла через эти интерфейсы, то требуется соблюдать осторожность, т.к. эти интерфейсы перестанут быть доступны. В случае ошибки в конфигурации , потребуется физический доступ к серверу. Для страховки перед перезапуском сервиса network можно открыть ещё одну консоль и запустить там, например, команду: <tt>sleep 500 && reboot</tt>.<br />
<br />
Предположим, что требуется настроить Ethernet-мост, и пусть он будет называться <tt>br0</tt>. <br />
Тогда для его настройки необходимо завести каталог <tt>etc/net/ifaces/br0</tt> и создать там файлы со следующими данными:<br />
<br />
* <tt>brctl</tt><br />
<br />
<pre> stp AUTO on </pre><br />
<br />
* <tt>ipv4address</tt>:<br />
<pre> 192.168.100.200/24 </pre><br />
<br />
* <tt>options</tt>:<br />
<pre> TYPE=bri<br />
HOST='eth0 tap0'<br />
BOOTPROTO=static </pre><br />
<br />
Содержимое файла <tt>brctl</tt> передается утилите brctl. <tt>AUTO</tt> означает, что скрипт <tt>setup-bri</tt> самостоятельно определит имя bridge-интерфейса (см. README.bridge в каталоге doc пакета etcnet).<br />
<br />
IP-адрес для интерфейса, как обычно, будет взят из <tt>ipv4address</tt>.<br />
<br />
В опции <tt>HOST</tt> файла <tt>options</tt> нужно указать те интерфейсы, которые будут входить в мост. Если в него будут входить интерфейсы, которые до этого имели ip-адрес (например, eth0), то этот адрес должен быть удален (например, можно закомментировать содержимое файла <tt>ifaces/eth0/ipv4address</tt>).<br />
<br />
При старте сети сначала поднимаются интерфейсы, входящие в мост, затем сам мост (автоматически). Для назначения адреса мосту можно так же использовать DHCP (<tt>BOOTPROTO=dhcp</tt>). Но при этом важно обратить внимание на параметр <tt>forwarding delay</tt> (man brctl / setfd), так как интерфейс, подключенный к мосту, не сразу входит в режим передачи пакетов, и это может вызвать dhcp таймаут. Версии etcnet в дистрибутивах ALT Linux Server 4 и Desktop 4.1 (0.9.7-alt0.M40/M41) имеют эту недоработку, которая исправлена только в версии 0.9.9-alt1. <br />
Документацию по настройке моста с вопросами и ответами (перевод) можно найти на http://xgu.ru/wiki/Linux_Bridge, а его оригинал доступен на http://www.linuxfoundation.org/en/Net:Bridge.<br />
<br />
С пакетом etcnet поставляются примеры конфигурации. Один из них показывает, как из двух ethernet-интерфейсов port0 и port1 можно собрать мост bridge (каталог документации examples/Ethernet-bridge-GRE/).<br />
<br />
Безотносительно к etcnet, следует иметь ввиду проблему, связанную с NAT:<br />
http://bugzilla.kernel.org/show_bug.cgi?id=13079<br />
<br />
<div id="vlan"></div><br />
<br />
=== Настройка VLAN ===<br />
<br />
Для настройки 802.1q VLAN (например, id 4094 на eth1) следует, создав каталог <tt>ifaces/eth1.4094</tt>, поместить в него файлы со следующим содержимым:<br />
<br />
* <tt>ipv4address</tt>:<br />
<pre>192.168.100.200/24</pre><br />
<br />
* <tt>options</tt>:<br />
<pre> TYPE=vlan<br />
HOST=eth1<br />
VID=4094<br />
BOOTPROTO=static</pre><br />
<br />
Содержимое переменных <tt>HOST</tt> и <tt>VID</tt> будет передано утилите <tt>vconfig</tt>; использование файла <tt>vlantab</tt> необязательно (и не рекомендуется по причине невозможности использовать ifup для отдельного интерфейса). Пример конфигурации можно найти в каталоге examples/VLAN-without-vlantab/ документации etcnet.<br />
<br />
Следует обратить внимание, что 4094 является верхней допустимой границей идентификатора валидного VLAN, а [http://www.candelatech.com/pipermail/vlan/2004-November/000128.html 4095 используется технически в процессе отбрасывания трафика по неверным VLAN]. (следует отметить, что это не ограничение Linux: [http://en.wikipedia.org/wiki/802.1Q в стандарте под VID отведено 12 бит])<br />
<br />
'''Для настройки Q-in-Q интерфейса''', например, eth1.123.513 (дважды тегированный трафик: внешняя метка -- 123, внутренняя -- 513) следует файл <tt>options</tt> в каталоге <tt>ifaces/eth1.123.513</tt> заполнить следующим образом:<br />
<br />
* <tt>options</tt>:<br />
<pre> TYPE=vlan<br />
HOST=eth1.123 # "родительский" интерфейс; может называться иначе<br />
VID=513<br />
VLAN_REORDER_HDR=0<br />
BOOTPROTO=static</pre><br />
<br />
Родительский интерфейс должен быть сконфигурирован (можно с или без <tt>BOOTPROTO</tt>, с или без <tt>ipv4address</tt> и т.п.).<br />
<br />
Таким образом, можно каскадировать интерфейсы "как угодно глубоко" (Q-in-Q-in-Q-in-Q....). Необходимо только учитывать, что длина имени интерфейса ограничена (16-ю символами).<br />
<br />
<div id="tun/tap"></div><br />
<br />
=== Настройка tun/tap интерфейса ===<br />
<br />
Etcnet поддерживает простое создание интерфейсов типа tun/tap. Это виртуальный тип интерфейсов для передачи пакетов между ядром и программами, который не передает данных через физические устройства.<br />
'''tun''' — это интерфейс типа point-to-point, работающий с кадрами IP.<br />
'''tap''' — интерфейс типа ethernet, работающий с кадрами ethernet.<br />
<br />
Потребуется использование утилиты tunctl, находящейся в одноименном пакете.<br />
Пусть требуется создать и настроить tun/tap интерфейс, например, с именем tap0. Для этого необходимо:<br />
* создать каталог интерфейса:<br />
<br />
/etc/net/ifaces/tap0<br />
<br />
* создать в каталоге интерфейса <tt>/etc/net/ifaces/tap0</tt> файл настройки <tt>options</tt> со следующим содержанием:<br />
<br />
TYPE=tuntap<br />
TUNTAP_USER=combr<br />
<br />
<br />
<tt>TUNTAP_USER</tt> — это аккаунт или цифровой id пользователя, которому будут даны права на использование интерфейса tap0 (устройство /dev/net/tun).<br />
Этот параметр будет передан утилите <tt>tunctl</tt> как аргумент опции <tt>-u</tt> (см. руководство на tunctl).<br />
С версии ядра 2.6.18 произошли изменения в управлении этим типом интерфейсов, потребовавшие<br />
обязательного применения <tt>tunctl</tt> для разрешения доступа обычных<br />
пользователей к tap-интерфейсам. В предыдущих версиях любой<br />
пользователь, имеющий доступ к <tt>/dev/net/tun</tt>, мог создать любое<br />
количество сетевых интерфейсов с произвольными именами. Начиная с<br />
2.6.18, для создания интерфейса через <tt>/dev/net/tun</tt> требуется<br />
<tt>CAP_NET_ADMIN</tt> (обычно эту привилегию имеет только root), а обычный<br />
пользователь, имеющий доступ к <tt>/dev/net/tun</tt>, может только использовать<br />
уже созданные интерфейсы, к которым разрешён доступ для его uid.<br />
<br />
<div id="iptun"></div><br />
<br />
=== Настройка и использование IP-туннелей ===<br />
<br />
IP-туннели — средство, позволяющее улучшить IP-сети. Поддерживаются IP-туннели трёх видов: <br />
* IPIP<br />
* GRE<br />
* SIT <br />
<br />
Прежде всего следует определить необходимый вид туннеля для решаемой задачи. <br />
<br />
* Туннели '''IPIP''' — самые простые. Обратите внимание, что IPIP-туннели не могут передавать multicast-пакеты, соответственно, протокол OSPF (Open Shortest Path First) на таких интерфейсах работать не будет.<br />
<br />
* Туннели '''GRE''' (general incapsulation) обычно используются в маршрутизаторах Cisco. По туннелям этого типа могут передаваться broadcast и multicast пакеты. Кроме того, эти туннели поддерживают контрольные суммы и контроль упорядоченности пакетов. Также GRE-туннели обладают опциональным атрибутом key в виде произвольного 4-байтового числа, который позволяет конфигурировать несколько GRE туннелей между одной парой IP-адресов несущей сети (в отличие от IPIP-туннелей, с которыми это невозможно).<br />
<br />
* Туннели '''SIT''' предназначены для транспортировки пакетов IPv6 через сети IPv4.<br />
<br />
<br />
Тип туннеля определяется опцией <tt>TUNTYPE (ipip, gre, sit)</tt>. По умолчанию <tt>TUNTYPE=ipip</tt>. Кроме типа туннеля для конфигурации всегда требуется адрес удалённого хоста и почти всегда — локальный адрес. Эти адреса определяются опциями <tt>TUNREMOTE</tt> и <tt>TUNLOCAL</tt> соответственно. В некоторых случаях локальный адрес можно не указывать. В этом случае опция <tt>TUNLOCAL</tt> всё равно обязательна, но принимает значение <tt>any</tt>. Не забудьте назначить туннельному интерфейсу адреса и маршруты в соответствующих файлах.<br />
<br />
Пример: Конфигурация GRE-туннеля между 10.0.1.2 и 10.0.2.3 с двумя ключами для исходящих и входящих пакетов, проверкой очерёдности пакетов, TTL 8 и вычислением контрольных сумм. Туннель должен использовать только интерфейс gw1. Пусть имя создаваемого туннеля будет <tt>mytunnel</tt>.<br />
<br />
Тогда необходимо сделать следующие операции:<br />
* Создать каталог туннеля:<br />
/etc/net/ifaces/mytunnel<br />
<br />
* Создать в каталоге туннеля файл настроек <tt>options</tt><br />
/etc/net/ifaces/mytunnel/options<br />
<br />
* Отредактировать файл настроек <tt>options</tt>: <br />
<br />
<source lang="ini"><br />
TYPE=iptun<br />
TUNTYPE=gre<br />
TUNLOCAL=10.0.1.2<br />
TUNREMOTE=10.0.2.3<br />
TUNTTL=8<br />
HOST=gw1<br />
TUNOPTIONS='seq ikey 2020 okey 2030 csum'<br />
</source><br />
<br />
<div id="vpn"></div><br />
<br />
Стоит помнить, что имена <tt>tunl0, gre0 и sit0</tt> являются зарезервированными в iproute2 ("base devices") и имеют особое поведение: http://www.liveinternet.ru/users/stasikos/post71435454/<br />
<br />
=== Замечания о настройке VPN-подключения и туннелей ===<br />
<br />
Часто при настройке VPN-подключения (под которыми здесь будут подразумеваться все туннельные подключения, то есть подключения поверх IP) не учитывают, что использование опции pppd '<tt>defaultroute</tt>' маршрут по-умолчанию после подключения будет изменен. При этом, если VPN-сервер находится в другой, отличной от клиента, сети, то после подключения (и изменения маршрута по-умолчанию) VPN-сервер становится недоступным, следовательно, недоступными становятся все внешние адреса, и подключение, как правило, прекращается по тайм-ауту.<br />
<br />
Решением, как обычно (и рекомендовано), служит указание ''отдельного'' маршрута на VPN-сервер (или его сеть). Для этого необходимо прописать (в примере - для маршрута через eth0) в <tt>/etc/net/ifaces/eth0/ipv4route</tt> строку вида:<br />
<br />
10.0.1.0/24 via 10.0.0.1<br />
<br />
В данном примере подразумевается, что VPN-сервер находится в сети 10.0.1.0/24 (например, имеет адрес 10.0.1.1), клиент — в сети 10.0.0.0/24 (и имеет адрес, например, 10.0.0.10), а маршрутизатор имеет адрес 10.0.0.1.<br />
<br />
Теперь, при использовании опции '<tt>defaulroute</tt>' для pppd (которая указывает, что необходимо изменить на вновь созданное подключение маршрут по-умолчанию), даже после замены маршрута по-умолчанию новым, сеть 10.0.1.0, в которой в нашем примере и находится VPN-сервер, останется доступной.<br />
<br />
Как более точечный вариант (применяется в alterator-net-pptp 0.5.x) можно использовать скрипты <tt>ifup-pre</tt> и <tt>ifdown-post</tt> в каталоге конфигурируемого PPP-интерфейса.<br />
<br />
Наример:<br />
<source lang="bash"><br />
#!/bin/sh<br />
# sample /etc/net/ifaces/ppp0/ifup-pre; replace variables yourself<br />
ip route add $VPN_SERVER via $DEF_GW<br />
</source><br />
<source lang="bash"><br />
#!/bin/sh<br />
# sample /etc/net/ifaces/ppp0/ifdown-post; replace variables yourself<br />
ip route del $VPN_SERVER via $DEF_GW<br />
</source><br />
<br />
Не забудьте подставить нужные IP-адреса (не сеть, где VPN-сервер, а ее /32 префикс CIDR) и выполнить команду: <br />
<tt>chmod +x ifup-pre ifdown-post</tt><br />
<br />
<div id="ipsectun"></div><br />
<br />
=== Настройка и использование IPSec-туннелей ===<br />
<br />
В ОС ALT Linux существует возможность использования статических IPSec-туннелей, которые реализуются модулем ядра ipsec_tunnel, который в свою очередь использует CryptoAPI ядер серии 2.4. Для этих интерфейсов, кроме <tt>TUNLOCAL</tt> и <tt>TUNREMOTE</tt>, обязательно требуется ещё параметр <tt>TUNSPI</tt>. Это уникальный номер туннеля, который должен иметь значение более 0x2000 и быть одинаковым на обоих хостах. Для настройки IPSec-туннелей требуется определение параметров либо шифрования, либо подписи, либо того и другого вместе. Опции <tt>CIPHER</tt> и <tt>DIGEST</tt> определяют соответственно алгоритмы и режимы шифрования и подписи, а опции <tt>CIPHERFILE</tt> и <tt>DIGESTFILE</tt> — имена файлов в конфигурационном каталоге интерфейса, которые содержат ключи шифрования и подписи. Для форсирования интерфейса, через который будут посылаться туннелированные пакеты, можно использовать опцию <tt>HOST</tt>.<br />
<br />
<div id="iprule"></div><br />
<br />
=== Сложная маршрутизация (или несколько таблиц маршрутизации) ===<br />
<br />
Под «сложной маршрутизацией» подразумевается наличие нескольких таблиц маршрутизации. Для их использования необходимо сконфигурировать правила ядра. В правилах по умолчанию можно увидеть следующее:<br />
<br />
<pre>$ /sbin/ip ru<br />
0: from all lookup local <br />
32766: from all lookup main <br />
32767: from all lookup default</pre><br />
<br />
Для настройки «сложной маршрутизациии» необходимо выполнить следующие операции:<br />
<br />
Шаг 1 : Сами таблицы определены в файле <tt>/etc/iproute2/rt_tables</tt>. Для создания конфигурации «сложной маршрутизации» необходимо вначале «создать» нужные таблицы в этом файле (если вы хотите использовать имена таблиц, а не числа).<br />
<br />
Шаг 2 : Необходимо заполнить таблицы. В конфигурационном каталоге интерфейса в файле <tt>ipv4route</tt> необходимо добавить маршрутные записи, не забывая указать <tt>table XX</tt>. Важно учитывать, что если строка начинается с режима ip route (add, del, replace, append, change), то по умолчанию будет использован режим <tt>DEFAULT_IPV4ROUTE_CMD</tt> (<tt>append</tt>).<br />
<br />
Шаг 3 : Определить правила в файле <tt>ipv4rule</tt>. Здесь есть особенности, связанные автоматической заменой/добавлением параметров. Если строка не начинается с операции del или add, то нужный режим будет подставлен автоматически. Это подходит для тех случаев, когда вам при "поднятии" интерфейса необходимо добавить правила, а при "опускании" — удалить. Возможность указывать del или add реализована для обратных случаев: если при "поднятии" интерфейса вам необходимо удалить правила, а при "опускании" — добавить. В этом случае add и del будут в нужный момент автоматически заменены на del и add.<br />
<br />
Пример такой конфигурации входит в [http://etcnet.org/ /etc/net] 0.7.12: (каталог документации examples/routing-LARTC-1/)<br />
<br />
<div id="wireless"></div><br />
<br />
=== Простое переключение маршрутов ===<br />
<br />
Пусть имеется eth-интерфейс, который используется постоянно, и настроен маршрут по умолчанию.<br />
Часто бывает необходимость настроить второй маршрут по умолчанию через беспроводной интерфейс,<br />
но с меньшей метрикой, чем у проводного интерфейса.<br />
В этом случае при поднятии WI-FI маршрут по умолчанию «развернется» в нужную сторону.<br />
<br />
Например:<br />
<br />
Для eth-интерфейса файл настроек <tt>/etc/net/ifaces/eth0/ipv4route</tt> будет таким:<br />
<pre>default via 192.168.3.254 metric 10</pre><br />
а для WI-FI-интерфейса файл настроек <tt>/etc/net/ifaces/ath0/ipv4route</tt> таким:<br />
<pre>default via 192.168.123.1 metric 5</pre><br />
<br />
=== Беспроводный Ethernet (или настройка WI-FI) ===<br />
Большинство беспроводных интерфейсов сейчас представлено системе как интерфейсы Ethernet. Соответственно беспроводный интерфейс будет иметь <tt>[https://bugzilla.altlinux.org/show_bug.cgi?id=6283 TYPE=eth]</tt>. Чтобы интерфейс нормально функционировал, необходимо кроме загрузки модуля с параметрами, воспользоваться утилитами <tt>iwconfig</tt> из пакета wireless-tools или <tt>wpa_supplicant</tt> из такого же пакета. Вместо того, чтобы запускать их вручную, можно поместить в конфигурационный каталог интерфейса файл <tt>iwconfig</tt> с командами iwconfig или файл <tt>wpa_supplicant.conf</tt> с конфигурацией wpa_supplicant. Они будут использованы автоматически.<br />
<br />
Пример [http://hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wireless.html конфигурации] (совместно с <tt>[http://ndiswrapper.sourceforge.net/ ndiswrapper]</tt>):<br />
<br />
Файл: <tt>/etc/net/ifaces/wlan0/options</tt><br />
<pre>TYPE=eth<br />
MODULE=ndiswrapper<br />
NEVER_RMMOD=yes<br />
BOOTPROTO=dhcp<br />
USE_HOTPLUG=no<br />
ONBOOT=no</pre><br />
<br />
Файл: <tt>/etc/net/ifaces/wlan0/iwconfig</tt><br />
<pre>essid default<br />
#key bababababa</pre><br />
<br />
<br />
Еще один пример использования etcnet для настройки беспроводной сети:<br />
<br />
Файл: <tt>/etc/net/ifaces/wlan0/options</tt><br />
<pre>TYPE=eth<br />
USE_HOTPLUG=NO<br />
BOOTPROTO=static<br />
module=ipw2200<br />
WPA_DRIVER=wext</pre><br />
<br />
Файл: <tt>/etc/net/ifaces/wlan0/iwconfig</tt><br />
<pre>essid homenet<br />
mode 1<br />
ap 00:11:D8:22:AD:0D<br />
channel 3<br />
rate 11M</pre><br />
<br />
Файл: <tt>/etc/net/ifaces/wlan0/wpa_supplicant.conf</tt><br />
<pre>ctrl_interface=/var/run/wpa_supplicant<br />
ctrl_interface_group=0<br />
eapol_version=1<br />
ap_scan=1<br />
fast_reauth=1<br />
<br />
network={<br />
ssid="homenet"<br />
bssid=00:11:D8:22:AD:0D<br />
proto=WPA<br />
key_mgmt=WPA-PSK<br />
pairwise=CCMP TKIP<br />
group=TKIP<br />
psk="this is my mega secret password string to wpa supplicant"<br />
priority=2<br />
}</pre><br />
<br />
Если вы хотите воспользоваться WPS:<br />
# создайте <tt>/etc/net/ifaces/wlan0/wpa_supplacant.conf</tt> следующего вида:<br />
<pre><br />
ctrl_interface=/var/run/wpa_supplicant<br />
update_config=1<br />
</pre><br />
# поднимите беспроводной интерфейс (ifup wlan0)<br />
# запустите wpa_cli и дайте команды wps_pbc (после этого нужно соответственно нажать кнопку WPS на точке доступа и подождать окончания обмена данными) и save_config (для записи конфигурации в <tt>wpa_supplicant.conf</tt>). Или же можно воспользоваться утилитой wpa_gui, отображающей процесс более наглядно.<br />
<br />
<div id="sysctl"></div><br />
<br />
=== Использование автодополнения в sysctl.conf ===<br />
<br />
В конфигурационном каталоге интерфейса может находиться файл <tt>sysctl.conf</tt>, в котором можно перечислить переменные <tt>sysctl(8)</tt>. Но переменные могут быть как общесистемными, так и относящимися к интерфейсу — описание переменных можно почитать в [http://gazette.linux.ru.net/rus/articles/index-ipsysctl-tutorial.html http://gazette.linux.ru.net/rus/articles/index-ipsysctl-tutorial.html]. Естественно, запись в sysctl.conf настроек вида <tt>net.ipv4.conf.eth0.log_martians = 1</tt> достаточно неудобна, а при переименовании интерфейса велик риск не отредактировать файл <tt>sysctl.conf</tt> соответствующим образом.<br />
<br />
Эта проблема решается следующим способом : производится запись в файл только имени переменной и значение, а система [http://etcnet.org/ /etc/net] сама найдет путь к этой переменной и вызовет <tt>sysctl</tt> с полным именем. <br />
<br />
Пример содержания файла <tt>sysctl.conf</tt>:<br />
<pre>log_martians=1<br />
rp_filter=1</pre><br />
<br />
<div id="profiles"></div><br />
<br />
=== Подключение к Wi-Fi с сертификатом на аппаратном токене ===<br />
Для беспроводного подключения в корпоративных сетях могут использоваться сертификаты, записанные на аппаратном токене, например, Aladdin eToken. Для настройки такого подключения необходимо использовать <tt>/etc/net/ifaces/wlan0/wpa_supplicant.conf</tt>.<br />
<pre><br />
ctrl_interface=/var/run/wpa_supplicant<br />
ctrl_interface_group=wheel<br />
#eapol_version=1<br />
#ap_scan=2<br />
#fast_reauth=1<br />
pkcs11_engine_path=/usr/lib/openssl/engines/engine_pkcs11.so<br />
pkcs11_module_path=/usr/lib/libeTPkcs11.so<br />
update_config=0<br />
<br />
network={<br />
ssid="test"<br />
key_mgmt=WPA-EAP<br />
pairwise=CCMP TKIP<br />
group=CCMP TKIP<br />
eap=TLS<br />
identity="email@address.ru"<br />
engine_id="pkcs11"<br />
key_id="xxxxxxxxx"<br />
cert_id="xxxxxxxxx"<br />
engine=1<br />
}<br />
</pre><br />
где key_id и cerd_id взяты из вывода команды<br />
<pre><br />
# pkcs11-tool --module /usr/lib/libeTPkcs11.so -O -l<br />
</pre><br />
<br />
Используются оригинальные ("родные") драйвера Aladdin - pkiclient-5.00.28-0, и пакет openssl-engine_pkcs11-0.1.5-alt1.<br />
<br />
=== Профили конфигурации ===<br />
<br />
==== Определение профилей ====<br />
Профиль — именованный вариант конфигурации, в той или иной степени изменяющий базовую конфигурацию системы. Профили могут быть применены, например, для конфигурации ноутбука в разных сетевых окружениях, или при подготовке новой или тестовой конфигурации с возможностью быстрого возврата к старой. Практически профили реализуются следующим образом: для какого-либо из файлов, составляющих общесистемную конфигурацию или конфигурацию интерфейса, создаётся альтернативный вариант, который отличается добавлением в конце названия файла знака # и имени профиля.<br />
<br />
Например, пусть единственное отличие между профилями заключается в том, какой модуль ядра будет загружен для интерфейса eth0. В этом случае файл <tt>/etc/net/ifaces/eth0/options</tt> необходимо скопировать в <tt>/etc/net/ifaces/eth0/options#profile1</tt> и изменить значение переменной <tt>MODULE</tt> в одном из них. Далее при использовании конфигурации по умолчанию будет использован файл <tt>options</tt>, а при использовании профиля profile1 — файл <tt>options#profile1</tt>. Если при этом для назначения интерфейсу имени используется файл <tt>/etc/net/iftab</tt>, то скорее всего необходимо будет создать соответствующий файл <tt>/etc/net/iftab#profile1</tt>, так как другой модуль ядра указывает на другой физический интерфейс и исходный файл <tt>iftab</tt> работать не будет.<br />
<br />
Профили могут использоваться также и для отключения каких-то параметров конфигурации. Например, если используется файл <tt>ipv4route</tt> для установки маршрутов для интерфейса, то можно создать файл нулевого размера <tt>ipv4route#profile2</tt>, чтобы при использовании профиля profile2 никаких маршрутов не конфигурировалось.<br />
<br />
==== Выбор профиля при загрузке ====<br />
Если при загрузке системы ядру был передан параметр netprofile, то его значение будет использовано как имя профиля по умолчанию. Это может быть использовано для создания собственных пунктов меню загрузчиков LILO и GRUB с заранее определённым профилем сетевой конфигурации. Заданный таким образом профиль может быть далее переопределён другими методами. Следует понимать разницу между различными конфигурациями и различными результатами применения одной конфигурации. Например, если в двух разных сетях используется DHCP, то смысла в разных профилях конфигурации нет.<br />
<br />
Для загрузчика LILO секции <tt>/etc/lilo.conf</tt> могут выглядеть следующим образом:<br />
<pre>image=/boot/vmlinuz-up<br />
label=linux-up home<br />
append=" netprofile=home"<br />
[...]<br />
image=/boot/vmlinuz-up<br />
label=linux-up office<br />
append=" netprofile=office"<br />
[...]</pre><br />
Для приведённого примера необходимо будет создать варианты для файлов, отличающихся в профилях home и office, и можно будет выбирать при загрузке, какой из профилей необходимо использовать. Использование этого метода удобно, если смена сетевого окружения происходит синхронно с загрузкой системы.<br />
<br />
==== Выбор профиля по умолчанию ====<br />
Если требуется, чтобы определенный профиль конфигурации использовался по умолчанию, то необходимо записать его название в файл <tt>/etc/net/profile</tt>. Этот метод имеет приоритет над параметром ядра netprofile. Использование такого способа выбора профиля целесообразно, когда переключение между конфигурациями происходит реже, чем перезагрузка системы.<br />
<br />
==== Смена профиля во время работы ====<br />
Если требуется переконфигурировать сеть без перезагрузки или редактирования файла {{path|/etc/net/profile}}, то следует использовать параметры сервиса network, описанные в разделе [[#restart, reload и другие команды|restart, reload и другие команды]]. Этот метод имеет приоритет над профилем по умолчанию и профилем, выбранным при загрузке. Целесообразно его использовать, если смена сетевого окружения происходит чаще, чем перезагрузка системы.<br />
<br />
==== Определение профиля во время конфигурации интерфейса ====<br />
Если в каталоге конфигурации интерфейса существует исполняемый файл ненулевого размера с именем <tt>selectprofile</tt>, то этот файл будет выполнен и первое слово первой строки его стандартного вывода использовано как имя профиля, которое должно быть использовано для конфигурации данного интерфейса. Этот метод имеет приоритет над всеми остальными методами. Исходной задачей, требующей такого решения, являлось конфигурирование беспроводного интерфейса в зависимости от доступных точек доступа.<br />
<br />
Следует учитывать, что число вызовов файла <tt>selectprofile</tt> может меняться в зависимости от контекста и время его выполнения может быть различным, поэтому при написании такого файла следует учитывать, что первым параметром будет являться имя текущего сценария. В настоящее время это могут быть ifup*, ifdown*, setup* и shutdown*. Для приведённого выше примера имеет смысл реагировать только на вызовы из ifup или ifup-common.<br />
<br />
== References ==<br />
<br />
<references/><br />
<br />
{{Category navigation|title=etcnet|category=etcnet|sortkey=*}}</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=FAQ&diff=16763FAQ2010-11-09T01:10:44Z<p>EvgeniiTerechkov: typo fixed</p>
<hr />
<div>'''FAQ''' — ответы на часто задаваемые вопросы. Вы можете также [[FAQ/Предложения|предложить свой вопрос]].<br />
<br />
Другие категории документов:<br />
* [[:Категория:Documentation|Документация]]<br />
* [[:Категория:HOWTO|HOWTO]]<br />
* [[:Категория:Справочники|Справочники]]<br />
* [[:Категория:Руководства|Руководства]]<br />
<br />
== Общие вопросы ==<br />
<br />
=== Что такое ALT Linux? ===<br />
ALT Linux — это название коммерческой компании и торговая марка, под которой распространяются дистрибутивы и другое ПО, разрабатываемые сообществом ALT Linux Team и OOO «Альт Линукс»:<br />
* ALT Linux Team — международная русскоговорящая команда разработчиков свободного программного обеспечения. Основное направление деятельности ALT Linux Team — проект Sisyphus,<br />
* ООО «Альт Линукс» — коммерческая организация, занимающаяся, в числе прочего, разработкой, продажей и поддержкой решений и дистрибутивов ALT Linux,<br />
* Дистрибутивы ALT Linux — дистрибутивы GNU/Linux, создаваемые на базе Sisyphus и стабильных веток репозитория.<br />
<br />
ООО «Альт Линукс» всячески поддерживает ALT Linux Team, но при этом команда действует независимо от коммерческой компании.<br />
<br />
=== Чем занимается компания ООО «Альт Линукс»? ===<br />
ALT Linux выпускает операционные системы со времени своего основания в 2001 году и предлагает ряд дистрибутивов различного назначения: настольные системы для дома и офиса, серверные и многоцелевые универсальные системы, сертифицированные системы для организаций, которым требуется защищённость, удостоверенная компетентными органами.<br />
<br />
Более подробно о направлениях деятельности компании вы можете ознакомится в [http://www.altlinux.ru/go/about-company/sphere-of-activity/ соответствующем разделе сайта компании].<br />
<br />
=== Что такое свободное программное обеспечение? ===<br />
Свободное программное обеспечение — программное обеспечение, в которых права пользователя («свободы») на неограниченные запуск, изучение, распространение и изменение (совершенствование) программ защищены юридически при помощи свободных лицензий.<br />
<br />
Существует огромное количество самых различных свободных программ, так, в частности, из свободного программного обеспечения с помощью свободных инструментов можно построить полноценную операционную систему и снабдить её прикладными программами для решения самых разных задач. Такие «сборки» называются ''дистрибутивами''.<br />
<br />
=== Что такое Linux? ===<br />
[http://ru.wikipedia.org/wiki/Linux GNU/Linux] (краткое название — Linux) — общее название UNIX-подобных операционных систем на основе одноимённого ядра и собранных для него библиотек и системных программ, разработанных в рамках [http://www.gnu.org/home.ru.html проекта GNU]. Распространяемая операционная система Linux включает в себя, помимо ядра и системных библиотек, ещё большое количество прикладного программного обеспечения. Такой набор называется [http://ru.wikipedia.org/wiki/Дистрибутив_операционной_системы дистрибутивом].<br />
<br />
=== Для чего можно использовать Linux? ===<br />
Операционную систему Linux можно использовать для любых задач пользователя. Начиная от простых задач (редактирование документов, просмотр Интернета и воспроизведения мультимедиа) до профессионального использования в различных видах деятельности.<br />
<br />
=== Правда, что Linux бесплатный? ===<br />
Операционная система Linux является свободным программным обеспечением. Для того, что бы начать использовать Linux, достаточно просто скачать его из Интернета или купить коробочную версию, а после свободно использовать и распространять его (если иное не оговорено в лицензионном соглашении дистрибутива, который может содержать несвободное программное обеспечение). При этом Linux не имеет ограничения на количество машин, поэтому устанавливать одну копию можно куда и сколько угодно. При покупке коробочной версии вы платите только за носитель, коробку с документацией и уведомлением о правах, доставку и техническую поддержку, но не за само программное обеспечение.<br />
<br />
=== В чём отличие Linux от Windows? ===<br />
Операционная система Linux является свободным программным обеспечением, а Windows — нет.<br />
<br />
Не нужно рассматривать Linux как бесплатную замену Windows — это принципиально разные операционные системы, хотя и схожие по внешнему виду, но отличающиеся ядром, системным и прикладным программным обеспечением. Несмотря на то, что на Linux вы можете как работать с офисными документами, созданными в Windows, так и запускать исполняемые файлы Windows, полной совместимости с Windows добиться невозможно в силу несвободной природы Windows.<br />
<br />
Кроме того, открытая модель разработки ядра Linux, системных и прикладных программ подтолкнула исследования в безопасности и управлении пакетами ПО, вследствие чего Linux приобрёл следующие отличительные черты:<br />
* более высокий уровень безопасности системы по сравнению с системами, разрабатываемыми в закрытых проектах. Основные компоненты Linux подвергаются аудиту мировыми экспертами в безопасности.<br />
* потенциально бесконечное время жизни единожды установленной операционной системы. Детально продуманная система управления пакетами программ позволяет устанавливать, обновлять и удалять приложения и системные компоненты без накопления энтропии в системе.<br />
* как следствие, возможность обновления операционной системы и прикладных программ без переустановки системы.<br />
<br />
=== Правда, что работа в Linux — это работа в консоли? ===<br />
По умолчанию после установки пользователь сразу попадает в графическую среду, которая очень проста и понятна даже для пользователей, которые раньше работали только в операционной системе Windows. В Linux пользователь может полноценно работать, не прибегая к консоли, однако её использование позволит более эффективно решать некоторые задачи.<br />
<br />
=== Правда, что установить Linux сложно? ===<br />
Установка операционной системы Linux очень проста, она выполняется в графической оболочке с поддержкой мышки. По каждому шагу установки в случае затруднений можно вызвать справку, в которой содержатся пояснения для чего служит данный этап установки. Также будет установлен загрузчик, который позволит загружать как сам Linux, так и установленную Windows (в случае её наличия), а также получать доступ к файлам на дисках Windows.<br />
<br />
=== Что такое дистрибутив? ===<br />
Дистрибутив Linux — это не просто собранные вместе операционная система и набор приложений, это интегрированная рабочая среда, предназначенная для решения тех или иных задач пользователей. OOO «Альт Линукс» выпускает дистрибутивы, ориентированные как на начинающих, так и на опытных пользователей, специализированные и универсальные.<br />
<br />
=== Почему ALT Linux развивается самостоятельно, а не дорабатывает другой популярный дистрибутив? ===<br />
В ALT Linux Team много сильных разработчиков, желающих полностью определять технологическое развитие дистрибутива, что невозможно при доработке какого-либо другого дистрибутива.<br />
<br />
=== Чем отличаются дистрибутивы ALT Linux от других дистрибутивов? ===<br />
Подробный перечень отличий дистрибутивов ALT Linux можно найти в разделе [[Features|Особенности ALT Linux]].<br />
<br />
=== Чем различаются дистрибутивы ALT Linux между собой? ===<br />
Дистрибутивы ALT Linux отличаются друг от друга кругом решаемых задач, комплектацией программного обеспечения, дизайном.<br />
<br />
=== Как можно ознакомиться с продуктами ALT Linux? ===<br />
Ознакомиться с продуктами ALT Linux можно [http://altlinux.ru/products/ в соответствующем разделе] на официальном сайте.<br />
<br />
=== Оказывает ли ООО «Альт Линукс» техническую поддержку? ===<br />
ООО «Альт Линукс» предлагает широкий спектр услуг по установке, настройке, эксплуатационному обслуживанию и устранению неисправностей в работе компьютеров под управлением ALT Linux. Подробнее об условиях оказания технической поддержки можно ознакомиться [http://altlinux.ru/users/users-support/ на соответствующем разделе] официального сайта.<br />
<br />
=== Есть ли у ALT Linux сообщество? ===<br />
Один из главных успехов ООО «Альт Линукс» — организация активного сообщества разработчиков и пользователей свободных программ, члены которого общаются друг с другом, в основном, посредством списков рассылки. Сообщество объединяет людей самых разных профессий и убеждений, но один интерес свойствен всем участникам — это интерес к миру свободных программ. Общение в сообществе осуществляется [http://www.altlinux.org/MailingLists в списках рассылки], [http://forum.altlinux.org/ на форуме] и [http://www.altlinux.org/IRC в IRC-канале].<br />
<br />
=== Как мне поучаствовать в разработке продуктов ALT Linux? ===<br />
Действуйте согласно «[[Руководство начинающего мейнтейнера ALT Linux Team|Руководству начинающего мейнтейнера ALT Linux Team]]».<br />
<br />
=== Я нашёл ошибку в дистрибутиве, куда сообщить? ===<br />
Об ошибках можно сообщить на сайте {{altbug}}.<br />
Перед использованием багзиллы ознакомьтесь с [[BugTracking/BugzillaMiniHowto|кратким руководством по её использованию]].<br />
<br />
=== Где мне найти документацию по ALT Linux? ===<br />
Документацию можно найти на сайтах [http://www.altlinux.org www.altlinux.org] и на [http://heap.altlinux.org/alt-docs/ heap.altlinux.org].<br />
<br />
=== Как мне связаться с ООО «Альт Линукс»? ===<br />
Связаться с ООО «Альт Линукс» можно по электронной почте. Адреса электронной почты можно найти на официальном сайте в разделе «[http://altlinux.ru/go/about-company/contacts/ Контакты]».<br />
<br />
== Установка операционной системы и программ ==<br />
<br />
=== Где и как искать программы? ===<br />
Обратитесь к разделу [[Где и как искать программы]]<br />
<br />
=== Как поставить программу? ===<br />
Прочтите раздел [[Управление пакетами]]<br />
<br />
=== Как обновить систему? ===<br />
[http://forum.altlinux.org/index.php/topic,4487.0.html Обновление системы. Подробное описание для новичков!] (на форуме)<br />
<br />
=== Как поставить Skype ===<br />
<br />
apt-get install http://fly.osdn.org.ua:8080/~drool/skype/skype-2.1.0.81-alt1.i586.rpm<br />
<br />
(Для [[Branch 4.0]] подойдёт [http://fly.osdn.org.ua:8080/~drool/skype/skype-2.1.0.47-alt1.i586.rpm skype-2.1.0.47-alt1.i586.rpm], который не требует новейшей {{pkg|libstdc++}}. Ещё на каких-то системах мне помогало сделать skype рабочим избавление от [[SoundPolicy#PulseAudio|pulseaudio]], например, {{cmd|chmod a-x /usr/bin/pulseaudio}}.)<br />
<br />
;См. также:<br />
* [[Skype]]<br />
* [[fsi:DenisSmirnov/WhyNotSkype|DenisSmirnov/WhyNotSkype]];<br />
* [[Вебкамера в Skype]].<br />
<br />
=== Как поставить KDE4? ===<br />
Если у вас Sisyphus или p5 branch, установите один из следующих пакетов:<br />
* '''kde4''' (полный набор)<br />
* '''kde4-small''' (популярные приложения)<br />
* '''kde4-mini''' (минимальный набор)<br />
* '''kde4-devel''' (всё для разработчика)<br />
<br />
Если таких пакетов для вашего бранча нет, выполните <br />
<pre>apt-get install `apt-cache search ^kde4| grep ^kde4| grep -v devel| sed "s|[[:space:]].*||"`</pre><br />
<br />
KDE4 хранит данные пользователя в $HOME/.kde4. Для миграции настроек скопируйте старые параметры:<br />
cp -R ~/.kde ~/.kde4<br />
<br />
И не забудьте перейти на новый KDM:<br />
service dm restart<br />
<br />
В диалоге выберите сеанс «KDE».<br />
Все программы будут видны из меню KDE4. Программы от KDE4 будут видны только из меню KDE4. Одноимённые из KDE4 будут перекрывать те, что из KDE3 (например, если хотите везде использовать amarok-1.4, просто удалите kde4-amarok).<br />
<br />
=== Как изменить параметры окна входа в систему KDM в KDE4 ===<br />
<br />
Выполните<br />
/usr/lib/kde4/libexec/kdesu kcmshell4 kdm<br />
<br />
=== Как подключить диски NTFS ===<br />
<br />
При установке дистрибутивов диски с ext3, fat и ntfs подключаются на запись автоматически, для них создаются соответствующие записи в /etc/fstab. Если этого не произошло (например, диск подключили после установки), то алгоритм следующий:<br />
1. Откройте терминал<br />
2. В терминале выполните:<br />
<br />
/sbin/fdisk -l | grep NTFS<br />
<br />
Например, может быть такой вывод<br />
<br />
[cas@cas ~]$ /sbin/fdisk -l | grep NTFS<br />
/dev/sda1 * 1 9771 78480352+ 7 HPFS/NTFS<br />
/dev/sda3 19255 19458 1626112 7 HPFS/NTFS<br />
<br />
3. Теперь под правами root надо занести эти диски в файл '''/etc/fstab'''. В той же консоли выполните (после первой команды укажите пароль root):<br />
<br />
su - <br />
mkdir /mnt/sda1<br />
echo "/dev/sda1 /mnt/sda1 ntfs-3g locale=ru_RU.UTF-8,dmask=0,fmask=0111 0 0" >> /etc/fstab<br />
mount /mnt/sda1<br />
<br />
(вместо sda1 можете подставить соответствующий раздел на вашем компьютере).<br />
<br />
== Задачи пользователя ==<br />
<br />
=== Как подключиться к удалённому рабочему столу Windows из ALT Linux? ===<br />
Используйте программу [[rdesktop]].<br />
<br />
=== Как автоматически подключать сетевые диски, если я использую NetworkManager ===<br />
Добавьте параметр '''_netdev''' у подключаемых сетевых дисков в ''/etc/fstab''. Например:<br />
altair:/space /mnt/net nfs nolock,_netdev 0 0<br />
После этого сетевые диски будут подключаться при подключении к сети через NetworkManager<br />
<br />
=== Как подключить принтер ===<br />
<br />
;Универсальный способ<br />
:Через меню: ''Система -> Manage printers''<br />
:В веб-браузере набрать адрес: '''http://localhost:631''' и в веб-интерфейсе настройки сервера CUPS добавить принтер.<br />
;В KDE3<br />
:Через меню: ''Настройка -> Принтеры'' (включите режим администратора)<br />
;В KDE4<br />
/usr/lib/kde4/libexec/kdesu kcmshell4 system-config-printer-kde<br />
<br />
Если служба печати (cups) не запущена, запустите её (под пользователем root):<br />
/sbin/service cups start<br />
/sbin/chkconfig cups on<br />
<br />
=== Как работать с сетевым окружением в XFCE ===<br />
<br />
[http://forum.altlinux.org/index.php/topic,6545.msg96069.html#msg96069 Через fuse-smb]<br />
<br />
=== Если не запускается VirtualBox из меню ===<br />
<br />
Для запуска VirtualBox пользователь должен быть включен в группу '''vboxusers''' (под root:<br />
gpasswd -a имя_пользователя vboxusers<br />
Пользователю ''имя_пользователя'' после этого нужно перезапустить сеанс.<br />
<br />
(это ограничение связано с необходимыми правами на устройства, необходимые для виртуализации VirtualBox).<br />
<br />
== Сервер ==<br />
<br />
=== Как поставить Apache с поддержкой PHP? ===<br />
apt-get install apache2-mod_php5<br />
a2enmod mod_php5<br />
service httpd2 restart<br />
<br />
=== Как сделать из сервера LDAP адресную книгу для Thunderbird ===<br />
<br />
Вам нужно опубликовать LDAP-сервер. Для этого в файле '''/etc/sysconfig/ldap'''<br />
добавьте внешний IP сервера в параметр SLAPDURLLIST:<br />
<br />
SLAPDURLLIST="'ldap://localhost/ ldap://10.1.0.18/ ldaps:///'"<br />
<br />
(в примере добавили доступ по обычному LDAP-протоколу к ldap://10.1.0.18/, адрес сервера можно узнать командой ip a). <br />
<br />
После этого перезапустите службу:<br />
service slapd restart<br />
<br />
== Администрирование ==<br />
<br />
=== Как перейти в режим суперпользователя (переключиться в root)? ===<br />
В Терминале введите команду:<br />
su -<br />
далее укажите пароль суперпользователя (root). Подробности — в разделе [[Su]]. Если пишет 'Permission denied', пользователь (имя и группы можно узнать командой '''id'''), с которого осуществляется переключение, не входит в группу '''wheel''' <br />
Добавить пользователя ''user'' в эту группу можно командой (под правами root, например, войдя на текстовыую консоль по комбинации клавиш Alt+F2):<br />
gpasswd -a user wheel<br />
<br />
=== Как восстановить пароль пользователя root? ===<br />
<br />
Загрузив систему с параметром '''init=/bin/sh''', поменять пароль.<br />
<br />
Подробнее, и другие способы: [[Восстановление пароля администратора]].<br />
<br />
Ещё совет: настройте себе [[sudo]], если Вы пока ещё не забыли пароль root-а. Если для Вас это допустимо по соображениям безопасности, то будет и чем-то удобнее, и проблема забывания пароля root-а вдруг не станет большой проблемой.<br />
<br />
=== Как восстановить загрузчик Linux ===<br />
<br />
[[Восстановление_загрузочной_записи]]<br />
<br />
== Поддержка оборудования ==<br />
<br />
=== Поддерживается ли моё оборудование XYZ? ===<br />
<br />
Так как разновидностей оборудования очень много, составить единый список поддерживаемого в ALT Linux оборудования невозможно. Поэтому можете найти информацию о поддержки различных устройств в следующих разделах:<br />
* [[HCL|Список поддерживаемого ALT Linux оборудования]] (не полный)<br />
* [http://www.openprinting.org/printers Список принтеров, поддерживаемых в Linux]<br />
* [http://www.sane-project.org/sane-mfgs.html Список сканеров, поддерживаемых в Linux]<br />
<br />
=== Как обеспечить работы интерактивной доски SmartBoard в p5 и более поздних бранчах? ===<br />
<br />
В файле ''/etc/X11/xorg.conf'' в разделе '''ServerFlags''' добавьте параметр<br />
Option "AutoAddDevice" "False"<br />
После этого перезапустите графический сеанс. [<br />
http://www.spohelp.ru/forums/13-drayvery-i-linux/topics/321-smartboard-i-novye-yadra?page=3#sbposts-9957 Пошаговая инструкция].<br />
<br />
== Разработка ==<br />
<br />
=== Как мне собрать свой пакет? ===<br />
<br />
Прочтите [[Краткое руководство по сборке пакета]]<br />
<br />
{{Category navigation|title=FAQ|category=FAQ|sortkey=*}}</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Grub&diff=16718Grub2010-11-04T14:52:24Z<p>EvgeniiTerechkov: Раздел про поддержку последовательного порта</p>
<hr />
<div>[[Категория:Admin]]<br />
<br />
== Что такое GRUB? ==<br />
Wikipedia сообщает "GNU GRUB (англ. GRand Unified Bootloader) — загрузчик операционной системы от проекта GNU. GRUB позволяет пользователю иметь несколько установленных операционных систем и при включении компьютера выбирать одну из них для загрузки."<br />
[http://ru.wikipedia.org/wiki/Grub http://ru.wikipedia.org/wiki/Grub]<br />
<br />
== Зачем нужен GRUB если есть LILO? ==<br />
* Поддержка модулей Raid, LVM, файловых систем вкупе с интерактивным интерфейсом позволяют выбрать что загружать откуда угодно ''' в процессе загрузки ''' (а не установки загрузчика).<br />
* Возможность multiboot (для загрузки, к примеру, XEN)<br />
* Поддержка EFI<br />
<br />
== Как установить GRUB? ==<br />
* apt-get install grub2<br />
* grub-install /dev/sda (заменить /dev/sda на то устройство, куда хочетяся установить GRUB)<br />
* grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
Последний пункт выполняет генерацию конфига GRUB на основе шаблонов/скриптов в /etc/grub.d/. Редактировать полученный конфиг руками не рекомендуется т.к. он будет уничтожен следующей автогенерацией (выполняемой, к примеру, installkernel-ом).<br />
<br />
== Где отредактировать параметры ядра? ==<br />
*Параметры ядра содержатся в /etc/sysconfig/grub2<br />
*После редактирования этого файла нужно вызвать grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
== Как дописать свои собственные пункты меню? ==<br />
*Теоретически вам не должно хотеться этого делать. Расскажите (в рассылке sisyphus@, к примеру) зачем вам этого захотелось - возможно, придумается какой-то новый общий случай. <br />
*Если вам всё же хочется - допишите то, что считаете нужным в /etc/grub.d/40_custom<br />
**После редактирования этого файла нужно вызвать grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
== Как выбрать то, что будет загружаться автоматом? ==<br />
*Выберите нужный вам пункт 1 раз при загрузке. savedefault должен сохранять ваш выбор на будущее. <br />
*Не нравится такое поведение? Отключите GRUB_SAVEDEFAULT в /etc/sysconfig/grub2<br />
<br />
== Как загрузить Xen? ==<br />
Xen грузится с помощью multiboot:<br />
*проверить, что вы используете grub2 >= 1.98-alt11<br />
*apt-get install xen xen-libs xen-runtime xen-hypervisor<br />
*запустить grub-mkconfig -o /boot/grub/grub.cfg<br />
*выбрать соответствующий пункт при загрузке (savedefault запомнит выбор на будущее)<br />
<br />
== Как включить работу с последовательным портом? ==<br />
Примерно такими строчками в /etc/sysconfig/grub2:<br />
GRUB_TERMINAL='console serial'<br />
GRUB_SERIAL_COMMAND='serial --unit=0 --speed=115200'<br />
(см. [http://www.altlinux.org/SerialLogin#GRUB_.D0.B8_.D0.BF.D0.BE.D1.81.D0.BB.D0.B5.D0.B4.D0.BE.D0.B2.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D1.8B.D0.B9_.D0.BF.D0.BE.D1.80.D1.82 также]). Не забываем про grub-mkconfig.<br />
<br />
== Где почитать ещё? ==<br />
* Викиучебник (debian-related документация) http://ru.wikibooks.org/wiki/Grub_2, с небольшими изменениями применимо и у нас.<br />
* http://people.apache.org/~skitching/MineOfInformation/linux/Booting_Linux_on_x86_with_Grub2.html (англ.)</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=FAQ&diff=16668FAQ2010-10-28T02:11:05Z<p>EvgeniiTerechkov: /* Как подключиться к удалённому рабочему столу Windows из ALT Linux? */ - убрал мёртвую ссылку</p>
<hr />
<div>'''FAQ''' — ответы на часто задаваемые вопросы. Вы можете также [[FAQ/Предложения|предложить свой вопрос]].<br />
<br />
Другие категории документов:<br />
* [[:Категория:Documentation|Документация]]<br />
* [[:Категория:HOWTO|HOWTO]]<br />
* [[:Категория:Справочники|Справочники]]<br />
* [[:Категория:Руководства|Руководства]]<br />
<br />
== Общие вопросы ==<br />
<br />
=== Что такое ALT Linux? ===<br />
ALT Linux — это название коммерческой компании и торговая марка, под которой распространяются дистрибутивы и другое ПО, разрабатываемые сообществом ALT Linux Team и OOO «Альт Линукс»:<br />
* ALT Linux Team — международная русскоговорящая команда разработчиков свободного программного обеспечения. Основное направление деятельности ALT Linux Team — проект Sisyphus,<br />
* ООО «Альт Линукс» — коммерческая организация, занимающаяся, в числе прочего, разработкой, продажей и поддержкой решений и дистрибутивов ALT Linux,<br />
* Дистрибутивы ALT Linux — дистрибутивы GNU/Linux, создаваемые на базе Sisyphus и стабильных веток репозитория.<br />
<br />
ООО «Альт Линукс» всячески поддерживает ALT Linux Team, но при этом команда действует независимо от коммерческой компании.<br />
<br />
=== Чем занимается компания ООО «Альт Линукс»? ===<br />
ALT Linux выпускает операционные системы со времени своего основания в 2001 году и предлагает ряд дистрибутивов различного назначения: настольные системы для дома и офиса, серверные и многоцелевые универсальные системы, сертифицированные системы для организаций, которым требуется защищённость, удостоверенная компетентными органами.<br />
<br />
Более подробно о направлениях деятельности компании вы можете ознакомится в [http://www.altlinux.ru/go/about-company/sphere-of-activity/ соответствующем разделе сайта компании].<br />
<br />
=== Что такое свободное программное обеспечение? ===<br />
Свободное программное обеспечение — программное обеспечение, в которых права пользователя («свободы») на неограниченные запуск, изучение, распространение и изменение (совершенствование) программ защищены юридически при помощи свободных лицензий.<br />
<br />
Существует огромное количество самых различных свободных программ, так, в частности, из свободного программного обеспечения с помощью свободных инструментов можно построить полноценную операционную систему и снабдить её прикладными программами для решения самых разных задач. Такие «сборки» называются ''дистрибутивами''.<br />
<br />
=== Что такое Linux? ===<br />
[http://ru.wikipedia.org/wiki/Linux GNU/Linux] (краткое название — Linux) — общее название UNIX-подобных операционных систем на основе одноимённого ядра и собранных для него библиотек и системных программ, разработанных в рамках [http://www.gnu.org/home.ru.html проекта GNU]. Распространяемая операционная система Linux включает в себя, помимо ядра и системных библиотек, ещё большое количество прикладного программного обеспечения. Такой набор называется [http://ru.wikipedia.org/wiki/Дистрибутив_операционной_системы дистрибутивом].<br />
<br />
=== Для чего можно использовать Linux? ===<br />
Операционную систему Linux можно использовать для любых задач пользователя. Начиная от простых задач (редактирование документов, просмотр Интернета и воспроизведения мультимедиа) до профессионального использования в различных видах деятельности.<br />
<br />
=== Правда, что Linux бесплатный? ===<br />
Операционная система Linux является свободным программным обеспечением. Для того, что бы начать использовать Linux, достаточно просто скачать его из Интернета или купить коробочную версию, а после свободно использовать и распространять его (если иное не оговорено в лицензионном соглашении дистрибутива, который может содержать несвободное программное обеспечение). При этом Linux не имеет ограничения на количество машин, поэтому устанавливать одну копию можно куда и сколько угодно. При покупке коробочной версии вы платите только за носитель, коробку с документацией и уведомлением о правах, доставку и техническую поддержку, но не за само программное обеспечение.<br />
<br />
=== В чём отличие Linux от Windows? ===<br />
Операционная система Linux является свободным программным обеспечением, а Windows — нет.<br />
<br />
Не нужно рассматривать Linux как бесплатную замену Windows — это принципиально разные операционные системы, хотя и схожие по внешнему виду, но отличающиеся ядром, системным и прикладным программным обеспечением. Несмотря на то, что на Linux вы можете как работать с офисными документами, созданными в Windows, так и запускать исполняемые файлы Windows, полной совместимости с Windows добиться невозможно в силу несвободной природы Windows.<br />
<br />
Кроме того, открытая модель разработки ядра Linux, системных и прикладных программ подтолкнула исследования в безопасности и управлении пакетами ПО, вследствие чего Linux приобрёл следующие отличительные черты:<br />
* более высокий уровень безопасности системы по сравнению с системами, разрабатываемыми в закрытых проектах. Основные компоненты Linux подвергаются аудиту мировыми экспертами в безопасности.<br />
* потенциально бесконечное время жизни единожды установленной операционной системы. Детально продуманная система управления пакетами программ позволяет устанавливать, обновлять и удалять приложения и системные компоненты без накопления энтропии в системе.<br />
* как следствие, возможность обновления операционной системы и прикладных программ без переустановки системы.<br />
<br />
=== Правда, что работа в Linux — это работа в консоли? ===<br />
По умолчанию после установки пользователь сразу попадает в графическую среду, которая очень проста и понятна даже для пользователей, которые раньше работали только в операционной системе Windows. В Linux пользователь может полноценно работать, не прибегая к консоли, однако её использование позволит более эффективно решать некоторые задачи.<br />
<br />
=== Правда, что установить Linux сложно? ===<br />
Установка операционной системы Linux очень проста, она выполняется в графической оболочке с поддержкой мышки. По каждому шагу установки в случае затруднений можно вызвать справку, в которой содержатся пояснения для чего служит данный этап установки. Также будет установлен загрузчик, который позволит загружать как сам Linux, так и установленную Windows (в случае её наличия), а также получать доступ к файлам на дисках Windows.<br />
<br />
=== Что такое дистрибутив? ===<br />
Дистрибутив Linux — это не просто собранные вместе операционная система и набор приложений, это интегрированная рабочая среда, предназначенная для решения тех или иных задач пользователей. OOO «Альт Линукс» выпускает дистрибутивы, ориентированные как на начинающих, так и на опытных пользователей, специализированные и универсальные.<br />
<br />
=== Почему ALT Linux развивается самостоятельно, а не дорабатывает другой популярный дистрибутив? ===<br />
В ALT Linux Team много сильных разработчиков, желающих полностью определять технологическое развитие дистрибутива, что невозможно при доработке какого-либо другого дистрибутива.<br />
<br />
=== Чем отличаются дистрибутивы ALT Linux от других дистрибутивов? ===<br />
Подробный перечень отличий дистрибутивов ALT Linux можно найти в разделе [[Features|Особенности ALT Linux]].<br />
<br />
=== Чем различаются дистрибутивы ALT Linux между собой? ===<br />
Дистрибутивы ALT Linux отличаются друг от друга кругом решаемых задач, комплектацией программного обеспечения, дизайном.<br />
<br />
=== Как можно ознакомиться с продуктами ALT Linux? ===<br />
Ознакомиться с продуктами ALT Linux можно [http://altlinux.ru/products/ в соответствующем разделе] на официальном сайте.<br />
<br />
=== Оказывает ли ООО «Альт Линукс» техническую поддержку? ===<br />
ООО «Альт Линукс» предлагает широкий спектр услуг по установке, настройке, эксплуатационному обслуживанию и устранению неисправностей в работе компьютеров под управлением ALT Linux. Подробнее об условиях оказания технической поддержки можно ознакомиться [http://altlinux.ru/users/users-support/ на соответствующем разделе] официального сайта.<br />
<br />
=== Есть ли у ALT Linux сообщество? ===<br />
Один из главных успехов ООО «Альт Линукс» — организация активного сообщества разработчиков и пользователей свободных программ, члены которого общаются друг с другом, в основном, посредством списков рассылки. Сообщество объединяет людей самых разных профессий и убеждений, но один интерес свойствен всем участникам — это интерес к миру свободных программ. Общение в сообществе осуществляется [http://www.altlinux.org/MailingLists в списках рассылки], [http://forum.altlinux.org/ на форуме] и [http://www.altlinux.org/IRC в IRC-канале].<br />
<br />
=== Как мне поучаствовать в разработке продуктов ALT Linux? ===<br />
Действуйте согласно «[[Руководство начинающего мейнтейнера ALT Linux Team|Руководству начинающего мейнтейнера ALT Linux Team]]».<br />
<br />
=== Я нашёл ошибку в дистрибутиве, куда сообщить? ===<br />
Об ошибках можно сообщить на сайте {{altbug}}.<br />
Перед использованием багзиллы ознакомьтесь с [[BugTracking/BugzillaMiniHowto|кратким руководством по её использованию]].<br />
<br />
=== Где мне найти документацию по ALT Linux? ===<br />
Документацию можно найти на сайтах [http://www.altlinux.org www.altlinux.org] и на [http://heap.altlinux.org/alt-docs/ heap.altlinux.org].<br />
<br />
=== Как мне связаться с ООО «Альт Линукс»? ===<br />
Связаться с ООО «Альт Линукс» можно по электронной почте. Адреса электронной почты можно найти на официальном сайте в разделе «[http://altlinux.ru/go/about-company/contacts/ Контакты]».<br />
<br />
== Установка операционной системы и программ ==<br />
<br />
=== Где и как искать программы? ===<br />
Обратитесь к разделу [[Где и как искать программы]]<br />
<br />
=== Как поставить программу? ===<br />
Прочтите раздел [[Управление пакетами]]<br />
<br />
=== Как обновить систему? ===<br />
[http://forum.altlinux.org/index.php/topic,4487.0.html Обновление системы. Подробное описание для новичков!] (на форуме)<br />
<br />
=== Как поставить Skype ===<br />
<br />
apt-get install http://fly.osdn.org.ua:8080/~drool/skype/skype-2.1.0.81-alt1.i586.rpm<br />
<br />
(Для [[Branch 4.0]] подойдёт [http://fly.osdn.org.ua:8080/~drool/skype/skype-2.1.0.47-alt1.i586.rpm skype-2.1.0.47-alt1.i586.rpm], который не требует новейшей {{pkg|libstdc++}}. Ещё на каких-то системах мне помогало сделать skype рабочим избавление от [[SoundPolicy#PulseAudio|pulseaudio]], например, {{cmd|chmod a-x /usr/bin/pulseaudio}}.)<br />
<br />
;См. также:<br />
* [[Skype]]<br />
* [[fsi:DenisSmirnov/WhyNotSkype|DenisSmirnov/WhyNotSkype]];<br />
* [[Вебкамера в Skype]].<br />
<br />
=== Как поставить KDE4? ===<br />
Если у вас Sisyphus или p5 branch, установите один из следующих пакетов:<br />
* '''kde4''' (полный набор)<br />
* '''kde4-small''' (популярные приложения)<br />
* '''kde4-mini''' (минимальный набор)<br />
* '''kde4-devel''' (всё для разработчика)<br />
<br />
Если таких пакетов для вашего бранча нет, выполните <br />
<pre>apt-get install `apt-cache search ^kde4| grep ^kde4| grep -v devel| sed "s|[[:space:]].*||"`</pre><br />
<br />
KDE4 хранит данные пользователя в $HOME/.kde4. Для миграции настроек скопируйте старые параметры:<br />
cp -R ~/.kde ~/.kde4<br />
<br />
И не забудьте перейти на новый KDM:<br />
service dm restart<br />
<br />
В диалоге выберите сеанс «KDE».<br />
Все программы будут видны из меню KDE4. Программы от KDE4 будут видны только из меню KDE4. Одноимённые из KDE4 будут перекрывать те, что из KDE3 (например, если хотите везде использовать amarok-1.4, просто удалите kde4-amarok).<br />
<br />
=== Как изменить параметры окна входа в систему KDM в KDE4 ===<br />
<br />
Выполните<br />
/usr/lib/kde4/libexec/kdesu kcmshell4 kdm<br />
<br />
=== Как подключить диски NTFS ===<br />
<br />
При установке дистрибутивов диски с ext3, fat и ntfs подключаются на запись автоматически, для них создаются соответствующие записи в /etc/fstab. Если этого не произошло (например, диск подключили после установки), то алгоритм следующий:<br />
1. Откройте терминал<br />
2. В терминале выполните:<br />
<br />
/sbin/fdisk -l | grep NTFS<br />
<br />
Например, может быть такой вывод<br />
<br />
[cas@cas ~]$ /sbin/fdisk -l | grep NTFS<br />
/dev/sda1 * 1 9771 78480352+ 7 HPFS/NTFS<br />
/dev/sda3 19255 19458 1626112 7 HPFS/NTFS<br />
<br />
3. Теперь под правами root надо занести эти диски в файл '''/etc/fstab'''. В той же консоли выполните (после первой команды укажите пароль root):<br />
<br />
su - <br />
mkdir /mnt/sda1<br />
echo "/dev/sda1 /mnt/sda1 ntfs-3g locale=ru_RU.UTF-8,dmask=0,fmask=0111 0 0" >> /etc/fstab<br />
mount /mnt/sda1<br />
<br />
(вместо sda1 можете подставить соответствующий раздел на вашем компьютере).<br />
<br />
== Задачи пользователя ==<br />
<br />
=== Как подключиться к удалённому рабочему столу Windows из ALT Linux? ===<br />
Используйте программу [[rdesktop]].<br />
<br />
=== Как автоматически подключать сетевые диски, если я использую NetworkManager ===<br />
Добавьте параметр '''_netdev''' у подключаемых сетевых дисков в ''/etc/fstab''. Например:<br />
altair:/space /mnt/net nfs nolock,_netdev 0 0<br />
После этого сетевые диски будут подключаться при подключении к сети через NetworkManager<br />
<br />
=== Как подключить принтер ===<br />
<br />
;Универсальный способ<br />
:Через меню: ''Система -> Manage printers''<br />
:В веб-браузере набрать адрес: '''http://localhost:631''' и в веб-интерфейсе настройки сервера CUPS добавить принтер.<br />
;В KDE3<br />
:Через меню: ''Настройка -> Принтеры'' (включите режим администратора)<br />
;В KDE4<br />
/usr/lib/kde4/libexec/kdesu kcmshell4 system-config-printer-kde<br />
<br />
Если служба печати (cups) не запущена, запустите её (под пользователем root):<br />
/sbin/service cups start<br />
/sbin/chkconfig cups on<br />
<br />
=== Как работать с сетевым окружением в XFCE ===<br />
<br />
[http://forum.altlinux.org/index.php/topic,6545.msg96069.html#msg96069 Через fuse-smb]<br />
<br />
=== Если не запускается VirtualBox из меню ===<br />
<br />
Для запуска VirtualBox пользователь должен быть включен в группу '''vboxusers''' (под root:<br />
gpasswd -a имя_пользователя vboxusers<br />
Пользователю ''имя_пользователя'' после этого нужно перезапустить сеанс.<br />
<br />
(это ограничение связано с необходимыми правами на устройства, необходимые для виртуализации VirtualBox).<br />
<br />
== Сервер ==<br />
<br />
=== Как поставить Apache с поддержкой PHP? ===<br />
apt-get install apache2-mod_php5<br />
a2enmod mod_php5<br />
service httpd2 restart<br />
<br />
<br />
== Администрирование ==<br />
<br />
=== Как перейти в режим суперпользователя (переключиться в root)? ===<br />
В Терминале введите команду:<br />
su -<br />
далее укажите пароль суперпользователя (root). Подробности — в разделе [[Su]]. Если пишет 'Permission denied', пользователь (имя и группы можно узнать командой '''id'''), с которого осуществляется переключение, не входит в группу '''wheel''' <br />
Добавить пользователя ''user'' в эту группу можно командой (под правами root, например, войдя на текстовыую консоль по комбинации клавиш Alt+F2):<br />
gpasswd -a user wheel<br />
<br />
=== Как восстановить пароль пользователя root? ===<br />
<br />
Загрузив систему с параметром '''init=/bin/sh''', поменять пароль.<br />
<br />
Подробнее, и другие способы: [[Восстановление пароля администратора]].<br />
<br />
Ещё совет: настройте себе [[sudo]], если Вы пока ещё не забыли пароль root-а. Если для Вас это допустимо по соображениям безопасности, то будет и чем-то удобнее, и проблема забывания пароля root-а вдруг не станет большой проблемой.<br />
<br />
=== Как восстановить загрузчик Linux ===<br />
<br />
[[Восстановление_загрузочной_записи]]<br />
<br />
== Поддержка оборудования ==<br />
<br />
=== Поддерживается ли моё оборудование XYZ? ===<br />
<br />
Так как разновидностей оборудования очень много, составить единый список поддерживаемого в ALT Linux оборудования невозможно. Поэтому можете найти информацию о поддержки различных устройств в следующих разделах:<br />
* [[HCL|Список поддерживаемого ALT Linux оборудования]] (не полный)<br />
* [http://www.openprinting.org/printers Список принтеров, поддерживаемых в Linux]<br />
* [http://www.sane-project.org/sane-mfgs.html Список сканеров, поддерживаемых в Linux]<br />
<br />
=== Как обеспечить работы интерактивной доски SmartBoard в p5 и более поздних бранчах? ===<br />
<br />
В файле ''/etc/X11/xorg.conf'' в разделе '''ServerFlags''' добавьте параметр<br />
Option "AutoAddDevice" "False"<br />
После этого перезапустите графический сеанс. [<br />
http://www.spohelp.ru/forums/13-drayvery-i-linux/topics/321-smartboard-i-novye-yadra?page=3#sbposts-9957 Пошаговая инструкция].<br />
<br />
== Разработка ==<br />
<br />
=== Как мне собрать свой пакет? ===<br />
<br />
Прочтите [[Краткое руководство по сборке пакета]]<br />
<br />
{{Category navigation|title=FAQ|category=FAQ|sortkey=*}}</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Grub&diff=16613Grub2010-10-21T13:38:30Z<p>EvgeniiTerechkov: /* Как дописать свои собственные пункты меню? */ - очипятка</p>
<hr />
<div>[[Категория:Admin]]<br />
<br />
== Что такое GRUB? ==<br />
Wikipedia сообщает "GNU GRUB (англ. GRand Unified Bootloader) — загрузчик операционной системы от проекта GNU. GRUB позволяет пользователю иметь несколько установленных операционных систем и при включении компьютера выбирать одну из них для загрузки."<br />
[http://ru.wikipedia.org/wiki/Grub http://ru.wikipedia.org/wiki/Grub]<br />
<br />
== Зачем нужен GRUB если есть LILO? ==<br />
* Поддержка модулей Raid, LVM, файловых систем вкупе с интерактивным интерфейсом позволяют выбрать что загружать откуда угодно ''' в процессе загрузки ''' (а не установки загрузчика).<br />
* Возможность multiboot (для загрузки, к примеру, XEN)<br />
* Поддержка EFI<br />
<br />
== Как установить GRUB? ==<br />
* apt-get install grub2<br />
* grub-install /dev/sda (заменить /dev/sda на то устройство, куда хочетяся установить GRUB)<br />
* grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
Последний пункт выполняет генерацию конфига GRUB на основе шаблонов/скриптов в /etc/grub.d/. Редактировать полученный конфиг руками не рекомендуется т.к. он будет уничтожен следующей автогенерацией (выполняемой, к примеру, installkernel-ом).<br />
<br />
== Где отредактировать параметры ядра? ==<br />
*Параметры ядра содержатся в /etc/sysconfig/grub2<br />
*После редактирования этого файла нужно вызвать grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
== Как дописать свои собственные пункты меню? ==<br />
*Теоретически вам не должно хотеться этого делать. Расскажите (в рассылке sisyphus@, к примеру) зачем вам этого захотелось - возможно, придумается какой-то новый общий случай. <br />
*Если вам всё же хочется - допишите то, что считаете нужным в /etc/grub.d/40_custom<br />
**После редактирования этого файла нужно вызвать grub-mkconfig -o /boot/grub/grub.cfg<br />
<br />
== Как выбрать то, что будет загружаться автоматом? ==<br />
*Выберите нужный вам пункт 1 раз при загрузке. savedefault должен сохранять ваш выбор на будущее. <br />
*Не нравится такое поведение? Отключите GRUB_SAVEDEFAULT в /etc/sysconfig/grub2<br />
<br />
== Как загрузить Xen? ==<br />
Xen грузится с помощью multiboot:<br />
*проверить, что вы используете grub2 >= 1.98-alt11<br />
*apt-get install xen xen-libs xen-runtime xen-hypervisor<br />
*запустить grub-mkconfig -o /boot/grub/grub.cfg<br />
*выбрать соответствующий пункт при загрузке (savedefault запомнит выбор на будущее)<br />
<br />
== Где почитать ещё? ==<br />
* Викиучебник (debian-related документация) http://ru.wikibooks.org/wiki/Grub_2, с небольшими изменениями применимо и у нас.<br />
* http://people.apache.org/~skitching/MineOfInformation/linux/Booting_Linux_on_x86_with_Grub2.html (англ.)</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Xen&diff=16607Xen2010-10-19T23:40:13Z<p>EvgeniiTerechkov: /* Установка виртуальной машины */ - форматирование команд</p>
<hr />
<div>[[Категория:Admin]]<br />
{{викифицировать}}<br />
{{stub}}<br />
Осторожно пока UNDERCONSTRUCTION<br />
=== Введение ===<br />
Xen - это система [[ruwp:Виртуализация|виртуализации]]. Xen представляет собой паравиртуальный монитор виртуальных машин, т.е. позволяет запускать несколько операционных систем одновременно, либо с ядрами специального вида, либо немодифицированных (при наличии аппаратной поддержки паравиртуализации в CPU).<br />
<br />
==== Hypervisor ====<br />
Это собственно Xen - маленькое ядро (в разы меньше, чем ядро опероационной системы), загружаемое первым и управляющее работой виртуальных машин. Обычно находится в /boot/xen.gz. Гипервизор исполняется в нулевом круге защиты CPU. Гипервизор умеет управлять памятью, процессором и частично ACPI, а также предоставляет API гипервызовов (hypercall), с помощью которых ядра операционных систем в виртуальных машинах могут с ним общаться. Загрузившись, гипервизор загружает ядро dom0.<br />
<br />
==== Domain 0 ====<br />
Он же dom0 - привилегированная виртуальная машина, имеющая доступ к практически всему железу и имеющая права давать гипервизору команду на запуск новых виртуальных машин. На практике это обычная Linux-система, единственное, чем она ограничена - это объёмом памяти. Обычно в такой системе установлен минимальный набор программ, демон управления xen, утилиты для управления xen, утилиты для создания виртуальных машин, и программный сетевой мост (bridge) который позволяет другим виртуальным машинам попадать в сеть. Виртуальные жесткие диски, предоставляемые Xen, также экспортируются из dom0. Обычно это файлы подключеные через loopback/blktap, либо LVM тома.<br />
<br />
==== Domain U ====<br />
domU - это собственно виртуальная машина, запускаемая dom0. Получает свой участок памяти, жёсткие диски и сетевой интерфейс. Может быть запущена, остановлена, приостановлена, перезагруженна, задамплена на диск, перемещена в том числе без остановки на другую машину (live migration).<br />
<br />
==== Ядро xen-dom0 в ALT Linux ====<br />
<br />
Ядро dom0 может работать как в dom0, так и в domU, собрано со всеми стандартными опциями наших ядер.<br />
<br />
== Установка == <br />
=== Установка загрузчика === <br />
Для загрузки Xen требуется использование загрузчика, поддерживающего multiboot (grub поддерживает, lilo - нет).<br />
Про настройку grub можно почитать тут: [[Grub#Как загрузить Xen?]]<br />
<br />
=== Установка Xen ===<br />
==== Установка самого XEN ====<br />
<tt> # apt-get install xen-hypervisor xen-runtime xen-libs xen </tt><br />
<tt> # update-kernel -t xen-dom0 </tt><br />
<br />
Перезагружаемся в XEN, далее:<br />
<br />
<tt> # service xend start </tt><br />
<br />
Проверим, что все в порядке:<br />
<br />
<pre>[root@wintermute ~]# xm info<br />
host : wintermute.tld<br />
release : 2.6.18-xen-dom0-alt6.M40.1<br />
version : #1 SMP Tue Mar 4 22:42:44 MSK 2008<br />
machine : i686<br />
nr_cpus : 4<br />
nr_nodes : 1<br />
sockets_per_node : 2<br />
cores_per_socket : 1<br />
threads_per_core : 2<br />
cpu_mhz : 2392<br />
hw_caps : bfebfbff:00000000:00000000:00000080:00004400<br />
total_memory : 4095<br />
free_memory : 3540<br />
xen_major : 3<br />
xen_minor : 1<br />
xen_extra : .2<br />
xen_caps : xen-3.0-x86_32p<br />
xen_scheduler : credit<br />
xen_pagesize : 4096<br />
platform_params : virt_start=0xf5800000<br />
xen_changeset : unavailable<br />
cc_compiler : gcc version 4.1.1 20070105 (ALT Linux, build 4.1.1-alt11)<br />
cc_compile_by : builder<br />
cc_compile_domain : rio.altlinux.org<br />
cc_compile_date : Tue Mar 4 23:38:33 MSK 2008<br />
xend_config_format : 4<br />
</pre><br />
<br />
Поставим xend в автозапуск:<br />
<br />
<tt> # chkconfig xend on </tt><br />
<br />
==== Настройка сети в XEN ====<br />
Ещё есть проблема актуальная для XEN начиная с версии 3.2.0 - там страшно кривой скрипт для запуска сетевого бриджа. Решается она переносом настройки бриджа в /etc/net.<br />
<br />
===== Зачем нужен бридж? =====<br />
В XEN сеть реализована так: для каждой(в том число dom0) виртуальной машины создаётся n виртуальных сетевых интерфейсов. Каждый представляет собой две виртуальные сетевые карты соединенный между собой одна находящаяся в DomX под названием ethY, а другая в Dom0 под названием vifX.Y (где X - номер виртуальной машины а Y больше или равно 0 и меньше n). На этом то, что предоставляет Xen сам по себе, заканчивается.<br />
<br />
Далее вопрос: что с этим всем делать? <br />
<br />
Вариант 1. присвоить каждому интерфейсу по ip адресу. так чтобы каждая пара была в своей сети. Поскольку в этом варианте данные ходят между dom0 и каждым доменом в отдельности, при этом домены не имею выхода во внешнюю сеть этот вариант используется редко.<br />
<br />
Вариант 2. Продолжение первого, но при этом организовать например routing пакетов во внешнюю сеть и между виртуальными машинами. То есть dom0 становится роутером этой сети.<br />
<br />
Вариант 3. Продолжение 2го но ещё включается NAT.<br />
<br />
Вариант 4. Сделать bridge и объединить им реальную сетевую карту (она переименовывается в p<oldname>, интерфейс лишается ip и mac адресов) и коннекторы во все остальные виртуальные машины. то есть dom0 выполняет функцию свича. Любопытно что, в xen до 3.2 в dom0 ip и mac старой сетевухи присваивается интерфейсу ethY, а в 3.2 присваивается бриджу.<br />
<br />
Таким образом bidge является самым удобным способом работы виртуальных машин с сетью, так как для сети машина с xen выглядит как свич на котором висят машины.<br />
<br />
Для работы разных вариантов в xen есть скрипты по паре для разных вариантов, один (network-*) запускается при запуске системы и настраивает сеть в целом и vif-* который вызывается при старте каждого нового сетевого интерфейса в виртуальных машинах.<br />
<br />
===== Собственно настройка бриджа =====<br />
Стоит рассказать про настройку брижда подробнее, так как это самый удобный и востребованый вариант сети.<br />
<br />
==== Установка виртуальной машины ====<br />
Делаем образ машины. Я использовал один из собственноручно приготовленных openvz-темплейтов.<br />
<br />
<tt> # mkdir -p /xen/alt </tt><br><br />
<tt> # dd if=/dev/zero of=/xen/alt.img bs=1M seek=10240 count=0 </tt> — создаем 10 ГБ «раздел» для машины<br><br />
<tt> # mkfs.ext3 /xen/alt.img </tt><br><br />
<tt> # mount -o loop /xen/alt.img /xen/alt/ </tt><br><br />
<tt> # cd /xen/alt && tar xf /altlinux-4.0.tar.gz </tt><br><br />
<br />
<tt> # chroot /xen/alt/ /bin/bash </tt><br><br />
<tt> # vim /etc/resolv.conf </tt> — установим нужный nameserver<br><br />
<tt> # vim /etc/apt/sources.list </tt> — установим правильный репозиторий (можно пропустить, если устраивает тот, что преднастроен внутри контейнера)<br><br />
<tt> # apt-get update && apt-get install kernel-image-xen-domu </tt><br><br />
<br />
Поправим /etc/fstab в чруте, чтобы выглядело примерно так:<br />
<pre>/dev/hda1 / ext3 defaults 0 1</pre><br />
<br />
Выходим из чрута:<br />
<br />
<tt> # exit </tt><br />
<br />
Отмонтируем чрут:<br />
<tt> # umount /xen/alt </tt><br />
<br />
Пишем конфигурационный файл /etc/xen/alt:<br />
<pre>kernel = "/boot/vmlinuz-2.6.32-xen-dom0-alt11"<br />
memory = 256<br />
name = "alt"<br />
root = "/dev/hda1 ro"<br />
extra = "xencons=tty"<br />
disk = [ 'file:/xen/alt.img,hda1,w' ]</pre><br />
<br />
Пробуем запустить:<br />
<tt> # xm create -c alt </tt><br />
<br />
В конце концов должен выдать приглашение на логин, куда собственно и нужно логиниться.<br />
<br />
Для выхода из консоли нажать Ctrl-].</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Etcnet&diff=16482Etcnet2010-10-03T07:19:47Z<p>EvgeniiTerechkov: /* Беспроводный Ethernet (или настройка WI-FI) */ - использование WPS</p>
<hr />
<div>{{DISPLAYTITLE:etcnet}}<br />
{{span|font-size: 180%|Подсказки пользователю /etc/net}}<br />
<br />
{| style="border:1px solid #AAA; background:#F9F9F9; width:200px; margin: 0 0 1em 1em; padding:.2em; float: right;" class=noprint<br />
|-<br />
|[[Image:Information.svg|20x20px]] external links:<br />
* [http://sisyphus.ru/en/srpm/etcnet package info]<br />
* [http://git.altlinux.org/people/sbolshakov/packages/?p=etcnet.git;a=summary source git repo]<br />
|}<br />
<br />
Дополнительные страницы:<br />
* [[etcnet/qos|настройка QoS]]<br />
* [[etcnet/firewall|настройка сетевого экрана (firewall]])<br />
<!-- Не убирайте div-ы, на них есть внешние ссылки! --><br />
<div id="quickstart"></div><br />
<br />
== Быстрый старт ==<br />
<div id="docs"></div><br />
<br />
=== Источники информации по /etc/net ===<br />
Обратите внимание, что начиная с версии 0.8.0 документация по [http://etcnet.org/ /etc/net] была собрана из комментариев, расположенных во множестве файлов, в несколько страниц руководств (man). Список всех файлов документации пакета <tt>etcnet</tt> можно получить командой:<br />
<pre>$ rpmquery -d etcnet</pre><br />
<br />
<div id="onecard"></div><br />
<br />
=== Быстрая настройка сетевого интерфейса стандарта Ethernet ===<br />
Для настройки одного сетевого интерфейса следует выполнить следующие шаги:<br />
<br />
Шаг 1: Создать каталог {{path|/etc/net/ifaces/eth0}}. Это каталог конфигурации данного интерфейса (<tt>eth0</tt>), в котором будут храниться файлы с настройками.<br />
<br />
Шаг 2: Определить, какой модуль необходим для вашей сетевой карты. Для этого можно использовать команды: <tt>lspci, lspcidrake, pciscan</tt>.<br />
<br />
Шаг 3: В каталоге конфигурации сетевого интерфейса создать файл <tt>options</tt> и записать в этот файл строку:<br />
<pre>MODULE=<имя модуля></pre> <br />
На данном этапе работу с файлом <tt>options</tt> можно завершить.<br />
<br />
Шаг 4: Выяснить, какой IP-адрес должен быть назначен вашему интерфейсу. Если ваш сетевой интерфейс получает конфигурируется по DHCP, то в файл {{path|/etc/net/ifaces/eth0/options}} следует записать строку:<br />
<pre>BOOTPROTO=dhcp</pre><br />
и перейти к шагу 7.<br />
<br />
'''Замечание:''' В ряде случаев в файле <tt>options</tt> может понадобиться запись:<br />
<pre>DHCP_HOSTNAME=<имя машины без домена></pre><br />
Эта опция описана в странице руководства <tt>etcnet-options(5)</tt>.<br />
<br />
'''Замечание:''' В конце файла <tt>options</tt> необходимо наличие пустой строки.<br />
<br />
У сетевого интерфейса существуют два взаимосвязанных атрибута: <br />
* IP-адрес;<br />
* сетевая маска (mask). <br />
Шаг 5: Текущие значение адреса можно просмотреть командой:<br />
{{cmd|# /sbin/ip address show}} <br />
Вероятнее всего вы увидите, что интерфейс-петля lo (loopback) уже сконфигурирован с адресом 127.0.0.1/8 (что эквивалентно IP-адресу 127.0.0.1 и маске подсети 255.0.0.0). <tt>/8</tt> означает длину префикса CIDR (Classless InterDomain Routing).<br />
Для задания IP-адреса и маски подсети интерфейса <tt>eth0</tt> необходимо создать файл {{path|/etc/net/ifaces/eth0/ipv4address}}, в который следует записать IP-адрес с длиной маски, например:<br />
<pre>10.0.0.20/24</pre> <br />
<br />
Наиболее популярны маски /24 (т.е. длина префикса CIDR равная 24 эквивалентна маске сети 255.255.255.0 - это одна сеть класса C на 254 хоста) и /30. Для справки приводится таблица соответствия сетевых масок в различных нотациях.<br />
<ref><br />
{|<br />
|<br />
{| class="standard"<br />
|-<br />
!маска<br />в битах!!маска<br />точечно-<br />десятичная<br />
|-<br />
|/32||255.255.255.255<br />
|-<br />
|/31||255.255.255.254<br />
|-<br />
|/30||255.255.255.252<br />
|-<br />
|/29||255.255.255.248<br />
|-<br />
|/28||255.255.255.240<br />
|-<br />
|/27||255.255.255.224<br />
|-<br />
|/26||255.255.255.192<br />
|-<br />
|/25||255.255.255.128<br />
|-<br />
|/24||255.255.255.0<br />
|-<br />
|/23||255.255.254.0<br />
|-<br />
|/22||255.255.252.0<br />
|-<br />
|/21||255.255.248.0<br />
|-<br />
|/20||255.255.240.0<br />
|-<br />
|/19||255.255.224.0<br />
|-<br />
|/18||255.255.192.0<br />
|-<br />
|/17||255.255.128.0<br />
|}<br />
|<br />
| ||<br />
{| class="standard"<br />
|-<br />
!маска<br />в битах!!маска<br />точечно-<br />десятичная<br />
|-<br />
|/16||255.255.0.0<br />
|-<br />
|/15||255.254.0.0<br />
|-<br />
|/14||255.252.0.0<br />
|-<br />
|/13||255.248.0.0<br />
|-<br />
|/12||255.240.0.0<br />
|-<br />
|/11||255.224.0.0<br />
|-<br />
|/10||255.192.0.0<br />
|-<br />
|/9||255.128.0.0<br />
|-<br />
|/8||255.0.0.0<br />
|-<br />
|/7||254.0.0.0<br />
|-<br />
|/6||252.0.0.0<br />
|-<br />
|/5||248.0.0.0<br />
|-<br />
|/4||240.0.0.0<br />
|-<br />
|/3||224.0.0.0<br />
|-<br />
|/2||192.0.0.0<br />
|-<br />
|/1||128.0.0.0<br />
|}<br />
|}<br />
</ref><br />
<br />
Шаг 6: Выяснить адрес вашего шлюза (маршрут по умолчанию). Например, IP-адрес вашего шлюза — <tt>10.0.0.254</tt>. Тогда необходимо создать файл {{path|/etc/net/ifaces/eth0/ipv4route}}, в который записать строку:<br />
<pre>default via 10.0.0.254</pre><br />
Шаг 7: Убедиться, что всё выполнено правильно, выполнив команду:<br />
{{cmd|# service network restart}}<br />
Ваш интерфейс <tt>eth0</tt> должен быть успешно сконфигурирован. Если вы конфигурировали <tt>eth0</tt>, используя DHCP-сервер, но адрес интерфейсу не был назначен, то следует искать сообщение от DHCP-сервера в файле {{path|/var/log/messages}}.<br />
<br />
<div id="ifplugd"></div><br />
<br />
=== Настройка ifplugd ===<br />
Начиная с версии 0.7.10, [http://etcnet.org/ /etc/net] управляет ifplugd самостоятельно. Это было сделано для лучшей интеграции пакетов и для возможности следить за несколькими сетевыми интерфейсами одновременно. Для корректного использования ifplugd необходимо выполнить команду:<br />
# chkconfig ifplugd off<br />
<br />
и назначить переменную <tt>USE_IFPLUGD</tt> в файлах <tt>options</tt> соответствующих интерфейсов (<tt>/etc/net/ifaces/<имя интерфейса>/options</tt>). Комментарий по данной переменной дан в странице руководства <tt>etcnet-options(5)</tt>.<br />
<br />
<div id="ppp"></div><br />
<br />
=== Настройка PPP-интерфейса ===<br />
Для настройки обычного модемного PPP-соединения необходимо:<br />
# Создать каталог конфигурации PPP-интерфейса, например, {{path|/etc/net/ifaces/ppp5}}. Вы можете задавать имена PPP-интерфейса вида pppN, pppNN, pppNNN и т. п., где N - любая цифра от 0 до 9;<br />
# Прочитать файл: {{path|/etc/net/ifaces/default/options-ppp}};<br />
# Создать файлы конфигурации. Вероятнее всего вам понадобятся <tt>pppconnect</tt> и <tt>pppdisconnect</tt>, чтобы <tt>pppd</tt> "знал", как дозваниваться и соединяться. Это скрипты для программы <tt>chat(8)</tt>. Кроме этого в файле <tt>pppoptions</tt> можно (часто нужно) перечислить опции <tt>pppd(8)</tt>, определяющие способ авторизации, скорость и название порта и т. п.;<br />
# Заполнить {{path|/etc/ppp/chap-secrets}} или {{/etc/ppp/pap-secrets}}.<br />
<br />
<div id="ppp-pptp-pppoe"></div><br />
<br />
=== Настройка PPtP-интерфейса и PPPoE-интерфейса ===<br />
''[[VPN_(PPTP_PPPoE) | Основная статья: VPN (PPTP PPPoE)]]''<br />
<br />
Хотя PPtP-соединения могут быть настроены и как обычные PPP-соединения, в [http://etcnet.org/ /etc/net] версии 0.7.10 для удобства пользователей была введена опция <tt>PPPTYPE</tt>. Она может принимать следующие значения:<br />
* <tt>dialup</tt> - обычный PPP-интерфейс.<br />
* <tt>pppoe</tt> - интерфейс PPPoE. Для такого интерфейса необходимо в опции <tt>HOST</tt> указывать имя Ethernet-интерфейса, через который будет производиться работа PPPoE. Побочным положительным эффектом будет то, что этот интерфейс будет при необходимости автоматически подниматься (т.е настраиваться) (см. [[#Зависимости между интерфейсами|Зависимости между интерфейсами]]).<br />
* <tt>pptp</tt> - интерфейс PPtP. Для такого интерфейса необходимо в опции <tt>PPTP_SERVER</tt> указывать имя хоста или IP-адрес PPtP-сервера, к которому будет производиться подключение. Обратите внимание, что хотя такие интерфейсы не имеют опции <tt>HOST</tt>, в большинстве случаев есть необходимость указать в опции <tt>REQUIRES</tt> интерфейс, через который будет достижим хост, указанный в <tt>PPTP_SERVER</tt>.<br />
<br />
См. также [[#Замечания о настройке VPN-подключения и туннелей|Замечания о настройке VPN-подключения и туннелей]].<br />
<br />
<div id="DNSandPPP"></div><br />
<br />
=== DNS и PPP-соединения ===<br />
<div style="display: inline; color: red;">Внимание: здесь описывается проблема, которая на самом деле была создана, а не решена — т.е. ради специфики [https://bugzilla.altlinux.org/show_bug.cgi?id=13789 kppp] была создана чётная ошибка в [https://bugzilla.altlinux.org/show_bug.cgi?id=13773 ppp-common]; последняя уже исправлена.</div><br />
<br />
Довольно долгое время существовала проблема неправильной модификации /etc/resolv.conf при установке PPP-соединений: [https://bugzilla.altlinux.org/show_bug.cgi?id=4249 https://bugzilla.altlinux.org/show_bug.cgi?id=4249]. Сейчас она решена, но необходимо дать пояснения. Прежде всего убедитесь, что в файле <tt>/etc/resolv.conf</tt> есть строка:<br />
<pre># ppp temp entry</pre><br />
Если этой строки нет, то в файле не будут модифицироваться строки nameserver, если только какая-нибудь программа типа kppp это не сделает специально. Если такая строка есть, то <tt>/etc/resolv.conf</tt> будет модифицироваться в зависимости от значения булевой (логической) переменной RESOLV_MODS, которую необходимо задать в файле <tt>/etc/sysconfig/network</tt>.<br />
<br />
<div style="display: inline; color: red;">Внимание</div>: при ppp-common >= 0.4-alt1 строки <tt># ppp temp entry</tt> в файле <tt>/etc/resolv.conf</tt> при отсутствии PPP-соединения, поднятого какой-либо программой-«звонилкой», запущенной от администратора системы (пользователь root) — быть '''не должно'''! Если это есть, следует убрать, чтобы <tt>/etc/ppp/ip-up</tt> занимался обновлением записей про DNS в этом файле.<br />
<br />
<div id="restartreload"></div><br />
<br />
=== restart, reload и другие команды ===<br />
У сервиса <tt>network</tt> имеется ряд команд:<br />
* <tt>start</tt> - запустить все стационарные интерфейсы. hotplug-интерфейсы будут сконфигурированы при поступлении соответствующего вызова от hotplug.<br />
* <tt>startwith <имя профиля> </tt> - старт с указанным именем профиля, а не определённым автоматически.<br />
* <tt>stop</tt> - остановить все стационарные интерфейсы. hotplug-интерфейсы будут расконфигурированы при поступлении соответствующего вызова от hotplug.<br />
* <tt>stopwith <имя профиля> </tt> - стоп с указанным именем профиля, а не определённым автоматически.<br />
* <tt>restart</tt> - эквивалентно <tt>stop</tt> с последующим <tt>start</tt>, как и в большинстве других сервисов.<br />
* <tt>restartwith <имя профиля> </tt> - рестарт в контексте указанного профиля, эквивалентно <tt>stopwith <имя профиля> и startwith <имя профиля></tt>.<br />
* <tt>switchto <имя профиля> </tt> - переключение в указанный профиль, эквивалентно <tt>stop</tt> и <tt>startwith <имя профиля></tt>.<br />
* <tt>reload</tt> - семантически обозначает «актуализировать текущую конфигурацию». Для всех сконфигурированных в настоящий момент интерфейсов будет выполнена реконфигурация при наличии конфигурации.<br />
* <tt>check</tt> - автоматическая проверка конфигурационной базы.<br />
<br />
<div id="bootproto"></div><br />
<br />
=== Протоколы конфигурации адресов ===<br />
С помощью опции <tt>BOOTPROTO</tt> вы можете управлять тем, как у интерфейса будут появляться адреса и маршруты (это относится только к протоколу IPv4, так как протоколы IPv6 и IPX получают адреса только статически).<br />
* <tt>static</tt> — адреса и маршруты будут взяты из <tt>ipv4address</tt> и <tt>ipv4route</tt>.<br />
* <tt>dhcp</tt> — интерфейс будет сконфигурирован по DHCP.<br />
* <tt>ipv4ll</tt> — интерфейс будет сконфигурирован с помощью IPv4LL (link-local), ранее известному как ZCIP (zeroconf IP). Это значит, что из сети 169.254.0.0/16 будет подобран ещё не использованный адрес и назначен на интерфейс.<br />
Существует несколько комбинированных способов:<br />
* <tt>dhcp-static</tt> — если конфигурация по DHCP не удалась, конфигурировать методом static.<br />
* <tt>dhcp-ipv4ll</tt> — если конфигурация по DHCP не удалась, конфигурировать методом ipv4ll.<br />
* <tt>dhcp-ipv4ll-static</tt> — если конфигурация по DHCP не удалась, конфигурировать методом ipv4ll. Если и это не удалось, конфигурировать методом static.<br />
<br />
<div id="internals"></div><br />
<br />
== Устройство /etc/net ==<br />
<div id="generalinfo"></div><br />
<br />
=== Общие сведения ===<br />
[http://etcnet.org/ /etc/net] - это система конфигурации сети в Linux, т.е. эта система позволяет администратору Linux достаточно просто произвести настройки сети. Если же вы читаете эту страницу, то, вероятно, у вас возникли трудности с её использованием. Для решения возможных проблем полезно знать:<br />
<br />
# [http://etcnet.org/ http://etcnet.org/] - сайт проекта, на котором можно найти примеры конфигурации и статьи по настройке системы.<br />
# [http://etcnet.org/ /etc/net] интегрирован в ALT Linux Sisyphus в виде пакетов:<br />
#* {{pkg|etcnet}} - базовые сценарии;<br />
#* {{pkg|etcnet-full}} - виртуальный пакет с зависимостями на все пакеты, которые могут использоваться сценариями [http://etcnet.org/ /etc/net], с указанием их точных версий;<br />
#* {{pkg|etcnetconf}} - '''прототип''' конфигуратора;<br />
#* {{pkg|etcnet-defaults-desktop}} - умолчания для рабочей станции;<br />
#* {{pkg|etcnet-defaults-server}} - умолчания для сервера; <br />
# Пакеты {{pkg|etcnet}} и {{pkg|net-scripts}} — две конфликтующие реализации «подсистемы конфигурации сети» (network-config-subsystem).<br />
# При установке etcnet вместо net-scripts (или наоборот) сервис <tt>network</tt> оказывается выключенным. Это означает, что при загрузке системы сеть не будет сконфигурирована, что можно проверить командой {{cmd|chkconfig --list network}}. Для быстрого исправления проблемы можно дать команду {{cmd|chkconfig network reset}}.<br />
# etcnet '''НЕ''' импортирует автоматически настройки net-scripts. Если вы только что установили etcnet, и ваши сетевые интерфейсы всё ещё остаются сконфигурированными (несмотря на уже отсутствующий пакет net-scripts), то вы можете запустить сценарий <tt>/etc/net/scripts/initconf</tt>. Он попытается проанализировать текущее состояние интерфейсов и выведет вам результат. Никаких файлов при этом записано не будет. Если вам подходит вывод initconf, то запустите его с параметром write и он проделает то же самое, но уже с сохранением конфигурации.<br />
# Для корректной работы системы в целом необходимо, чтобы содержимое файла <tt>/etc/sysconfig/network</tt> было корректным.<br />
# Переменные <tt>sysctl</tt> в ОС ALT Linux конфигурируются в следующих местах: <tt>/etc/sysctl.conf</tt> (глобальные системные), <tt>/etc/sysconfig/network-scripts/sysctl.conf</tt> (общие сетевые в net-scripts), <tt>/etc/net/sysctl.conf</tt> (общие сетевые в [http://etcnet.org/ /etc/net]), <tt>/etc/net/ifaces/*/sysctl.conf*</tt> (частные для конкретных интерфейсов или их типов в [http://etcnet.org/ /etc/net]).<br />
<br />
<div id="options.d"></div><br />
<br />
=== Организация опций /etc/net по умолчанию ===<br />
Методология [http://etcnet.org/ /etc/net] предусматривает несколько шагов наследования опций, первый из которых — загрузка опций по умолчанию. В более ранних версиях это происходило из одного файла <tt>/etc/net/options</tt>, сейчас же в вашем распоряжении есть каталог <tt>/etc/net/options.d</tt>, из которого будут последовательно прочитаны все файлы.<br />
<br />
Иными словами: оригинальный архив etcnet содержит только файл <tt>/etc/net/options.d/00-default</tt>. Упаковщик etcnet в какой-либо дистрибутив вместо того, чтобы добавить патч, просто добавляет файл с бОльшим номером, который переопределяет нужные опции.<br />
<br />
Ввиду решения различных задач, администратору системы может не подойти содержание дистрибутивного набора. В этом случае администратор может создать файл с ещё более высоким номером и определить настройки умолчания для своей системы. В результате такого подхода:<br />
# Уменьшается количество патчей (хотя их свойство "отваливаться" от пакета при его упаковке бывает полезным).<br />
# Не изменяются файлы с опциями, принадлежащие пакету. Это делает обновление пакета намного более корректным.<br />
# Можно легко увидеть, какие опции переопределяются на каждом этапе.<br />
<br />
<div id="iftab"></div><br />
<br />
=== Назначение iftab ===<br />
<br />
Начиная с дистрибутивов, основанных на ветках p5 и 5.1, переименование интерфейсов возложено на udev; см. тж. [http://lists.altlinux.org/pipermail/sisyphus/2009-June/340033.html это письмо] и [https://bugzilla.altlinux.org/show_bug.cgi?id=19313 #19313] и [http://sisyphus.ru/srpm/wireless-tools/changelog %changelog ifrename].<br />
<br />
Имена сетевых интерфейсов по умолчанию, как правило, содержат их тип (eth, ppp, wifi, ipsec) и индекс: 0 - для первого созданного интерфейса, 1 - для второго и т. д. При этом соответствие автоматически назначенных имён физическим устройствам может не сохраняться.<br />
<br />
Эта особенность неудобна, когда машина с Linux имеет более одного интерфейса каждого типа. Типичными примерами являются маршрутизаторы и ноутбуки. В маршрутизаторах, как правило, используются однотипные сетевые карты и при их замене или изменении порядка на PCI-шине соответствие оказывается нарушенным. В ноутбуках используются ethernet и wifi-устройства с горячим подключением, при этом слотов и карт может быть более чем 1. В этом случае пользователь/администратор скорее всего пожелает закрепить за каждой сменной картой её конфигурацию.<br />
<br />
[http://etcnet.org/ /etc/net] при конфигурации интерфейса использует то имя, под которым он сконфигурирован, а именно имя каталога, в котором хранятся файлы конфигурации интерфейса.<br />
<br />
Для привязки сетевой карты к имени интерфейса в простых случаях можно воспользоваться файлом <tt>/etc/iftab</tt>, man-страница по формату которого входит в пакет <tt>ifrename</tt> (<tt>iftab(5)</tt>).<br />
<br />
Использование <tt>/etc/iftab</tt> удобно, поскольку позволяет сохранять традиционные имена интерфейсов (например, eth0), но этот механизм не поддерживает расширенную функциональность /etc/net (в частности, ''профили'' /etc/net).<br />
<br />
Средством, позволяющим использовать все возможности <tt>etcnet</tt>, является файл <tt>/etc/net/iftab</tt>, обрабатываемый не утилитой <tt>ifrename</tt>, а непосредственно <tt>etcnet</tt>. Синтаксис этого файла совпадает с синтаксисом <tt>/etc/iftab</tt>. Ограничением же является невозможность использовать стандартные имена интерфейсом (<tt>ethX</tt>, <tt>pppX</tt>), так как переименование интерфейсов происходит уже после конфигурации интерфейса ядром. В случае, если вам необходим <tt>/etc/net/iftab</tt>, имеет смысл переименовать интерфейсы, давая им либо двухзначные номера (<tt>eth00</tt>, <tt>eth01</tt>...), либо осмысленные названия (<tt>isplink</tt>, <tt>lan</tt>...)<br />
<br />
См. письмо про [http://lists.altlinux.org/pipermail/sisyphus/2009-March/337924.html важность /etc/iftab]<br />
и тж. это письмо про [http://lists.altlinux.org/pipermail/devel/2007-October/065097.html отличия etcnet и сервиса ifrename]:<br />
{{начало цитаты}} Комментарии к письмам этого треда (с некоторыми пояснениями):<br />
<br />
1. «etcnet уже научился менять местами eth0 и eth1?»<br />
<br />
Освоение этого приема обладает сомнительной пользой. Рекомендуется <br />
рассматривать eth0 как временное имя с малым сроком жизни,<br />
а для повышения комфорта пользователей Ethernet-интерфейсы предлагается<br />
называть eth00, eth01, eth02 etc.<br />
<br />
2. «Существование (номинальное) net-scripts вынуждает поддерживать<br />
ряд сервисов, которые иначе могли бы быть упразднены»<br />
<br />
Эти сервисы можно "обезвредить" (отключить) контролем CONFMETHOD<br />
из /etc/sysconfig/network. При этом зависимости на пакет etcnet<br />
не возникнет, только на network-config-subsystem. Примеры таких<br />
пакетов должны быть в Sisyphus.<br />
<br />
3. «после приведения в порядок /etc/udev/rules.d/19-udev-ifrename.rules<br />
нужности в /etc/net/iftab я не заметил»<br />
<br />
Важнейшее принципиальное отличие /etc/net/iftab от /etc/iftab —<br />
нахождение /etc/net/iftab в специальном пространстве имён. Для него<br />
действуют механизмы определения профиля и хоста конфигурации. Это,<br />
например, позволит, при необходимости, составить конфигурацию так, что срочный<br />
ремонт маршрутизатора сведётся к переносу диска (или массива)<br />
из сгоревшего шасси в запасное. Возможны и другие примеры, которые<br />
станут невозможными при помещении iftab в /etc и его прямой<br />
интерпретации.<br />
<br />
Конечно, пользователю единственного ноутбука с одним-двумя сетевыми<br />
интерфейсами такая практика — полный overkill (т.е. такая практика ему не нужна), но его никто и не<br />
заставляет видеть всю подводную часть (т.е. все тонкости работы и настройки). В этом и гибкость.{{конец цитаты}}<br />
<br />
<div id="specifaces"></div><br />
<br />
=== Интерфейсы lo, default и unknown ===<br />
Сразу после установки пакета <tt>etcnet</tt> в каталоге <tt>/etc/net/ifaces</tt> (в котором хранятся конфигурации интерфейсов) находятся три каталога: <br />
* lo<br />
* default<br />
* unknown<br />
<br />
Интерфейс '''lo''' — стандартная "петля" (loopback), которая должна быть во всякой Linux-системе, поэтому конфигурация для него включена по умолчанию. В остальном он ничем не отличается от любого другого интерфейса и конфигурируется точно так же файлами <tt>options</tt> и <tt>ipv4address</tt>.<br />
<br />
Интерфейс '''default''' — это не интерфейс, а специальный каталог, файлы в котором обрабатываются следующим образом:<br />
* <tt>resolv.conf</tt> — если присутствует, то копируется в <tt>/etc/resolv.conf</tt>.<br />
* <tt>options</tt> — файл опций, читается после опций по умолчанию. Этот файл содержит комментарии.<br />
* <tt>options-<вид интерфейса></tt> — этот файл содержит опции, специфичные для данного вида интерфейсов. Некоторые из них не обязательны и позволяют использовать особенности данного вида интерфейсов, например, <tt>LINKDETECT</tt> в <tt>options-eth</tt>; другие обязательны, например, <tt>HOST</tt> в <tt>options-bri</tt>. Эти файлы содержат комментарии. Обратите внимание, что эти файлы не рекомендуется редактировать. Если вам нужно задать опцию для интерфейса, то, как правило, это можно сделать в файле <tt>options</tt> в конфигурационном каталоге данного интерфейса. Это облегчит процесс обновления пакета etcnet.<br />
* <tt>sysctl.conf-<вид интерфейса></tt> — файл с переменными sysctl, которые необходимо изменить. Сейчас единственный такой файл — <tt>sysctl.conf-dvb</tt>, который отключает <tt>return path filter</tt>, что всегда нужно в случае асимметричной маршрутизации.<br />
* <tt>iplink-<вид интерфейса></tt> — файл с командами iplink, специфичными для данного вида.<br />
* <tt>selectprofile</tt> — если этот файл исполняемый, то он будет вызван из сценариев <tt>ifup/ifdown</tt>, <tt>setup/shutdown</tt> для того, чтобы вернуть на стандартном выводе имя профиля, которое необходимо использовать. Это позволяет автоматически переключать профили в зависимости от каких-либо условий. В поставку включен комментированный пример сценария: <tt>/etc/net/scripts/contrib/selectprofile</tt>.<br />
* <tt>fw</tt> — каталог с настройками сетевого экрана по умолчанию.<br />
<br />
Интерфейс '''unknown''' — специальная конфигурация, которая будет использована в том случае, когда [http://etcnet.org/ /etc/net] просят сконфигурировать hotplug-интерфейс, для которого не существует каталога конфигурации. Это будет работать только в том случае, если включена опция <tt>ALLOW_UNKNOWN</tt>.<br />
<br />
<div id="broadcast"></div><br />
<br />
=== broadcast address===<br />
<br />
Периодически возникает вопрос: почему после старта [http://etcnet.org/ /etc/net] при запуске <tt>ifconfig</tt> можно видеть <tt>Bcast:0.0.0.0</tt>, хотя при использовании net-scripts это поле было правильным? <br />
<br />
Ответ: net-scripts оперируют адресом, маской, адресом сети и широковещательным адресом, пытаясь определить неизвестные компоненты из известных, а <tt>config-ipv4</tt> просто передаёт утилите <tt>ip</tt> содержимое файла <tt>ipv4address</tt>, не проверяя его содержание.<br />
Важно заметить, что:<br />
* Если <tt>iproute2</tt> изменит свой синтаксис, то с очень вероятно, что администратору будет необходимо редактировать только конфигурационные файлы.<br />
* Не было найдено проблем с «отсутствующим» broadcast address. Он есть в таблице маршрутизации <tt>local</tt>. <br />
* Администратор всегда может назначить адрес broadcast в файле <tt>ipv4address</tt>. Это можно сделать с помощью выражения <tt>broadcast +</tt><ref><br />
Выдержка из файла ip-cref.ps, который входит в документацию пакета iproute2:<br />
<br />
<pre><br />
* broadcast ADDRESS<br />
<br />
the broadcast address on the interface.<br />
It is possible to use the special symbols '+' and '-' instead of the broadcast address. In this case, <br />
the broadcast address is derived by setting/resetting the host bits of the interface prefix.<br />
NB. Unlike ifconfig, the ip utility does not set any broadcast address unless explicitly requested.<br />
</pre><br />
</ref>.<br />
'''Замечание:''' В версии 0.8.0 появилась опция <tt>AUTO_BROADCAST</tt> для автоматического дополнения каждой строки <tt>ipv4address</tt>.<br />
<br />
<div id="never_rmmod"></div><br />
<br />
=== Ядро 2.6 и "пропадающие" интерфейсы ===<br />
Иногда возможна ситуация: Если два интерфейса используют один и тот же модуль ядра, и у них определена опция <tt>MODULE</tt> (то есть скрипты [http://etcnet.org/ /etc/net] сами загружают и выгружают модули), то при опускании (отключении) одного интерфейса пропадает и второй интерфейс. <br />
<br />
Такая ситуация почти наверняка возникает при использовании ядра 2.6, особенностью которого являются значения счётчика ссылок (третий столбец вывода <tt>lsmod</tt>). Когда счетчик оказывается равен нулю (довольно часто), скрипты могут попытаться выгрузить модуль интерфейса, для которого запущен ifdown. И такая выгрузка происходит, несмотря на то, что другой интерфейс, использующий этот же модуль, находится в состоянии UP (т.е. он активен).<br />
<br />
Чтобы заблокировать выгрузку модулей, можно использовать булеву переменную <tt>NEVER_RMMOD</tt>. Возможно, позже это будет происходить автоматически для ядер следующих версий.<br />
<br />
<div id="removables"></div><br />
<br />
=== Cценарии конфигурации сети и hotplug-интерфейсы ===<br />
<br />
==== Cценарии конфигурации сети ====<br />
Существует несколько сценариев конфигурации сети.<br />
<br />
* Первый и самый простой — выполнение <tt>service network start</tt> при старте системы или вручную. При этом требуется только сформировать погруппные (потиповые) списки интерфейсов, подлежащих обработке, и последовательно выполнить требуемые действия. Модули ядра при этом загружаются сценариями [http://etcnet.org/ /etc/net], при этом имена модулей берутся из опции <tt>MODULE</tt> (в этой опции можно в кавычках перечислить несколько имён и они будут последовательно загружены). Этот метод часто используется на практике и лучше всего подходит для маршрутизаторов. Преимущество метода в том, что вся необходимая информация сконцентрирована в одном месте — каталоге <tt>/etc/net</tt>. Если опция <tt>MODULE</tt> не определена, то будет предпринята попытка загрузки по имени интерфейса, подразумевая, что файл <tt>/etc/modules.conf</tt> правильно заполнен.<br />
<br />
* Второй сценарий — реакция на событие <tt>ifplugd</tt>. В предыдущих версиях существовала сложность, так как требовалась синхронная настройка сервиса <tt>ifplugd</tt>. Сейчас логика работы определена, что выражено в том, что [http://etcnet.org/ /etc/net] взяла управление <tt>ifplugd</tt> на себя. В части загрузки модуля этот сценарий не отличается от первого.<br />
<br />
* Третий сценарий — реакция на появление или исчезновение сменного устройства. Для обработки таких событий предназначены сценарии <tt>/etc/net/scripts/{ifup,ifdown}-removable</tt>, которые вызываются из сценариев пакетов hotplug и pcmcia-cs. Сложность заключается в том, что для сменных PCMCIA-карт вызовы могут дублироваться: для одного и того же события первый раз ifup-removable будет вызван из hotplug, второй — из pcmcia-cs. Кроме того, hotplug также реагирует на загрузку модулей ядра для обычных карт PCI и, более того, включает сценарии, которые пытаются загружать модули самостоятельно. В этом контексте [http://etcnet.org/ /etc/net] получает слишком много вызовов от hotplug и по умолчанию их игнорирует (<tt>USE_HOTPLUG=no</tt>).<br />
<br />
==== hotplug-интерфейсы ====<br />
Рассмотрим использование hotplug-интерфейсов. <br />
<br />
Пусть администратору необходимо настроить действительно сменную карту. После заполнения <tt>/etc/iftab</tt> или <tt>/etc/net/iftab</tt> в файле <tt>options</tt> необходимо будет задать <tt>USE_HOTPLUG=yes</tt>. После этого при получении события от hotplug [http://etcnet.org/ /etc/net] будет работать в том контексте, что модуль в загрузке и выгрузке не нуждается. <br />
<br />
Важно заметить, что '''такой интерфейс будет пропущен при обычном старте сети''', т.к. если он сменный, то единственный достоверный способ узнать, что он присутствует — получить вызов от hotplug. Из факта выполнения <tt>service network start</tt> совсем не следует, что какой-то один или несколько из сконфигурированных hotplug-интерфейсов сейчас в наличии и требуют конфигурации. Если вы хотите вручную расконфигурировать hotplug-интерфейс до его извлечения, используйте команду <tt>ifdown</tt>. Для повторной конфигурации вставьте его ещё раз.<br />
<br />
Также существует опция <tt>USE_PCMCIA</tt>. Если события для вашей карты генерирует pcmcia-cs, то вам нужно её включить. Если события генерируются только hotplug, то используйте опцию <tt>USE_HOTPLUG</tt>.<br />
<br />
<div id="eth0"></div><br />
<br />
=== Проблема стандартных имен интерфейсов (eth0 и др.)===<br />
<br />
При использовании файла <tt>/etc/net/iftab</tt>, то есть в случае применения сложных конфигураций, возникает следующая проблема:<br />
* При загрузке модулей имена интерфейсов принимают вид eth0, eth1, eth2… Какие именно — в общем случае контролировать нельзя.<br />
* Имя eth0 обладает наибольшей вероятностью оказаться занятым.<br />
* ifrename не может переименовать интерфейс, если целевое имя уже занято (udev использует <tt>ifrename -t</tt>, но это не работает после начальной загрузки, см. руководство к ifrename).<br />
<br />
С учётом вышеизложенного, если <tt>/etc/net/iftab</tt> содержит тот же набор имён интерфейсов, что уже имеется после загрузки модулей (то есть <tt>eth0</tt>/<tt>eth1</tt> и другие «стандартные» названия), то единственный случай, когда etcnet сможет без ошибок обработать такой файл — изначальное соответствие, не требующее переименования.<br />
<br />
Таким образом, при использовании <tt>/etc/net/iftab</tt> имеет смысл давать интерфейсам названия, отличные по виду от тех, что назначает ядро. В простых случаях лучше использовать <tt>/etc/iftab</tt>.<br />
<br />
<div id="advanced"></div><br />
<br />
== Расширенные возможности ==<br />
<div id="multipleIPs"></div><br />
<br />
=== Несколько IP-адресов или маршрутов на одном интерфейсе ===<br />
<br />
Вы можете помещать произвольное количество IP-адресов в файл <tt>ipv4address</tt> по одному адресу на каждой строке. То же самое относится к статическим маршрутам и файлу <tt>ipv4route</tt>.<br />
<br />
Обратите внимание, что [http://etcnet.org/ /etc/net] не анализирует содержимое этих файлов, а формирует на основе каждой строки командную строку для утилиты <tt>ip</tt>. Это означает, что вы можете помещать в этих файлах произвольные поддерживаемые <tt>ip</tt> опции и они будут обработаны. Например, в файле <tt>ipv4route</tt> можно поместить строку:<br />
<pre>10.0.1.0/24 via 10.0.0.253 metric 50 weight 5 table 100</pre><br />
<br />
<div id="requires"></div><br />
<br />
=== Зависимости между интерфейсами ===<br />
У интерфейсов:<br />
* vlan<br />
* bond <br />
* bri <br />
* teql <br />
входящих в группу зависимых физических, должна быть определена опция <tt>HOST</tt> со списком интерфейсов, необходимых для инициализации текущего интерфейса. Если хост-интерфейс не сконфигурирован при поднятии зависимого интерфейса, то это будет исправлено.<br />
<br />
Кроме обязательной для определённых интерфейсов опции <tt>HOST</tt>, может быть задана и необязательная для всех остальных интерфейсов опция <tt>REQUIRES</tt>. Интерфейсы, перечисленные в этой опции, будут считаться зависимостями текущего интерфейса. Например, по умолчанию попытка сконфигурировать интерфейс А, который зависит от Б и В, приведёт сначала к конфигурации Б и В. Аналогично, при расконфигурации Б или В сначала будет расконфигурирован А.<br />
<br />
Зависимость одного интерфейса от другого не всегда формальна. Например, в сценарии <tt>ifup-pre</tt> одного интерфейса может использоваться команда, которая потребует разрешения DNS-имени, которое может быть разрешено только с помощью <tt>resolv.conf</tt>, инсталлируемого другим интерфейсом. Или это может быть PPPoE/PPtP-интерфейс, требующий Ethernet-интерфейс для работы.<br />
<br />
Для того, чтобы избежать неожиданных сбоев в таких случаях, правильно задавайте опцию <tt>REQUIRES</tt>.<br />
<br />
<div id="postpre"></div><br />
<br />
=== Пользовательские сценарии post и pre ===<br />
Существует возможность поместить в каталог конфигурации интерфейса файлы, которые будут выполнены в определённые моменты. Для этого они должны быть исполняемыми и называться следующим образом:<br />
* <tt>ifup-pre</tt> — для выполнения перед конфигурированием интерфейса.<br />
* <tt>ifup-post</tt> — для выполнения после конфигурирования интерфейса. Например, можно запустить почтовую систему.<br />
* <tt>ifdown-pre</tt> — для выполнения перед расконфигурированием интерфейса. Например, можно остановить почтовую систему.<br />
* <tt>ifdown-post</tt> — для выполнения после расконфигурирования интерфейса.<br />
<br />
Также в версии до 0.8.0 возможно использовать следующие сценарии (они должны быть исполняемыми):<br />
* <tt>/etc/net/scripts/ifup-pre-local</tt><br />
* <tt>/etc/net/scripts/ifup-post-local</tt><br />
* <tt>/etc/net/scripts/ifdown-pre-local</tt><br />
* <tt>/etc/net/scripts/ifdown-post-local</tt><br />
<br />
Они будут вызваны для каждого интерфейса. Начиная с версии 0.8.0 эти сценарии называются так:<br />
* <tt>/etc/net/ifup-pre</tt><br />
* <tt>/etc/net/ifup-post</tt><br />
* <tt>/etc/net/ifdown-pre</tt><br />
* <tt>/etc/net/ifdown-post</tt><br />
Семантика сохранена.<br />
<br />
<div id="iplink"></div><br />
<br />
=== Управление канальными параметрами интерфейсов ===<br />
<br />
Если поместить в конфигурационный каталог интерфейса файл <tt>iplink</tt>, в котором в каждой строке будут записаны команды режима link утилиты <tt>ip</tt>, то они будут выполнены при конфигурации интерфейса. <br />
<br />
Например, если необходимо, чтобы интерфейс net1 имел MAC-адрес aa:bb:cc:dd:ee:ff и MTU 200 байт, то в файл <tt>/etc/net/ifaces/net1/iplink</tt> нужно поместить следующее:<br />
<pre>address aa:bb:cc:dd:ee:ff<br />
mtu 200</pre><br />
<br />
Обратите внимание, что в этом случае в <tt>/etc/net/iftab</tt> вам необходимо будет использовать селектор <tt>businfo</tt> или <tt>driver</tt> вместо <tt>mac</tt>.<br />
<br />
<div id="ethtool"></div><br />
<br />
=== Управление физическими параметрами интерфейсов ===<br />
Если поместить в конфигурационный каталог интерфейса файл <tt>ethtool</tt>, в котором будет строка с параметрами программы ethtool, то она будет выполнена при конфигурации интерфейса. <br />
<br />
Например, если есть необходимость, чтобы интерфейс net1 имел скорость 10Мбит/с и авто-согласование скорости было отключено, то в файл <tt>/etc/net/ifaces/net1/ethtool</tt> нужно поместить следующую строку:<br />
<br />
<pre>speed 10 autoneg off</pre><br />
<br />
<div id="bridge"></div><br />
<br />
=== Настройка Ethernet-моста ===<br />
<br />
Перед настройкой Ethernet-моста (далее - моста) с помощью etcnet сначала необходимо убедиться, что установлен пакет bridge-utils. Etcnet использует утилиту brctl для настройки моста, и, если утилита не установлена, то при перезапуске системы сеть станет недоступна. Если интерфейсы, входящие в состав моста, единственные физически подключённые, и настройка моста происходит с удаленного узла через эти интерфейсы, то требуется соблюдать осторожность, т.к. эти интерфейсы перестанут быть доступны. В случае ошибки в конфигурации , потребуется физический доступ к серверу. Для страховки перед перезапуском сервиса network можно открыть ещё одну консоль и запустить там, например, команду: <tt>sleep 500 && reboot</tt>.<br />
<br />
Предположим, что требуется настроить Ethernet-мост, и пусть он будет называться <tt>br0</tt>. <br />
Тогда для его настройки необходимо завести каталог <tt>etc/net/ifaces/br0</tt> и создать там файлы со следующими данными:<br />
<br />
* <tt>brctl</tt><br />
<br />
<pre> stp AUTO on </pre><br />
<br />
* <tt>ipv4address</tt>:<br />
<pre> 192.168.100.200/24 </pre><br />
<br />
* <tt>options</tt>:<br />
<pre> TYPE=bri<br />
HOST='eth0 tap0'<br />
BOOTPROTO=static </pre><br />
<br />
Содержимое файла <tt>brctl</tt> передается утилите brctl. <tt>AUTO</tt> означает, что скрипт <tt>setup-bri</tt> самостоятельно определит имя bridge-интерфейса (см. README.bridge в каталоге doc пакета etcnet).<br />
<br />
IP-адрес для интерфейса, как обычно, будет взят из <tt>ipv4address</tt>.<br />
<br />
В опции <tt>HOST</tt> файла <tt>options</tt> нужно указать те интерфейсы, которые будут входить в мост. Если в него будут входить интерфейсы, которые до этого имели ip-адрес (например, eth0), то этот адрес должен быть удален (например, можно закомментировать содержимое файла <tt>ifaces/eth0/ipv4address</tt>).<br />
<br />
При старте сети сначала поднимаются интерфейсы, входящие в мост, затем сам мост (автоматически). Для назначения адреса мосту можно так же использовать DHCP (<tt>BOOTPROTO=dhcp</tt>). Но при этом важно обратить внимание на параметр <tt>forwarding delay</tt> (man brctl / setfd), так как интерфейс, подключенный к мосту, не сразу входит в режим передачи пакетов, и это может вызвать dhcp таймаут. Версии etcnet в дистрибутивах ALT Linux Server 4 и Desktop 4.1 (0.9.7-alt0.M40/M41) имеют эту недоработку, которая исправлена только в версии 0.9.9-alt1. <br />
Документацию по настройке моста с вопросами и ответами (перевод) можно найти на http://xgu.ru/wiki/Linux_Bridge, а его оригинал доступен на http://www.linuxfoundation.org/en/Net:Bridge.<br />
<br />
С пакетом etcnet поставляются примеры конфигурации. Один из них показывает, как из двух ethernet-интерфейсов port0 и port1 можно собрать мост bridge (каталог документации examples/Ethernet-bridge-GRE/).<br />
<br />
Безотносительно к etcnet, следует иметь ввиду проблему, связанную с NAT:<br />
http://bugzilla.kernel.org/show_bug.cgi?id=13079<br />
<br />
<div id="vlan"></div><br />
<br />
=== Настройка VLAN ===<br />
<br />
Для настройки 802.1q VLAN (например, id 4094 на eth1) следует, создав каталог <tt>ifaces/eth1.4094</tt>, поместить в него файлы со следующим содержимым:<br />
<br />
* <tt>ipv4address</tt>:<br />
<pre>192.168.100.200/24</pre><br />
<br />
* <tt>options</tt>:<br />
<pre> TYPE=vlan<br />
HOST=eth1<br />
VID=4094<br />
BOOTPROTO=static</pre><br />
<br />
Содержимое переменных <tt>HOST</tt> и <tt>VID</tt> будет передано утилите <tt>vconfig</tt>; использование файла <tt>vlantab</tt> необязательно (и не рекомендуется по причине невозможности использовать ifup для отдельного интерфейса). Пример конфигурации можно найти в каталоге examples/VLAN-without-vlantab/ документации etcnet.<br />
<br />
Следует обратить внимание, что 4094 является верхней допустимой границей идентификатора валидного VLAN, а [http://www.candelatech.com/pipermail/vlan/2004-November/000128.html 4095 используется технически в процессе отбрасывания трафика по неверным VLAN]. (следует отметить, что это не ограничение Linux: [http://en.wikipedia.org/wiki/802.1Q в стандарте под VID отведено 12 бит])<br />
<br />
'''Для настройки Q-in-Q интерфейса''', например, eth1.123.513 (дважды тегированный трафик: внешняя метка -- 123, внутренняя -- 513) следует файл <tt>options</tt> в каталоге <tt>ifaces/eth1.123.513</tt> заполнить следующим образом:<br />
<br />
* <tt>options</tt>:<br />
<pre> TYPE=vlan<br />
HOST=eth1.123 # "родительский" интерфейс; может называться иначе<br />
VID=513<br />
VLAN_REORDER_HDR=0<br />
BOOTPROTO=static</pre><br />
<br />
Родительский интерфейс должен быть сконфигурирован (можно с или без <tt>BOOTPROTO</tt>, с или без <tt>ipv4address</tt> и т.п.).<br />
<br />
Таким образом, можно каскадировать интерфейсы "как угодно глубоко" (Q-in-Q-in-Q-in-Q....). Необходимо только учитывать, что длина имени интерфейса ограничена (16-ю символами).<br />
<br />
<div id="tun/tap"></div><br />
<br />
=== Настройка tun/tap интерфейса ===<br />
<br />
Etcnet поддерживает простое создание интерфейсов типа tun/tap. Это виртуальный тип интерфейсов для передачи пакетов между ядром и программами, который не передает данных через физические устройства.<br />
'''tun''' — это интерфейс типа point-to-point, работающий с кадрами IP.<br />
'''tap''' — интерфейс типа ethernet, работающий с кадрами ethernet.<br />
<br />
Потребуется использование утилиты tunctl, находящейся в одноименном пакете.<br />
Пусть требуется создать и настроить tun/tap интерфейс, например, с именем tap0. Для этого необходимо:<br />
* создать каталог интерфейса:<br />
<br />
/etc/net/ifaces/tap0<br />
<br />
* создать в каталоге интерфейса <tt>/etc/net/ifaces/tap0</tt> файл настройки <tt>options</tt> со следующим содержанием:<br />
<br />
TYPE=tuntap<br />
TUNTAP_USER=combr<br />
<br />
<br />
<tt>TUNTAP_USER</tt> — это аккаунт или цифровой id пользователя, которому будут даны права на использование интерфейса tap0 (устройство /dev/net/tun).<br />
Этот параметр будет передан утилите <tt>tunctl</tt> как аргумент опции <tt>-u</tt> (см. руководство на tunctl).<br />
С версии ядра 2.6.18 произошли изменения в управлении этим типом интерфейсов, потребовавшие<br />
обязательного применения <tt>tunctl</tt> для разрешения доступа обычных<br />
пользователей к tap-интерфейсам. В предыдущих версиях любой<br />
пользователь, имеющий доступ к <tt>/dev/net/tun</tt>, мог создать любое<br />
количество сетевых интерфейсов с произвольными именами. Начиная с<br />
2.6.18, для создания интерфейса через <tt>/dev/net/tun</tt> требуется<br />
<tt>CAP_NET_ADMIN</tt> (обычно эту привилегию имеет только root), а обычный<br />
пользователь, имеющий доступ к <tt>/dev/net/tun</tt>, может только использовать<br />
уже созданные интерфейсы, к которым разрешён доступ для его uid.<br />
<br />
<div id="iptun"></div><br />
<br />
=== Настройка и использование IP-туннелей ===<br />
<br />
IP-туннели — средство, позволяющее улучшить IP-сети. Поддерживаются IP-туннели трёх видов: <br />
* IPIP<br />
* GRE<br />
* SIT <br />
<br />
Прежде всего следует определить необходимый вид туннеля для решаемой задачи. <br />
<br />
* Туннели '''IPIP''' — самые простые. Обратите внимание, что IPIP-туннели не могут передавать multicast-пакеты, соответственно, протокол OSPF (Open Shortest Path First) на таких интерфейсах работать не будет.<br />
<br />
* Туннели '''GRE''' (general incapsulation) обычно используются в маршрутизаторах Cisco. По туннелям этого типа могут передаваться broadcast и multicast пакеты. Кроме того, эти туннели поддерживают контрольные суммы и контроль упорядоченности пакетов. Также GRE-туннели обладают опциональным атрибутом key в виде произвольного 4-байтового числа, который позволяет конфигурировать несколько GRE туннелей между одной парой IP-адресов несущей сети (в отличие от IPIP-туннелей, с которыми это невозможно).<br />
<br />
* Туннели '''SIT''' предназначены для транспортировки пакетов IPv6 через сети IPv4.<br />
<br />
<br />
Тип туннеля определяется опцией <tt>TUNTYPE (ipip, gre, sit)</tt>. По умолчанию <tt>TUNTYPE=ipip</tt>. Кроме типа туннеля для конфигурации всегда требуется адрес удалённого хоста и почти всегда — локальный адрес. Эти адреса определяются опциями <tt>TUNREMOTE</tt> и <tt>TUNLOCAL</tt> соответственно. В некоторых случаях локальный адрес можно не указывать. В этом случае опция <tt>TUNLOCAL</tt> всё равно обязательна, но принимает значение <tt>any</tt>. Не забудьте назначить туннельному интерфейсу адреса и маршруты в соответствующих файлах.<br />
<br />
Пример: Конфигурация GRE-туннеля между 10.0.1.2 и 10.0.2.3 с двумя ключами для исходящих и входящих пакетов, проверкой очерёдности пакетов, TTL 8 и вычислением контрольных сумм. Туннель должен использовать только интерфейс gw1. Пусть имя создаваемого туннеля будет <tt>mytunnel</tt>.<br />
<br />
Тогда необходимо сделать следующие операции:<br />
* Создать каталог туннеля:<br />
/etc/net/ifaces/mytunnel<br />
<br />
* Создать в каталоге туннеля файл настроек <tt>options</tt><br />
/etc/net/ifaces/mytunnel/options<br />
<br />
* Отредактировать файл настроек <tt>options</tt>: <br />
<br />
<source lang="ini"><br />
TYPE=iptun<br />
TUNTYPE=gre<br />
TUNLOCAL=10.0.1.2<br />
TUNREMOTE=10.0.2.3<br />
TUNTTL=8<br />
HOST=gw1<br />
TUNOPTIONS='seq ikey 2020 okey 2030 csum'<br />
</source><br />
<br />
<div id="vpn"></div><br />
<br />
=== Замечания о настройке VPN-подключения и туннелей ===<br />
<br />
Часто при настройке VPN-подключения (под которыми здесь будут подразумеваться все туннельные подключения, то есть подключения поверх IP) не учитывают, что использование опции pppd '<tt>defaultroute</tt>' маршрут по-умолчанию после подключения будет изменен. При этом, если VPN-сервер находится в другой, отличной от клиента, сети, то после подключения (и изменения маршрута по-умолчанию) VPN-сервер становится недоступным, следовательно, недоступными становятся все внешние адреса, и подключение, как правило, прекращается по тайм-ауту.<br />
<br />
Решением, как обычно (и рекомендовано), служит указание ''отдельного'' маршрута на VPN-сервер (или его сеть). Для этого необходимо прописать (в примере - для маршрута через eth0) в <tt>/etc/net/ifaces/eth0/ipv4route</tt> строку вида:<br />
<br />
10.0.1.0/24 via 10.0.0.1<br />
<br />
В данном примере подразумевается, что VPN-сервер находится в сети 10.0.1.0/24 (например, имеет адрес 10.0.1.1), клиент — в сети 10.0.0.0/24 (и имеет адрес, например, 10.0.0.10), а маршрутизатор имеет адрес 10.0.0.1.<br />
<br />
Теперь, при использовании опции '<tt>defaulroute</tt>' для pppd (которая указывает, что необходимо изменить на вновь созданное подключение маршрут по-умолчанию), даже после замены маршрута по-умолчанию новым, сеть 10.0.1.0, в которой в нашем примере и находится VPN-сервер, останется доступной.<br />
<br />
Как более точечный вариант (применяется в alterator-net-pptp 0.5.x) можно использовать скрипты <tt>ifup-pre</tt> и <tt>ifdown-post</tt> в каталоге конфигурируемого PPP-интерфейса.<br />
<br />
Наример:<br />
<source lang="bash"><br />
#!/bin/sh<br />
# sample /etc/net/ifaces/ppp0/ifup-pre; replace variables yourself<br />
ip route add $VPN_SERVER via $DEF_GW<br />
</source><br />
<source lang="bash"><br />
#!/bin/sh<br />
# sample /etc/net/ifaces/ppp0/ifdown-post; replace variables yourself<br />
ip route del $VPN_SERVER via $DEF_GW<br />
</source><br />
<br />
Не забудьте подставить нужные IP-адреса (не сеть, где VPN-сервер, а ее /32 префикс CIDR) и выполнить команду: <br />
<tt>chmod +x ifup-pre ifdown-post</tt><br />
<br />
<div id="ipsectun"></div><br />
<br />
=== Настройка и использование IPSec-туннелей ===<br />
<br />
В ОС ALT Linux существует возможность использования статических IPSec-туннелей, которые реализуются модулем ядра ipsec_tunnel, который в свою очередь использует CryptoAPI ядер серии 2.4. Для этих интерфейсов, кроме <tt>TUNLOCAL</tt> и <tt>TUNREMOTE</tt>, обязательно требуется ещё параметр <tt>TUNSPI</tt>. Это уникальный номер туннеля, который должен иметь значение более 0x2000 и быть одинаковым на обоих хостах. Для настройки IPSec-туннелей требуется определение параметров либо шифрования, либо подписи, либо того и другого вместе. Опции <tt>CIPHER</tt> и <tt>DIGEST</tt> определяют соответственно алгоритмы и режимы шифрования и подписи, а опции <tt>CIPHERFILE</tt> и <tt>DIGESTFILE</tt> — имена файлов в конфигурационном каталоге интерфейса, которые содержат ключи шифрования и подписи. Для форсирования интерфейса, через который будут посылаться туннелированные пакеты, можно использовать опцию <tt>HOST</tt>.<br />
<br />
<div id="iprule"></div><br />
<br />
=== Сложная маршрутизация (или несколько таблиц маршрутизации) ===<br />
<br />
Под «сложной маршрутизацией» подразумевается наличие нескольких таблиц маршрутизации. Для их использования необходимо сконфигурировать правила ядра. В правилах по умолчанию можно увидеть следующее:<br />
<br />
<pre>$ /sbin/ip ru<br />
0: from all lookup local <br />
32766: from all lookup main <br />
32767: from all lookup default</pre><br />
<br />
Для настройки «сложной маршрутизациии» необходимо выполнить следующие операции:<br />
<br />
Шаг 1 : Сами таблицы определены в файле <tt>/etc/iproute2/rt_tables</tt>. Для создания конфигурации «сложной маршрутизации» необходимо вначале «создать» нужные таблицы в этом файле (если вы хотите использовать имена таблиц, а не числа).<br />
<br />
Шаг 2 : Необходимо заполнить таблицы. В конфигурационном каталоге интерфейса в файле <tt>ipv4route</tt> необходимо добавить маршрутные записи, не забывая указать <tt>table XX</tt>. Важно учитывать, что если строка начинается с режима ip route (add, del, replace, append, change), то по умолчанию будет использован режим <tt>DEFAULT_IPV4ROUTE_CMD</tt> (<tt>append</tt>).<br />
<br />
Шаг 3 : Определить правила в файле <tt>ipv4rule</tt>. Здесь есть особенности, связанные автоматической заменой/добавлением параметров. Если строка не начинается с операции del или add, то нужный режим будет подставлен автоматически. Это подходит для тех случаев, когда вам при "поднятии" интерфейса необходимо добавить правила, а при "опускании" — удалить. Возможность указывать del или add реализована для обратных случаев: если при "поднятии" интерфейса вам необходимо удалить правила, а при "опускании" — добавить. В этом случае add и del будут в нужный момент автоматически заменены на del и add.<br />
<br />
Пример такой конфигурации входит в [http://etcnet.org/ /etc/net] 0.7.12: (каталог документации examples/routing-LARTC-1/)<br />
<br />
<div id="wireless"></div><br />
<br />
=== Простое переключение маршрутов ===<br />
<br />
Пусть имеется eth-интерфейс, который используется постоянно, и настроен маршрут по умолчанию.<br />
Часто бывает необходимость настроить второй маршрут по умолчанию через беспроводной интерфейс,<br />
но с меньшей метрикой, чем у проводного интерфейса.<br />
В этом случае при поднятии WI-FI маршрут по умолчанию «развернется» в нужную сторону.<br />
<br />
Например:<br />
<br />
Для eth-интерфейса файл настроек <tt>/etc/net/ifaces/eth0/ipv4route</tt> будет таким:<br />
<pre>default via 192.168.3.254 metric 10</pre><br />
а для WI-FI-интерфейса файл настроек <tt>/etc/net/ifaces/ath0/ipv4route</tt> таким:<br />
<pre>default via 192.168.123.1 metric 5</pre><br />
<br />
=== Беспроводный Ethernet (или настройка WI-FI) ===<br />
Большинство беспроводных интерфейсов сейчас представлено системе как интерфейсы Ethernet. Соответственно беспроводный интерфейс будет иметь <tt>[https://bugzilla.altlinux.org/show_bug.cgi?id=6283 TYPE=eth]</tt>. Чтобы интерфейс нормально функционировал, необходимо кроме загрузки модуля с параметрами, воспользоваться утилитами <tt>iwconfig</tt> из пакета wireless-tools или <tt>wpa_supplicant</tt> из такого же пакета. Вместо того, чтобы запускать их вручную, можно поместить в конфигурационный каталог интерфейса файл <tt>iwconfig</tt> с командами iwconfig или файл <tt>wpa_supplicant.conf</tt> с конфигурацией wpa_supplicant. Они будут использованы автоматически.<br />
<br />
Пример [http://hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wireless.html конфигурации] (совместно с <tt>[http://ndiswrapper.sourceforge.net/ ndiswrapper]</tt>):<br />
<br />
Файл: <tt>/etc/net/ifaces/wlan0/options</tt><br />
<pre>TYPE=eth<br />
MODULE=ndiswrapper<br />
NEVER_RMMOD=yes<br />
BOOTPROTO=dhcp<br />
USE_HOTPLUG=no<br />
ONBOOT=no</pre><br />
<br />
Файл: <tt>/etc/net/ifaces/wlan0/iwconfig</tt><br />
<pre>essid default<br />
#key bababababa</pre><br />
<br />
<br />
Еще один пример использования etcnet для настройки беспроводной сети:<br />
<br />
Файл: <tt>/etc/net/ifaces/wlan0/options</tt><br />
<pre>TYPE=eth<br />
USE_HOTPLUG=NO<br />
BOOTPROTO=static<br />
module=ipw2200<br />
WPA_DRIVER=wext</pre><br />
<br />
Файл: <tt>/etc/net/ifaces/wlan0/iwconfig</tt><br />
<pre>essid homenet<br />
mode 1<br />
ap 00:11:D8:22:AD:0D<br />
channel 3<br />
rate 11M</pre><br />
<br />
Файл: <tt>/etc/net/ifaces/wlan0/wpa_supplicant.conf</tt><br />
<pre>ctrl_interface=/var/run/wpa_supplicant<br />
ctrl_interface_group=0<br />
eapol_version=1<br />
ap_scan=1<br />
fast_reauth=1<br />
<br />
network={<br />
ssid="homenet"<br />
bssid=00:11:D8:22:AD:0D<br />
proto=WPA<br />
key_mgmt=WPA-PSK<br />
pairwise=CCMP TKIP<br />
group=TKIP<br />
psk="this is my mega secret password string to wpa supplicant"<br />
priority=2<br />
}</pre><br />
<br />
Если вы хотите воспользоваться WPS:<br />
# создайте <tt>/etc/net/ifaces/wlan0/wpa_supplacant.conf</tt> следующего вида:<br />
<pre><br />
ctrl_interface=/var/run/wpa_supplicant<br />
update_config=1<br />
</pre><br />
# поднмите безпроводной интерфейс (ifup wlan0)<br />
# запустите wpa_cli и дайте команды wps_pbc (после этого нужно соответственно нажать кнопку WPS на точке доступа и подождать окончания обмена данными) и save_config (для записи конфигурации в <tt>wpa_supplicant.conf</tt>). Или же можно воспользоваться утилитой wpa_gui, отображающей процесс более наглядно.<br />
<br />
<div id="sysctl"></div><br />
<br />
=== Использование автодополнения в sysctl.conf ===<br />
<br />
В конфигурационном каталоге интерфейса может находиться файл <tt>sysctl.conf</tt>, в котором можно перечислить переменные <tt>sysctl(8)</tt>. Но переменные могут быть как общесистемными, так и относящимися к интерфейсу — описание переменных можно почитать в [http://gazette.linux.ru.net/rus/articles/index-ipsysctl-tutorial.html http://gazette.linux.ru.net/rus/articles/index-ipsysctl-tutorial.html]. Естественно, запись в sysctl.conf настроек вида <tt>net.ipv4.conf.eth0.log_martians = 1</tt> достаточно неудобна, а при переименовании интерфейса велик риск не отредактировать файл <tt>sysctl.conf</tt> соответствующим образом.<br />
<br />
Эта проблема решается следующим способом : производится запись в файл только имени переменной и значение, а система [http://etcnet.org/ /etc/net] сама найдет путь к этой переменной и вызовет <tt>sysctl</tt> с полным именем. <br />
<br />
Пример содержания файла <tt>sysctl.conf</tt>:<br />
<pre>log_martians=1<br />
rp_filter=1</pre><br />
<br />
<div id="profiles"></div><br />
<br />
=== Подключение к Wi-Fi с сертификатом на аппаратном токене ===<br />
Для беспроводного подключения в корпоративных сетях могут использоваться сертификаты, записанные на аппаратном токене, например, Aladdin eToken. Для настройки такого подключения необходимо использовать <tt>/etc/net/ifaces/wlan0/wpa_supplicant.conf</tt>.<br />
<pre><br />
ctrl_interface=/var/run/wpa_supplicant<br />
ctrl_interface_group=wheel<br />
#eapol_version=1<br />
#ap_scan=2<br />
#fast_reauth=1<br />
pkcs11_engine_path=/usr/lib/openssl/engines/engine_pkcs11.so<br />
pkcs11_module_path=/usr/lib/libeTPkcs11.so<br />
update_config=0<br />
<br />
network={<br />
ssid="test"<br />
key_mgmt=WPA-EAP<br />
pairwise=CCMP TKIP<br />
group=CCMP TKIP<br />
eap=TLS<br />
identity="email@address.ru"<br />
engine_id="pkcs11"<br />
key_id="xxxxxxxxx"<br />
cert_id="xxxxxxxxx"<br />
engine=1<br />
}<br />
</pre><br />
где key_id и cerd_id взяты из вывода команды<br />
<pre><br />
# pkcs11-tool --module /usr/lib/libeTPkcs11.so -O -l<br />
</pre><br />
<br />
Используются оригинальные ("родные") драйвера Aladdin - pkiclient-5.00.28-0, и пакет openssl-engine_pkcs11-0.1.5-alt1.<br />
<br />
=== Профили конфигурации ===<br />
<br />
==== Определение профилей ====<br />
Профиль — именованный вариант конфигурации, в той или иной степени изменяющий базовую конфигурацию системы. Профили могут быть применены, например, для конфигурации ноутбука в разных сетевых окружениях, или при подготовке новой или тестовой конфигурации с возможностью быстрого возврата к старой. Практически профили реализуются следующим образом: для какого-либо из файлов, составляющих общесистемную конфигурацию или конфигурацию интерфейса, создаётся альтернативный вариант, который отличается добавлением в конце названия файла знака # и имени профиля.<br />
<br />
Например, пусть единственное отличие между профилями заключается в том, какой модуль ядра будет загружен для интерфейса eth0. В этом случае файл <tt>/etc/net/ifaces/eth0/options</tt> необходимо скопировать в <tt>/etc/net/ifaces/eth0/options#profile1</tt> и изменить значение переменной <tt>MODULE</tt> в одном из них. Далее при использовании конфигурации по умолчанию будет использован файл <tt>options</tt>, а при использовании профиля profile1 — файл <tt>options#profile1</tt>. Если при этом для назначения интерфейсу имени используется файл <tt>/etc/net/iftab</tt>, то скорее всего необходимо будет создать соответствующий файл <tt>/etc/net/iftab#profile1</tt>, так как другой модуль ядра указывает на другой физический интерфейс и исходный файл <tt>iftab</tt> работать не будет.<br />
<br />
Профили могут использоваться также и для отключения каких-то параметров конфигурации. Например, если используется файл <tt>ipv4route</tt> для установки маршрутов для интерфейса, то можно создать файл нулевого размера <tt>ipv4route#profile2</tt>, чтобы при использовании профиля profile2 никаких маршрутов не конфигурировалось.<br />
<br />
==== Выбор профиля при загрузке ====<br />
Если при загрузке системы ядру был передан параметр netprofile, то его значение будет использовано как имя профиля по умолчанию. Это может быть использовано для создания собственных пунктов меню загрузчиков LILO и GRUB с заранее определённым профилем сетевой конфигурации. Заданный таким образом профиль может быть далее переопределён другими методами. Следует понимать разницу между различными конфигурациями и различными результатами применения одной конфигурации. Например, если в двух разных сетях используется DHCP, то смысла в разных профилях конфигурации нет.<br />
<br />
Для загрузчика LILO секции <tt>/etc/lilo.conf</tt> могут выглядеть следующим образом:<br />
<pre>image=/boot/vmlinuz-up<br />
label=linux-up home<br />
append=" netprofile=home"<br />
[...]<br />
image=/boot/vmlinuz-up<br />
label=linux-up office<br />
append=" netprofile=office"<br />
[...]</pre><br />
Для приведённого примера необходимо будет создать варианты для файлов, отличающихся в профилях home и office, и можно будет выбирать при загрузке, какой из профилей необходимо использовать. Использование этого метода удобно, если смена сетевого окружения происходит синхронно с загрузкой системы.<br />
<br />
==== Выбор профиля по умолчанию ====<br />
Если требуется, чтобы определенный профиль конфигурации использовался по умолчанию, то необходимо записать его название в файл <tt>/etc/net/profile</tt>. Этот метод имеет приоритет над параметром ядра netprofile. Использование такого способа выбора профиля целесообразно, когда переключение между конфигурациями происходит реже, чем перезагрузка системы.<br />
<br />
==== Смена профиля во время работы ====<br />
Если требуется переконфигурировать сеть без перезагрузки или редактирования файла {{path|/etc/net/profile}}, то следует использовать параметры сервиса network, описанные в разделе [[#restart, reload и другие команды|restart, reload и другие команды]]. Этот метод имеет приоритет над профилем по умолчанию и профилем, выбранным при загрузке. Целесообразно его использовать, если смена сетевого окружения происходит чаще, чем перезагрузка системы.<br />
<br />
==== Определение профиля во время конфигурации интерфейса ====<br />
Если в каталоге конфигурации интерфейса существует исполняемый файл ненулевого размера с именем <tt>selectprofile</tt>, то этот файл будет выполнен и первое слово первой строки его стандартного вывода использовано как имя профиля, которое должно быть использовано для конфигурации данного интерфейса. Этот метод имеет приоритет над всеми остальными методами. Исходной задачей, требующей такого решения, являлось конфигурирование беспроводного интерфейса в зависимости от доступных точек доступа.<br />
<br />
Следует учитывать, что число вызовов файла <tt>selectprofile</tt> может меняться в зависимости от контекста и время его выполнения может быть различным, поэтому при написании такого файла следует учитывать, что первым параметром будет являться имя текущего сценария. В настоящее время это могут быть ifup*, ifdown*, setup* и shutdown*. Для приведённого выше примера имеет смысл реагировать только на вызовы из ifup или ifup-common.<br />
<br />
== References ==<br />
<br />
<references/><br />
<br />
{{Category navigation|title=etcnet|category=etcnet|sortkey=*}}</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Etcnet&diff=16308Etcnet2010-09-10T15:39:58Z<p>EvgeniiTerechkov: Актуализация</p>
<hr />
<div>{{DISPLAYTITLE:etcnet}}<br />
{{span|font-size: 180%|Подсказки пользователю /etc/net}}<br />
<br />
{| style="border:1px solid #AAA; background:#F9F9F9; width:200px; margin: 0 0 1em 1em; padding:.2em; float: right;" class=noprint<br />
|-<br />
|[[Image:Information.svg|20x20px]] external links:<br />
* [http://sisyphus.ru/en/srpm/etcnet package info]<br />
* [http://git.altlinux.org/people/sbolshakov/packages/?p=etcnet.git;a=summary source git repo]<br />
|}<br />
<br />
Дополнительные страницы:<br />
* [[etcnet/qos|настройка QoS]]<br />
* [[etcnet/firewall|настройка сетевого экрана (firewall]])<br />
<!-- Не убирайте div-ы, на них есть внешние ссылки! --><br />
<div id="quickstart"></div><br />
<br />
== Быстрый старт ==<br />
<div id="docs"></div><br />
<br />
=== Источники информации по /etc/net ===<br />
Обратите внимание, что начиная с версии 0.8.0 документация по [http://etcnet.org/ /etc/net] была собрана из комментариев, расположенных во множестве файлов, в несколько страниц руководств (man). Список всех файлов документации пакета <tt>etcnet</tt> можно получить командой:<br />
<pre>$ rpmquery -d etcnet</pre><br />
<br />
<div id="onecard"></div><br />
<br />
=== Быстрая настройка сетевого интерфейса стандарта Ethernet ===<br />
Для настройки одного сетевого интерфейса следует выполнить следующие шаги:<br />
<br />
Шаг 1: Создать каталог {{path|/etc/net/ifaces/eth0}}. Это каталог конфигурации данного интерфейса (<tt>eth0</tt>), в котором будут храниться файлы с настройками.<br />
<br />
Шаг 2: Определить, какой модуль необходим для вашей сетевой карты. Для этого можно использовать команды: <tt>lspci, lspcidrake, pciscan</tt>.<br />
<br />
Шаг 3: В каталоге конфигурации сетевого интерфейса создать файл <tt>options</tt> и записать в этот файл строку:<br />
<pre>MODULE=<имя модуля></pre> <br />
На данном этапе работу с файлом <tt>options</tt> можно завершить.<br />
<br />
Шаг 4: Выяснить, какой IP-адрес должен быть назначен вашему интерфейсу. Если ваш сетевой интерфейс получает конфигурируется по DHCP, то в файл {{path|/etc/net/ifaces/eth0/options}} следует записать строку:<br />
<pre>BOOTPROTO=dhcp</pre><br />
и перейти к шагу 7.<br />
<br />
'''Замечание:''' В ряде случаев в файле <tt>options</tt> может понадобиться запись:<br />
<pre>DHCP_HOSTNAME=<имя машины без домена></pre><br />
Эта опция описана в странице руководства <tt>etcnet-options(5)</tt>.<br />
<br />
'''Замечание:''' В конце файла <tt>options</tt> необходимо наличие пустой строки.<br />
<br />
У сетевого интерфейса существуют два взаимосвязанных атрибута: <br />
* IP-адрес;<br />
* сетевая маска (mask). <br />
Шаг 5: Текущие значение адреса можно просмотреть командой:<br />
{{cmd|# /sbin/ip address show}} <br />
Вероятнее всего вы увидите, что интерфейс-петля lo (loopback) уже сконфигурирован с адресом 127.0.0.1/8 (что эквивалентно IP-адресу 127.0.0.1 и маске подсети 255.0.0.0). <tt>/8</tt> означает длину префикса CIDR (Classless InterDomain Routing).<br />
Для задания IP-адреса и маски подсети интерфейса <tt>eth0</tt> необходимо создать файл {{path|/etc/net/ifaces/eth0/ipv4address}}, в который следует записать IP-адрес с длиной маски, например:<br />
<pre>10.0.0.20/24</pre> <br />
<br />
Наиболее популярны маски /24 (т.е. длина префикса CIDR равная 24 эквивалентна маске сети 255.255.255.0 - это одна сеть класса C на 254 хоста) и /30. Для справки приводится таблица соответствия сетевых масок в различных нотациях.<br />
<ref><br />
{|<br />
|<br />
{| class="standard"<br />
|-<br />
!маска<br />в битах!!маска<br />точечно-<br />десятичная<br />
|-<br />
|/32||255.255.255.255<br />
|-<br />
|/31||255.255.255.254<br />
|-<br />
|/30||255.255.255.252<br />
|-<br />
|/29||255.255.255.248<br />
|-<br />
|/28||255.255.255.240<br />
|-<br />
|/27||255.255.255.224<br />
|-<br />
|/26||255.255.255.192<br />
|-<br />
|/25||255.255.255.128<br />
|-<br />
|/24||255.255.255.0<br />
|-<br />
|/23||255.255.254.0<br />
|-<br />
|/22||255.255.252.0<br />
|-<br />
|/21||255.255.248.0<br />
|-<br />
|/20||255.255.240.0<br />
|-<br />
|/19||255.255.224.0<br />
|-<br />
|/18||255.255.192.0<br />
|-<br />
|/17||255.255.128.0<br />
|}<br />
|<br />
| ||<br />
{| class="standard"<br />
|-<br />
!маска<br />в битах!!маска<br />точечно-<br />десятичная<br />
|-<br />
|/16||255.255.0.0<br />
|-<br />
|/15||255.254.0.0<br />
|-<br />
|/14||255.252.0.0<br />
|-<br />
|/13||255.248.0.0<br />
|-<br />
|/12||255.240.0.0<br />
|-<br />
|/11||255.224.0.0<br />
|-<br />
|/10||255.192.0.0<br />
|-<br />
|/9||255.128.0.0<br />
|-<br />
|/8||255.0.0.0<br />
|-<br />
|/7||254.0.0.0<br />
|-<br />
|/6||252.0.0.0<br />
|-<br />
|/5||248.0.0.0<br />
|-<br />
|/4||240.0.0.0<br />
|-<br />
|/3||224.0.0.0<br />
|-<br />
|/2||192.0.0.0<br />
|-<br />
|/1||128.0.0.0<br />
|}<br />
|}<br />
</ref><br />
<br />
Шаг 6: Выяснить адрес вашего шлюза (маршрут по умолчанию). Например, IP-адрес вашего шлюза — <tt>10.0.0.254</tt>. Тогда необходимо создать файл {{path|/etc/net/ifaces/eth0/ipv4route}}, в который записать строку:<br />
<pre>default via 10.0.0.254</pre><br />
Шаг 7: Убедиться, что всё выполнено правильно, выполнив команду:<br />
{{cmd|# service network restart}}<br />
Ваш интерфейс <tt>eth0</tt> должен быть успешно сконфигурирован. Если вы конфигурировали <tt>eth0</tt>, используя DHCP-сервер, но адрес интерфейсу не был назначен, то следует искать сообщение от DHCP-сервера в файле {{path|/var/log/messages}}.<br />
<br />
<div id="ifplugd"></div><br />
<br />
=== Настройка ifplugd ===<br />
Начиная с версии 0.7.10, [http://etcnet.org/ /etc/net] управляет ifplugd самостоятельно. Это было сделано для лучшей интеграции пакетов и для возможности следить за несколькими сетевыми интерфейсами одновременно. Для корректного использования ifplugd необходимо выполнить команду:<br />
# chkconfig ifplugd off<br />
<br />
и назначить переменную <tt>USE_IFPLUGD</tt> в файлах <tt>options</tt> соответствующих интерфейсов (<tt>/etc/net/ifaces/<имя интерфейса>/options</tt>). Комментарий по данной переменной дан в странице руководства <tt>etcnet-options(5)</tt>.<br />
<br />
<div id="ppp"></div><br />
<br />
=== Настройка PPP-интерфейса ===<br />
Для настройки обычного модемного PPP-соединения необходимо:<br />
# Создать каталог конфигурации PPP-интерфейса, например, {{path|/etc/net/ifaces/ppp5}}. Вы можете задавать имена PPP-интерфейса вида pppN, pppNN, pppNNN и т. п., где N - любая цифра от 0 до 9;<br />
# Прочитать файл: {{path|/etc/net/ifaces/default/options-ppp}};<br />
# Создать файлы конфигурации. Вероятнее всего вам понадобятся <tt>pppconnect</tt> и <tt>pppdisconnect</tt>, чтобы <tt>pppd</tt> "знал", как дозваниваться и соединяться. Это скрипты для программы <tt>chat(8)</tt>. Кроме этого в файле <tt>pppoptions</tt> можно (часто нужно) перечислить опции <tt>pppd(8)</tt>, определяющие способ авторизации, скорость и название порта и т. п.;<br />
# Заполнить {{path|/etc/ppp/chap-secrets}} или {{/etc/ppp/pap-secrets}}.<br />
<br />
<div id="ppp-pptp-pppoe"></div><br />
<br />
=== Настройка PPtP-интерфейса и PPPoE-интерфейса ===<br />
''[[VPN_(PPTP_PPPoE) | Основная статья: VPN (PPTP PPPoE)]]''<br />
<br />
Хотя PPtP-соединения могут быть настроены и как обычные PPP-соединения, в [http://etcnet.org/ /etc/net] версии 0.7.10 для удобства пользователей была введена опция <tt>PPPTYPE</tt>. Она может принимать следующие значения:<br />
* <tt>dialup</tt> - обычный PPP-интерфейс.<br />
* <tt>pppoe</tt> - интерфейс PPPoE. Для такого интерфейса необходимо в опции <tt>HOST</tt> указывать имя Ethernet-интерфейса, через который будет производиться работа PPPoE. Побочным положительным эффектом будет то, что этот интерфейс будет при необходимости автоматически подниматься (т.е настраиваться) (см. [[#Зависимости между интерфейсами|Зависимости между интерфейсами]]).<br />
* <tt>pptp</tt> - интерфейс PPtP. Для такого интерфейса необходимо в опции <tt>PPTP_SERVER</tt> указывать имя хоста или IP-адрес PPtP-сервера, к которому будет производиться подключение. Обратите внимание, что хотя такие интерфейсы не имеют опции <tt>HOST</tt>, в большинстве случаев есть необходимость указать в опции <tt>REQUIRES</tt> интерфейс, через который будет достижим хост, указанный в <tt>PPTP_SERVER</tt>.<br />
<br />
См. также [[#Замечания о настройке VPN-подключения и туннелей|Замечания о настройке VPN-подключения и туннелей]].<br />
<br />
<div id="DNSandPPP"></div><br />
<br />
=== DNS и PPP-соединения ===<br />
<div style="display: inline; color: red;">Внимание: здесь описывается проблема, которая на самом деле была создана, а не решена — т.е. ради специфики [https://bugzilla.altlinux.org/show_bug.cgi?id=13789 kppp] была создана чётная ошибка в [https://bugzilla.altlinux.org/show_bug.cgi?id=13773 ppp-common]; последняя уже исправлена.</div><br />
<br />
Довольно долгое время существовала проблема неправильной модификации /etc/resolv.conf при установке PPP-соединений: [https://bugzilla.altlinux.org/show_bug.cgi?id=4249 https://bugzilla.altlinux.org/show_bug.cgi?id=4249]. Сейчас она решена, но необходимо дать пояснения. Прежде всего убедитесь, что в файле <tt>/etc/resolv.conf</tt> есть строка:<br />
<pre># ppp temp entry</pre><br />
Если этой строки нет, то в файле не будут модифицироваться строки nameserver, если только какая-нибудь программа типа kppp это не сделает специально. Если такая строка есть, то <tt>/etc/resolv.conf</tt> будет модифицироваться в зависимости от значения булевой (логической) переменной RESOLV_MODS, которую необходимо задать в файле <tt>/etc/sysconfig/network</tt>.<br />
<br />
<div style="display: inline; color: red;">Внимание</div>: при ppp-common >= 0.4-alt1 строки <tt># ppp temp entry</tt> в файле <tt>/etc/resolv.conf</tt> при отсутствии PPP-соединения, поднятого какой-либо программой-«звонилкой», запущенной от администратора системы (пользователь root) — быть '''не должно'''! Если это есть, следует убрать, чтобы <tt>/etc/ppp/ip-up</tt> занимался обновлением записей про DNS в этом файле.<br />
<br />
<div id="restartreload"></div><br />
<br />
=== restart, reload и другие команды ===<br />
У сервиса <tt>network</tt> имеется ряд команд:<br />
* <tt>start</tt> - запустить все стационарные интерфейсы. hotplug-интерфейсы будут сконфигурированы при поступлении соответствующего вызова от hotplug.<br />
* <tt>startwith <имя профиля> </tt> - старт с указанным именем профиля, а не определённым автоматически.<br />
* <tt>stop</tt> - остановить все стационарные интерфейсы. hotplug-интерфейсы будут расконфигурированы при поступлении соответствующего вызова от hotplug.<br />
* <tt>stopwith <имя профиля> </tt> - стоп с указанным именем профиля, а не определённым автоматически.<br />
* <tt>restart</tt> - эквивалентно <tt>stop</tt> с последующим <tt>start</tt>, как и в большинстве других сервисов.<br />
* <tt>restartwith <имя профиля> </tt> - рестарт в контексте указанного профиля, эквивалентно <tt>stopwith <имя профиля> и startwith <имя профиля></tt>.<br />
* <tt>switchto <имя профиля> </tt> - переключение в указанный профиль, эквивалентно <tt>stop</tt> и <tt>startwith <имя профиля></tt>.<br />
* <tt>reload</tt> - семантически обозначает «актуализировать текущую конфигурацию». Для всех сконфигурированных в настоящий момент интерфейсов будет выполнена реконфигурация при наличии конфигурации.<br />
* <tt>check</tt> - автоматическая проверка конфигурационной базы.<br />
<br />
<div id="bootproto"></div><br />
<br />
=== Протоколы конфигурации адресов ===<br />
С помощью опции <tt>BOOTPROTO</tt> вы можете управлять тем, как у интерфейса будут появляться адреса и маршруты (это относится только к протоколу IPv4, так как протоколы IPv6 и IPX получают адреса только статически).<br />
* <tt>static</tt> — адреса и маршруты будут взяты из <tt>ipv4address</tt> и <tt>ipv4route</tt>.<br />
* <tt>dhcp</tt> — интерфейс будет сконфигурирован по DHCP.<br />
* <tt>ipv4ll</tt> — интерфейс будет сконфигурирован с помощью IPv4LL (link-local), ранее известному как ZCIP (zeroconf IP). Это значит, что из сети 169.254.0.0/16 будет подобран ещё не использованный адрес и назначен на интерфейс.<br />
Существует несколько комбинированных способов:<br />
* <tt>dhcp-static</tt> — если конфигурация по DHCP не удалась, конфигурировать методом static.<br />
* <tt>dhcp-ipv4ll</tt> — если конфигурация по DHCP не удалась, конфигурировать методом ipv4ll.<br />
* <tt>dhcp-ipv4ll-static</tt> — если конфигурация по DHCP не удалась, конфигурировать методом ipv4ll. Если и это не удалось, конфигурировать методом static.<br />
<br />
<div id="internals"></div><br />
<br />
== Устройство /etc/net ==<br />
<div id="generalinfo"></div><br />
<br />
=== Общие сведения ===<br />
[http://etcnet.org/ /etc/net] - это система конфигурации сети в Linux, т.е. эта система позволяет администратору Linux достаточно просто произвести настройки сети. Если же вы читаете эту страницу, то, вероятно, у вас возникли трудности с её использованием. Для решения возможных проблем полезно знать:<br />
<br />
# [http://etcnet.org/ http://etcnet.org/] - сайт проекта, на котором можно найти примеры конфигурации и статьи по настройке системы.<br />
# [http://etcnet.org/ /etc/net] интегрирован в ALT Linux Sisyphus в виде пакетов:<br />
#* {{pkg|etcnet}} - базовые сценарии;<br />
#* {{pkg|etcnet-full}} - виртуальный пакет с зависимостями на все пакеты, которые могут использоваться сценариями [http://etcnet.org/ /etc/net], с указанием их точных версий;<br />
#* {{pkg|etcnetconf}} - '''прототип''' конфигуратора;<br />
#* {{pkg|etcnet-defaults-desktop}} - умолчания для рабочей станции;<br />
#* {{pkg|etcnet-defaults-server}} - умолчания для сервера; <br />
# Пакеты {{pkg|etcnet}} и {{pkg|net-scripts}} — две конфликтующие реализации «подсистемы конфигурации сети» (network-config-subsystem).<br />
# При установке etcnet вместо net-scripts (или наоборот) сервис <tt>network</tt> оказывается выключенным. Это означает, что при загрузке системы сеть не будет сконфигурирована, что можно проверить командой {{cmd|chkconfig --list network}}. Для быстрого исправления проблемы можно дать команду {{cmd|chkconfig network reset}}.<br />
# etcnet '''НЕ''' импортирует автоматически настройки net-scripts. Если вы только что установили etcnet, и ваши сетевые интерфейсы всё ещё остаются сконфигурированными (несмотря на уже отсутствующий пакет net-scripts), то вы можете запустить сценарий <tt>/etc/net/scripts/initconf</tt>. Он попытается проанализировать текущее состояние интерфейсов и выведет вам результат. Никаких файлов при этом записано не будет. Если вам подходит вывод initconf, то запустите его с параметром write и он проделает то же самое, но уже с сохранением конфигурации.<br />
# Для корректной работы системы в целом необходимо, чтобы содержимое файла <tt>/etc/sysconfig/network</tt> было корректным.<br />
# Переменные <tt>sysctl</tt> в ОС ALT Linux конфигурируются в следующих местах: <tt>/etc/sysctl.conf</tt> (глобальные системные), <tt>/etc/sysconfig/network-scripts/sysctl.conf</tt> (общие сетевые в net-scripts), <tt>/etc/net/sysctl.conf</tt> (общие сетевые в [http://etcnet.org/ /etc/net]), <tt>/etc/net/ifaces/*/sysctl.conf*</tt> (частные для конкретных интерфейсов или их типов в [http://etcnet.org/ /etc/net]).<br />
<br />
<div id="options.d"></div><br />
<br />
=== Организация опций /etc/net по умолчанию ===<br />
Методология [http://etcnet.org/ /etc/net] предусматривает несколько шагов наследования опций, первый из которых — загрузка опций по умолчанию. В более ранних версиях это происходило из одного файла <tt>/etc/net/options</tt>, сейчас же в вашем распоряжении есть каталог <tt>/etc/net/options.d</tt>, из которого будут последовательно прочитаны все файлы.<br />
<br />
Иными словами: оригинальный архив etcnet содержит только файл <tt>/etc/net/options.d/00-default</tt>. Упаковщик etcnet в какой-либо дистрибутив вместо того, чтобы добавить патч, просто добавляет файл с бОльшим номером, который переопределяет нужные опции.<br />
<br />
Ввиду решения различных задач, администратору системы может не подойти содержание дистрибутивного набора. В этом случае администратор может создать файл с ещё более высоким номером и определить настройки умолчания для своей системы. В результате такого подхода:<br />
# Уменьшается количество патчей (хотя их свойство "отваливаться" от пакета при его упаковке бывает полезным).<br />
# Не изменяются файлы с опциями, принадлежащие пакету. Это делает обновление пакета намного более корректным.<br />
# Можно легко увидеть, какие опции переопределяются на каждом этапе.<br />
<br />
<div id="iftab"></div><br />
<br />
=== Назначение iftab ===<br />
<br />
Начиная с дистрибутивов, основанных на ветках p5 и 5.1, переименование интерфейсов возложено на udev; см. тж. [http://lists.altlinux.org/pipermail/sisyphus/2009-June/340033.html это письмо] и [https://bugzilla.altlinux.org/show_bug.cgi?id=19313 #19313] и [http://sisyphus.ru/srpm/wireless-tools/changelog %changelog ifrename].<br />
<br />
Имена сетевых интерфейсов по умолчанию, как правило, содержат их тип (eth, ppp, wifi, ipsec) и индекс: 0 - для первого созданного интерфейса, 1 - для второго и т. д. При этом соответствие автоматически назначенных имён физическим устройствам может не сохраняться.<br />
<br />
Эта особенность неудобна, когда машина с Linux имеет более одного интерфейса каждого типа. Типичными примерами являются маршрутизаторы и ноутбуки. В маршрутизаторах, как правило, используются однотипные сетевые карты и при их замене или изменении порядка на PCI-шине соответствие оказывается нарушенным. В ноутбуках используются ethernet и wifi-устройства с горячим подключением, при этом слотов и карт может быть более чем 1. В этом случае пользователь/администратор скорее всего пожелает закрепить за каждой сменной картой её конфигурацию.<br />
<br />
[http://etcnet.org/ /etc/net] при конфигурации интерфейса использует то имя, под которым он сконфигурирован, а именно имя каталога, в котором хранятся файлы конфигурации интерфейса.<br />
<br />
Для привязки сетевой карты к имени интерфейса в простых случаях можно воспользоваться файлом <tt>/etc/iftab</tt>, man-страница по формату которого входит в пакет <tt>ifrename</tt> (<tt>iftab(5)</tt>).<br />
<br />
Использование <tt>/etc/iftab</tt> удобно, поскольку позволяет сохранять традиционные имена интерфейсов (например, eth0), но этот механизм не поддерживает расширенную функциональность /etc/net (в частности, ''профили'' /etc/net).<br />
<br />
Средством, позволяющим использовать все возможности <tt>etcnet</tt>, является файл <tt>/etc/net/iftab</tt>, обрабатываемый не утилитой <tt>ifrename</tt>, а непосредственно <tt>etcnet</tt>. Синтаксис этого файла совпадает с синтаксисом <tt>/etc/iftab</tt>. Ограничением же является невозможность использовать стандартные имена интерфейсом (<tt>ethX</tt>, <tt>pppX</tt>), так как переименование интерфейсов происходит уже после конфигурации интерфейса ядром. В случае, если вам необходим <tt>/etc/net/iftab</tt>, имеет смысл переименовать интерфейсы, давая им либо двухзначные номера (<tt>eth00</tt>, <tt>eth01</tt>...), либо осмысленные названия (<tt>isplink</tt>, <tt>lan</tt>...)<br />
<br />
См. письмо про [http://lists.altlinux.org/pipermail/sisyphus/2009-March/337924.html важность /etc/iftab]<br />
и тж. это письмо про [http://lists.altlinux.org/pipermail/devel/2007-October/065097.html отличия etcnet и сервиса ifrename]:<br />
{{начало цитаты}} Комментарии к письмам этого треда (с некоторыми пояснениями):<br />
<br />
1. «etcnet уже научился менять местами eth0 и eth1?»<br />
<br />
Освоение этого приема обладает сомнительной пользой. Рекомендуется <br />
рассматривать eth0 как временное имя с малым сроком жизни,<br />
а для повышения комфорта пользователей Ethernet-интерфейсы предлагается<br />
называть eth00, eth01, eth02 etc.<br />
<br />
2. «Существование (номинальное) net-scripts вынуждает поддерживать<br />
ряд сервисов, которые иначе могли бы быть упразднены»<br />
<br />
Эти сервисы можно "обезвредить" (отключить) контролем CONFMETHOD<br />
из /etc/sysconfig/network. При этом зависимости на пакет etcnet<br />
не возникнет, только на network-config-subsystem. Примеры таких<br />
пакетов должны быть в Sisyphus.<br />
<br />
3. «после приведения в порядок /etc/udev/rules.d/19-udev-ifrename.rules<br />
нужности в /etc/net/iftab я не заметил»<br />
<br />
Важнейшее принципиальное отличие /etc/net/iftab от /etc/iftab —<br />
нахождение /etc/net/iftab в специальном пространстве имён. Для него<br />
действуют механизмы определения профиля и хоста конфигурации. Это,<br />
например, позволит, при необходимости, составить конфигурацию так, что срочный<br />
ремонт маршрутизатора сведётся к переносу диска (или массива)<br />
из сгоревшего шасси в запасное. Возможны и другие примеры, которые<br />
станут невозможными при помещении iftab в /etc и его прямой<br />
интерпретации.<br />
<br />
Конечно, пользователю единственного ноутбука с одним-двумя сетевыми<br />
интерфейсами такая практика — полный overkill (т.е. такая практика ему не нужна), но его никто и не<br />
заставляет видеть всю подводную часть (т.е. все тонкости работы и настройки). В этом и гибкость.{{конец цитаты}}<br />
<br />
<div id="specifaces"></div><br />
<br />
=== Интерфейсы lo, default и unknown ===<br />
Сразу после установки пакета <tt>etcnet</tt> в каталоге <tt>/etc/net/ifaces</tt> (в котором хранятся конфигурации интерфейсов) находятся три каталога: <br />
* lo<br />
* default<br />
* unknown<br />
<br />
Интерфейс '''lo''' — стандартная "петля" (loopback), которая должна быть во всякой Linux-системе, поэтому конфигурация для него включена по умолчанию. В остальном он ничем не отличается от любого другого интерфейса и конфигурируется точно так же файлами <tt>options</tt> и <tt>ipv4address</tt>.<br />
<br />
Интерфейс '''default''' — это не интерфейс, а специальный каталог, файлы в котором обрабатываются следующим образом:<br />
* <tt>resolv.conf</tt> — если присутствует, то копируется в <tt>/etc/resolv.conf</tt>.<br />
* <tt>options</tt> — файл опций, читается после опций по умолчанию. Этот файл содержит комментарии.<br />
* <tt>options-<вид интерфейса></tt> — этот файл содержит опции, специфичные для данного вида интерфейсов. Некоторые из них не обязательны и позволяют использовать особенности данного вида интерфейсов, например, <tt>LINKDETECT</tt> в <tt>options-eth</tt>; другие обязательны, например, <tt>HOST</tt> в <tt>options-bri</tt>. Эти файлы содержат комментарии. Обратите внимание, что эти файлы не рекомендуется редактировать. Если вам нужно задать опцию для интерфейса, то, как правило, это можно сделать в файле <tt>options</tt> в конфигурационном каталоге данного интерфейса. Это облегчит процесс обновления пакета etcnet.<br />
* <tt>sysctl.conf-<вид интерфейса></tt> — файл с переменными sysctl, которые необходимо изменить. Сейчас единственный такой файл — <tt>sysctl.conf-dvb</tt>, который отключает <tt>return path filter</tt>, что всегда нужно в случае асимметричной маршрутизации.<br />
* <tt>iplink-<вид интерфейса></tt> — файл с командами iplink, специфичными для данного вида.<br />
* <tt>selectprofile</tt> — если этот файл исполняемый, то он будет вызван из сценариев <tt>ifup/ifdown</tt>, <tt>setup/shutdown</tt> для того, чтобы вернуть на стандартном выводе имя профиля, которое необходимо использовать. Это позволяет автоматически переключать профили в зависимости от каких-либо условий. В поставку включен комментированный пример сценария: <tt>/etc/net/scripts/contrib/selectprofile</tt>.<br />
* <tt>fw</tt> — каталог с настройками сетевого экрана по умолчанию.<br />
<br />
Интерфейс '''unknown''' — специальная конфигурация, которая будет использована в том случае, когда [http://etcnet.org/ /etc/net] просят сконфигурировать hotplug-интерфейс, для которого не существует каталога конфигурации. Это будет работать только в том случае, если включена опция <tt>ALLOW_UNKNOWN</tt>.<br />
<br />
<div id="broadcast"></div><br />
<br />
=== broadcast address===<br />
<br />
Периодически возникает вопрос: почему после старта [http://etcnet.org/ /etc/net] при запуске <tt>ifconfig</tt> можно видеть <tt>Bcast:0.0.0.0</tt>, хотя при использовании net-scripts это поле было правильным? <br />
<br />
Ответ: net-scripts оперируют адресом, маской, адресом сети и широковещательным адресом, пытаясь определить неизвестные компоненты из известных, а <tt>config-ipv4</tt> просто передаёт утилите <tt>ip</tt> содержимое файла <tt>ipv4address</tt>, не проверяя его содержание.<br />
Важно заметить, что:<br />
* Если <tt>iproute2</tt> изменит свой синтаксис, то с очень вероятно, что администратору будет необходимо редактировать только конфигурационные файлы.<br />
* Не было найдено проблем с «отсутствующим» broadcast address. Он есть в таблице маршрутизации <tt>local</tt>. <br />
* Администратор всегда может назначить адрес broadcast в файле <tt>ipv4address</tt>. Это можно сделать с помощью выражения <tt>broadcast +</tt><ref><br />
Выдержка из файла ip-cref.ps, который входит в документацию пакета iproute2:<br />
<br />
<pre><br />
* broadcast ADDRESS<br />
<br />
the broadcast address on the interface.<br />
It is possible to use the special symbols '+' and '-' instead of the broadcast address. In this case, <br />
the broadcast address is derived by setting/resetting the host bits of the interface prefix.<br />
NB. Unlike ifconfig, the ip utility does not set any broadcast address unless explicitly requested.<br />
</pre><br />
</ref>.<br />
'''Замечание:''' В версии 0.8.0 появилась опция <tt>AUTO_BROADCAST</tt> для автоматического дополнения каждой строки <tt>ipv4address</tt>.<br />
<br />
<div id="never_rmmod"></div><br />
<br />
=== Ядро 2.6 и "пропадающие" интерфейсы ===<br />
Иногда возможна ситуация: Если два интерфейса используют один и тот же модуль ядра, и у них определена опция <tt>MODULE</tt> (то есть скрипты [http://etcnet.org/ /etc/net] сами загружают и выгружают модули), то при опускании (отключении) одного интерфейса пропадает и второй интерфейс. <br />
<br />
Такая ситуация почти наверняка возникает при использовании ядра 2.6, особенностью которого являются значения счётчика ссылок (третий столбец вывода <tt>lsmod</tt>). Когда счетчик оказывается равен нулю (довольно часто), скрипты могут попытаться выгрузить модуль интерфейса, для которого запущен ifdown. И такая выгрузка происходит, несмотря на то, что другой интерфейс, использующий этот же модуль, находится в состоянии UP (т.е. он активен).<br />
<br />
Чтобы заблокировать выгрузку модулей, можно использовать булеву переменную <tt>NEVER_RMMOD</tt>. Возможно, позже это будет происходить автоматически для ядер следующих версий.<br />
<br />
<div id="removables"></div><br />
<br />
=== Cценарии конфигурации сети и hotplug-интерфейсы ===<br />
<br />
==== Cценарии конфигурации сети ====<br />
Существует несколько сценариев конфигурации сети.<br />
<br />
* Первый и самый простой — выполнение <tt>service network start</tt> при старте системы или вручную. При этом требуется только сформировать погруппные (потиповые) списки интерфейсов, подлежащих обработке, и последовательно выполнить требуемые действия. Модули ядра при этом загружаются сценариями [http://etcnet.org/ /etc/net], при этом имена модулей берутся из опции <tt>MODULE</tt> (в этой опции можно в кавычках перечислить несколько имён и они будут последовательно загружены). Этот метод часто используется на практике и лучше всего подходит для маршрутизаторов. Преимущество метода в том, что вся необходимая информация сконцентрирована в одном месте — каталоге <tt>/etc/net</tt>. Если опция <tt>MODULE</tt> не определена, то будет предпринята попытка загрузки по имени интерфейса, подразумевая, что файл <tt>/etc/modules.conf</tt> правильно заполнен.<br />
<br />
* Второй сценарий — реакция на событие <tt>ifplugd</tt>. В предыдущих версиях существовала сложность, так как требовалась синхронная настройка сервиса <tt>ifplugd</tt>. Сейчас логика работы определена, что выражено в том, что [http://etcnet.org/ /etc/net] взяла управление <tt>ifplugd</tt> на себя. В части загрузки модуля этот сценарий не отличается от первого.<br />
<br />
* Третий сценарий — реакция на появление или исчезновение сменного устройства. Для обработки таких событий предназначены сценарии <tt>/etc/net/scripts/{ifup,ifdown}-removable</tt>, которые вызываются из сценариев пакетов hotplug и pcmcia-cs. Сложность заключается в том, что для сменных PCMCIA-карт вызовы могут дублироваться: для одного и того же события первый раз ifup-removable будет вызван из hotplug, второй — из pcmcia-cs. Кроме того, hotplug также реагирует на загрузку модулей ядра для обычных карт PCI и, более того, включает сценарии, которые пытаются загружать модули самостоятельно. В этом контексте [http://etcnet.org/ /etc/net] получает слишком много вызовов от hotplug и по умолчанию их игнорирует (<tt>USE_HOTPLUG=no</tt>).<br />
<br />
==== hotplug-интерфейсы ====<br />
Рассмотрим использование hotplug-интерфейсов. <br />
<br />
Пусть администратору необходимо настроить действительно сменную карту. После заполнения <tt>/etc/iftab</tt> или <tt>/etc/net/iftab</tt> в файле <tt>options</tt> необходимо будет задать <tt>USE_HOTPLUG=yes</tt>. После этого при получении события от hotplug [http://etcnet.org/ /etc/net] будет работать в том контексте, что модуль в загрузке и выгрузке не нуждается. <br />
<br />
Важно заметить, что '''такой интерфейс будет пропущен при обычном старте сети''', т.к. если он сменный, то единственный достоверный способ узнать, что он присутствует — получить вызов от hotplug. Из факта выполнения <tt>service network start</tt> совсем не следует, что какой-то один или несколько из сконфигурированных hotplug-интерфейсов сейчас в наличии и требуют конфигурации. Если вы хотите вручную расконфигурировать hotplug-интерфейс до его извлечения, используйте команду <tt>ifdown</tt>. Для повторной конфигурации вставьте его ещё раз.<br />
<br />
Также существует опция <tt>USE_PCMCIA</tt>. Если события для вашей карты генерирует pcmcia-cs, то вам нужно её включить. Если события генерируются только hotplug, то используйте опцию <tt>USE_HOTPLUG</tt>.<br />
<br />
<div id="eth0"></div><br />
<br />
=== Проблема стандартных имен интерфейсов (eth0 и др.)===<br />
<br />
При использовании файла <tt>/etc/net/iftab</tt>, то есть в случае применения сложных конфигураций, возникает следующая проблема:<br />
* При загрузке модулей имена интерфейсов принимают вид eth0, eth1, eth2… Какие именно — в общем случае контролировать нельзя.<br />
* Имя eth0 обладает наибольшей вероятностью оказаться занятым.<br />
* ifrename не может переименовать интерфейс, если целевое имя уже занято (udev использует <tt>ifrename -t</tt>, но это не работает после начальной загрузки, см. руководство к ifrename).<br />
<br />
С учётом вышеизложенного, если <tt>/etc/net/iftab</tt> содержит тот же набор имён интерфейсов, что уже имеется после загрузки модулей (то есть <tt>eth0</tt>/<tt>eth1</tt> и другие «стандартные» названия), то единственный случай, когда etcnet сможет без ошибок обработать такой файл — изначальное соответствие, не требующее переименования.<br />
<br />
Таким образом, при использовании <tt>/etc/net/iftab</tt> имеет смысл давать интерфейсам названия, отличные по виду от тех, что назначает ядро. В простых случаях лучше использовать <tt>/etc/iftab</tt>.<br />
<br />
<div id="advanced"></div><br />
<br />
== Расширенные возможности ==<br />
<div id="multipleIPs"></div><br />
<br />
=== Несколько IP-адресов или маршрутов на одном интерфейсе ===<br />
<br />
Вы можете помещать произвольное количество IP-адресов в файл <tt>ipv4address</tt> по одному адресу на каждой строке. То же самое относится к статическим маршрутам и файлу <tt>ipv4route</tt>.<br />
<br />
Обратите внимание, что [http://etcnet.org/ /etc/net] не анализирует содержимое этих файлов, а формирует на основе каждой строки командную строку для утилиты <tt>ip</tt>. Это означает, что вы можете помещать в этих файлах произвольные поддерживаемые <tt>ip</tt> опции и они будут обработаны. Например, в файле <tt>ipv4route</tt> можно поместить строку:<br />
<pre>10.0.1.0/24 via 10.0.0.253 metric 50 weight 5 table 100</pre><br />
<br />
<div id="requires"></div><br />
<br />
=== Зависимости между интерфейсами ===<br />
У интерфейсов:<br />
* vlan<br />
* bond <br />
* bri <br />
* teql <br />
входящих в группу зависимых физических, должна быть определена опция <tt>HOST</tt> со списком интерфейсов, необходимых для инициализации текущего интерфейса. Если хост-интерфейс не сконфигурирован при поднятии зависимого интерфейса, то это будет исправлено.<br />
<br />
Кроме обязательной для определённых интерфейсов опции <tt>HOST</tt>, может быть задана и необязательная для всех остальных интерфейсов опция <tt>REQUIRES</tt>. Интерфейсы, перечисленные в этой опции, будут считаться зависимостями текущего интерфейса. Например, по умолчанию попытка сконфигурировать интерфейс А, который зависит от Б и В, приведёт сначала к конфигурации Б и В. Аналогично, при расконфигурации Б или В сначала будет расконфигурирован А.<br />
<br />
Зависимость одного интерфейса от другого не всегда формальна. Например, в сценарии <tt>ifup-pre</tt> одного интерфейса может использоваться команда, которая потребует разрешения DNS-имени, которое может быть разрешено только с помощью <tt>resolv.conf</tt>, инсталлируемого другим интерфейсом. Или это может быть PPPoE/PPtP-интерфейс, требующий Ethernet-интерфейс для работы.<br />
<br />
Для того, чтобы избежать неожиданных сбоев в таких случаях, правильно задавайте опцию <tt>REQUIRES</tt>.<br />
<br />
<div id="postpre"></div><br />
<br />
=== Пользовательские сценарии post и pre ===<br />
Существует возможность поместить в каталог конфигурации интерфейса файлы, которые будут выполнены в определённые моменты. Для этого они должны быть исполняемыми и называться следующим образом:<br />
* <tt>ifup-pre</tt> — для выполнения перед конфигурированием интерфейса.<br />
* <tt>ifup-post</tt> — для выполнения после конфигурирования интерфейса. Например, можно запустить почтовую систему.<br />
* <tt>ifdown-pre</tt> — для выполнения перед расконфигурированием интерфейса. Например, можно остановить почтовую систему.<br />
* <tt>ifdown-post</tt> — для выполнения после расконфигурирования интерфейса.<br />
<br />
Также в версии до 0.8.0 возможно использовать следующие сценарии (они должны быть исполняемыми):<br />
* <tt>/etc/net/scripts/ifup-pre-local</tt><br />
* <tt>/etc/net/scripts/ifup-post-local</tt><br />
* <tt>/etc/net/scripts/ifdown-pre-local</tt><br />
* <tt>/etc/net/scripts/ifdown-post-local</tt><br />
<br />
Они будут вызваны для каждого интерфейса. Начиная с версии 0.8.0 эти сценарии называются так:<br />
* <tt>/etc/net/ifup-pre</tt><br />
* <tt>/etc/net/ifup-post</tt><br />
* <tt>/etc/net/ifdown-pre</tt><br />
* <tt>/etc/net/ifdown-post</tt><br />
Семантика сохранена.<br />
<br />
<div id="iplink"></div><br />
<br />
=== Управление канальными параметрами интерфейсов ===<br />
<br />
Если поместить в конфигурационный каталог интерфейса файл <tt>iplink</tt>, в котором в каждой строке будут записаны команды режима link утилиты <tt>ip</tt>, то они будут выполнены при конфигурации интерфейса. <br />
<br />
Например, если необходимо, чтобы интерфейс net1 имел MAC-адрес aa:bb:cc:dd:ee:ff и MTU 200 байт, то в файл <tt>/etc/net/ifaces/net1/iplink</tt> нужно поместить следующее:<br />
<pre>address aa:bb:cc:dd:ee:ff<br />
mtu 200</pre><br />
<br />
Обратите внимание, что в этом случае в <tt>/etc/net/iftab</tt> вам необходимо будет использовать селектор <tt>businfo</tt> или <tt>driver</tt> вместо <tt>mac</tt>.<br />
<br />
<div id="ethtool"></div><br />
<br />
=== Управление физическими параметрами интерфейсов ===<br />
Если поместить в конфигурационный каталог интерфейса файл <tt>ethtool</tt>, в котором будет строка с параметрами программы ethtool, то она будет выполнена при конфигурации интерфейса. <br />
<br />
Например, если есть необходимость, чтобы интерфейс net1 имел скорость 10Мбит/с и авто-согласование скорости было отключено, то в файл <tt>/etc/net/ifaces/net1/ethtool</tt> нужно поместить следующую строку:<br />
<br />
<pre>speed 10 autoneg off</pre><br />
<br />
<div id="bridge"></div><br />
<br />
=== Настройка Ethernet-моста ===<br />
<br />
Перед настройкой Ethernet-моста (далее - моста) с помощью etcnet сначала необходимо убедиться, что установлен пакет bridge-utils. Etcnet использует утилиту brctl для настройки моста, и, если утилита не установлена, то при перезапуске системы сеть станет недоступна. Если интерфейсы, входящие в состав моста, единственные физически подключённые, и настройка моста происходит с удаленного узла через эти интерфейсы, то требуется соблюдать осторожность, т.к. эти интерфейсы перестанут быть доступны. В случае ошибки в конфигурации , потребуется физический доступ к серверу. Для страховки перед перезапуском сервиса network можно открыть ещё одну консоль и запустить там, например, команду: <tt>sleep 500 && reboot</tt>.<br />
<br />
Предположим, что требуется настроить Ethernet-мост, и пусть он будет называться <tt>br0</tt>. <br />
Тогда для его настройки необходимо завести каталог <tt>etc/net/ifaces/br0</tt> и создать там файлы со следующими данными:<br />
<br />
* <tt>brctl</tt><br />
<br />
<pre> stp AUTO on </pre><br />
<br />
* <tt>ipv4address</tt>:<br />
<pre> 192.168.100.200/24 </pre><br />
<br />
* <tt>options</tt>:<br />
<pre> TYPE=bri<br />
HOST='eth0 tap0'<br />
BOOTPROTO=static </pre><br />
<br />
Содержимое файла <tt>brctl</tt> передается утилите brctl. <tt>AUTO</tt> означает, что скрипт <tt>setup-bri</tt> самостоятельно определит имя bridge-интерфейса (см. README.bridge в каталоге doc пакета etcnet).<br />
<br />
IP-адрес для интерфейса, как обычно, будет взят из <tt>ipv4address</tt>.<br />
<br />
В опции <tt>HOST</tt> файла <tt>options</tt> нужно указать те интерфейсы, которые будут входить в мост. Если в него будут входить интерфейсы, которые до этого имели ip-адрес (например, eth0), то этот адрес должен быть удален (например, можно закомментировать содержимое файла <tt>ifaces/eth0/ipv4address</tt>).<br />
<br />
При старте сети сначала поднимаются интерфейсы, входящие в мост, затем сам мост (автоматически). Для назначения адреса мосту можно так же использовать DHCP (<tt>BOOTPROTO=dhcp</tt>). Но при этом важно обратить внимание на параметр <tt>forwarding delay</tt> (man brctl / setfd), так как интерфейс, подключенный к мосту, не сразу входит в режим передачи пакетов, и это может вызвать dhcp таймаут. Версии etcnet в дистрибутивах ALT Linux Server 4 и Desktop 4.1 (0.9.7-alt0.M40/M41) имеют эту недоработку, которая исправлена только в версии 0.9.9-alt1. <br />
Документацию по настройке моста с вопросами и ответами (перевод) можно найти на http://xgu.ru/wiki/Linux_Bridge, а его оригинал доступен на http://www.linuxfoundation.org/en/Net:Bridge.<br />
<br />
С пакетом etcnet поставляются примеры конфигурации. Один из них показывает, как из двух ethernet-интерфейсов port0 и port1 можно собрать мост bridge (каталог документации examples/Ethernet-bridge-GRE/).<br />
<br />
Безотносительно к etcnet, следует иметь ввиду проблему, связанную с NAT:<br />
http://bugzilla.kernel.org/show_bug.cgi?id=13079<br />
<br />
<div id="vlan"></div><br />
<br />
=== Настройка VLAN ===<br />
<br />
Для настройки 802.1q VLAN (например, id 4094 на eth1) следует, создав каталог <tt>ifaces/eth1.4094</tt>, поместить в него файлы со следующим содержимым:<br />
<br />
* <tt>ipv4address</tt>:<br />
<pre>192.168.100.200/24</pre><br />
<br />
* <tt>options</tt>:<br />
<pre> TYPE=vlan<br />
HOST=eth1<br />
VID=4094<br />
BOOTPROTO=static</pre><br />
<br />
Содержимое переменных <tt>HOST</tt> и <tt>VID</tt> будет передано утилите <tt>vconfig</tt>; использование файла <tt>vlantab</tt> необязательно (и не рекомендуется по причине невозможности использовать ifup для отдельного интерфейса). Пример конфигурации можно найти в каталоге examples/VLAN-without-vlantab/ документации etcnet.<br />
<br />
Следует обратить внимание, что 4094 является верхней допустимой границей идентификатора валидного VLAN, а [http://www.candelatech.com/pipermail/vlan/2004-November/000128.html 4095 используется технически в процессе отбрасывания трафика по неверным VLAN]. (следует отметить, что это не ограничение Linux: [http://en.wikipedia.org/wiki/802.1Q в стандарте под VID отведено 12 бит])<br />
<br />
'''Для настройки Q-in-Q интерфейса''', например, eth1.123.513 (дважды тегированный трафик: внешняя метка -- 123, внутренняя -- 513) следует файл <tt>options</tt> в каталоге <tt>ifaces/eth1.123.513</tt> заполнить следующим образом:<br />
<br />
* <tt>options</tt>:<br />
<pre> TYPE=vlan<br />
HOST=eth1.123 # "родительский" интерфейс; может называться иначе<br />
VID=513<br />
VLAN_REORDER_HDR=0<br />
BOOTPROTO=static</pre><br />
<br />
Родительский интерфейс должен быть сконфигурирован (можно с или без <tt>BOOTPROTO</tt>, с или без <tt>ipv4address</tt> и т.п.).<br />
<br />
Таким образом, можно каскадировать интерфейсы "как угодно глубоко" (Q-in-Q-in-Q-in-Q....). Необходимо только учитывать, что длина имени интерфейса ограничена (16-ю символами).<br />
<br />
<div id="tun/tap"></div><br />
<br />
=== Настройка tun/tap интерфейса ===<br />
<br />
Etcnet поддерживает простое создание интерфейсов типа tun/tap. Это виртуальный тип интерфейсов для передачи пакетов между ядром и программами, который не передает данных через физические устройства.<br />
'''tun''' — это интерфейс типа point-to-point, работающий с кадрами IP.<br />
'''tap''' — интерфейс типа ethernet, работающий с кадрами ethernet.<br />
<br />
Потребуется использование утилиты tunctl, находящейся в одноименном пакете.<br />
Пусть требуется создать и настроить tun/tap интерфейс, например, с именем tap0. Для этого необходимо:<br />
* создать каталог интерфейса:<br />
<br />
/etc/net/ifaces/tap0<br />
<br />
* создать в каталоге интерфейса <tt>/etc/net/ifaces/tap0</tt> файл настройки <tt>options</tt> со следующим содержанием:<br />
<br />
TYPE=tuntap<br />
TUNTAP_USER=combr<br />
<br />
<br />
<tt>TUNTAP_USER</tt> — это аккаунт или цифровой id пользователя, которому будут даны права на использование интерфейса tap0 (устройство /dev/net/tun).<br />
Этот параметр будет передан утилите <tt>tunctl</tt> как аргумент опции <tt>-u</tt> (см. руководство на tunctl).<br />
С версии ядра 2.6.18 произошли изменения в управлении этим типом интерфейсов, потребовавшие<br />
обязательного применения <tt>tunctl</tt> для разрешения доступа обычных<br />
пользователей к tap-интерфейсам. В предыдущих версиях любой<br />
пользователь, имеющий доступ к <tt>/dev/net/tun</tt>, мог создать любое<br />
количество сетевых интерфейсов с произвольными именами. Начиная с<br />
2.6.18, для создания интерфейса через <tt>/dev/net/tun</tt> требуется<br />
<tt>CAP_NET_ADMIN</tt> (обычно эту привилегию имеет только root), а обычный<br />
пользователь, имеющий доступ к <tt>/dev/net/tun</tt>, может только использовать<br />
уже созданные интерфейсы, к которым разрешён доступ для его uid.<br />
<br />
<div id="iptun"></div><br />
<br />
=== Настройка и использование IP-туннелей ===<br />
<br />
IP-туннели — средство, позволяющее улучшить IP-сети. Поддерживаются IP-туннели трёх видов: <br />
* IPIP<br />
* GRE<br />
* SIT <br />
<br />
Прежде всего следует определить необходимый вид туннеля для решаемой задачи. <br />
<br />
* Туннели '''IPIP''' — самые простые. Обратите внимание, что IPIP-туннели не могут передавать multicast-пакеты, соответственно, протокол OSPF (Open Shortest Path First) на таких интерфейсах работать не будет.<br />
<br />
* Туннели '''GRE''' (general incapsulation) обычно используются в маршрутизаторах Cisco. По туннелям этого типа могут передаваться broadcast и multicast пакеты. Кроме того, эти туннели поддерживают контрольные суммы и контроль упорядоченности пакетов. Также GRE-туннели обладают опциональным атрибутом key в виде произвольного 4-байтового числа, который позволяет конфигурировать несколько GRE туннелей между одной парой IP-адресов несущей сети (в отличие от IPIP-туннелей, с которыми это невозможно).<br />
<br />
* Туннели '''SIT''' предназначены для транспортировки пакетов IPv6 через сети IPv4.<br />
<br />
<br />
Тип туннеля определяется опцией <tt>TUNTYPE (ipip, gre, sit)</tt>. По умолчанию <tt>TUNTYPE=ipip</tt>. Кроме типа туннеля для конфигурации всегда требуется адрес удалённого хоста и почти всегда — локальный адрес. Эти адреса определяются опциями <tt>TUNREMOTE</tt> и <tt>TUNLOCAL</tt> соответственно. В некоторых случаях локальный адрес можно не указывать. В этом случае опция <tt>TUNLOCAL</tt> всё равно обязательна, но принимает значение <tt>any</tt>. Не забудьте назначить туннельному интерфейсу адреса и маршруты в соответствующих файлах.<br />
<br />
Пример: Конфигурация GRE-туннеля между 10.0.1.2 и 10.0.2.3 с двумя ключами для исходящих и входящих пакетов, проверкой очерёдности пакетов, TTL 8 и вычислением контрольных сумм. Туннель должен использовать только интерфейс gw1. Пусть имя создаваемого туннеля будет <tt>mytunnel</tt>.<br />
<br />
Тогда необходимо сделать следующие операции:<br />
* Создать каталог туннеля:<br />
/etc/net/ifaces/mytunnel<br />
<br />
* Создать в каталоге туннеля файл настроек <tt>options</tt><br />
/etc/net/ifaces/mytunnel/options<br />
<br />
* Отредактировать файл настроек <tt>options</tt>: <br />
<br />
<source lang="ini"><br />
TYPE=iptun<br />
TUNTYPE=gre<br />
TUNLOCAL=10.0.1.2<br />
TUNREMOTE=10.0.2.3<br />
TUNTTL=8<br />
HOST=gw1<br />
TUNOPTIONS='seq ikey 2020 okey 2030 csum'<br />
</source><br />
<br />
<div id="vpn"></div><br />
<br />
=== Замечания о настройке VPN-подключения и туннелей ===<br />
<br />
Часто при настройке VPN-подключения (под которыми здесь будут подразумеваться все туннельные подключения, то есть подключения поверх IP) не учитывают, что использование опции pppd '<tt>defaultroute</tt>' маршрут по-умолчанию после подключения будет изменен. При этом, если VPN-сервер находится в другой, отличной от клиента, сети, то после подключения (и изменения маршрута по-умолчанию) VPN-сервер становится недоступным, следовательно, недоступными становятся все внешние адреса, и подключение, как правило, прекращается по тайм-ауту.<br />
<br />
Решением, как обычно (и рекомендовано), служит указание ''отдельного'' маршрута на VPN-сервер (или его сеть). Для этого необходимо прописать (в примере - для маршрута через eth0) в <tt>/etc/net/ifaces/eth0/ipv4route</tt> строку вида:<br />
<br />
10.0.1.0/24 via 10.0.0.1<br />
<br />
В данном примере подразумевается, что VPN-сервер находится в сети 10.0.1.0/24 (например, имеет адрес 10.0.1.1), клиент — в сети 10.0.0.0/24 (и имеет адрес, например, 10.0.0.10), а маршрутизатор имеет адрес 10.0.0.1.<br />
<br />
Теперь, при использовании опции '<tt>defaulroute</tt>' для pppd (которая указывает, что необходимо изменить на вновь созданное подключение маршрут по-умолчанию), даже после замены маршрута по-умолчанию новым, сеть 10.0.1.0, в которой в нашем примере и находится VPN-сервер, останется доступной.<br />
<br />
Как более точечный вариант (применяется в alterator-net-pptp 0.5.x) можно использовать скрипты <tt>ifup-pre</tt> и <tt>ifdown-post</tt> в каталоге конфигурируемого PPP-интерфейса.<br />
<br />
Наример:<br />
<source lang="bash"><br />
#!/bin/sh<br />
# sample /etc/net/ifaces/ppp0/ifup-pre; replace variables yourself<br />
ip route add $VPN_SERVER via $DEF_GW<br />
</source><br />
<source lang="bash"><br />
#!/bin/sh<br />
# sample /etc/net/ifaces/ppp0/ifdown-post; replace variables yourself<br />
ip route del $VPN_SERVER via $DEF_GW<br />
</source><br />
<br />
Не забудьте подставить нужные IP-адреса (не сеть, где VPN-сервер, а ее /32 префикс CIDR) и выполнить команду: <br />
<tt>chmod +x ifup-pre ifdown-post</tt><br />
<br />
<div id="ipsectun"></div><br />
<br />
=== Настройка и использование IPSec-туннелей ===<br />
<br />
В ОС ALT Linux существует возможность использования статических IPSec-туннелей, которые реализуются модулем ядра ipsec_tunnel, который в свою очередь использует CryptoAPI ядер серии 2.4. Для этих интерфейсов, кроме <tt>TUNLOCAL</tt> и <tt>TUNREMOTE</tt>, обязательно требуется ещё параметр <tt>TUNSPI</tt>. Это уникальный номер туннеля, который должен иметь значение более 0x2000 и быть одинаковым на обоих хостах. Для настройки IPSec-туннелей требуется определение параметров либо шифрования, либо подписи, либо того и другого вместе. Опции <tt>CIPHER</tt> и <tt>DIGEST</tt> определяют соответственно алгоритмы и режимы шифрования и подписи, а опции <tt>CIPHERFILE</tt> и <tt>DIGESTFILE</tt> — имена файлов в конфигурационном каталоге интерфейса, которые содержат ключи шифрования и подписи. Для форсирования интерфейса, через который будут посылаться туннелированные пакеты, можно использовать опцию <tt>HOST</tt>.<br />
<br />
<div id="iprule"></div><br />
<br />
=== Сложная маршрутизация (или несколько таблиц маршрутизации) ===<br />
<br />
Под «сложной маршрутизацией» подразумевается наличие нескольких таблиц маршрутизации. Для их использования необходимо сконфигурировать правила ядра. В правилах по умолчанию можно увидеть следующее:<br />
<br />
<pre>$ /sbin/ip ru<br />
0: from all lookup local <br />
32766: from all lookup main <br />
32767: from all lookup default</pre><br />
<br />
Для настройки «сложной маршрутизациии» необходимо выполнить следующие операции:<br />
<br />
Шаг 1 : Сами таблицы определены в файле <tt>/etc/iproute2/rt_tables</tt>. Для создания конфигурации «сложной маршрутизации» необходимо вначале «создать» нужные таблицы в этом файле (если вы хотите использовать имена таблиц, а не числа).<br />
<br />
Шаг 2 : Необходимо заполнить таблицы. В конфигурационном каталоге интерфейса в файле <tt>ipv4route</tt> необходимо добавить маршрутные записи, не забывая указать <tt>table XX</tt>. Важно учитывать, что если строка начинается с режима ip route (add, del, replace, append, change), то по умолчанию будет использован режим <tt>DEFAULT_IPV4ROUTE_CMD</tt> (<tt>append</tt>).<br />
<br />
Шаг 3 : Определить правила в файле <tt>ipv4rule</tt>. Здесь есть особенности, связанные автоматической заменой/добавлением параметров. Если строка не начинается с операции del или add, то нужный режим будет подставлен автоматически. Это подходит для тех случаев, когда вам при "поднятии" интерфейса необходимо добавить правила, а при "опускании" — удалить. Возможность указывать del или add реализована для обратных случаев: если при "поднятии" интерфейса вам необходимо удалить правила, а при "опускании" — добавить. В этом случае add и del будут в нужный момент автоматически заменены на del и add.<br />
<br />
Пример такой конфигурации входит в [http://etcnet.org/ /etc/net] 0.7.12: (каталог документации examples/routing-LARTC-1/)<br />
<br />
<div id="wireless"></div><br />
<br />
=== Простое переключение маршрутов ===<br />
<br />
Пусть имеется eth-интерфейс, который используется постоянно, и настроен маршрут по умолчанию.<br />
Часто бывает необходимость настроить второй маршрут по умолчанию через беспроводной интерфейс,<br />
но с меньшей метрикой, чем у проводного интерфейса.<br />
В этом случае при поднятии WI-FI маршрут по умолчанию «развернется» в нужную сторону.<br />
<br />
Например:<br />
<br />
Для eth-интерфейса файл настроек <tt>/etc/net/ifaces/eth0/ipv4route</tt> будет таким:<br />
<pre>default via 192.168.3.254 metric 10</pre><br />
а для WI-FI-интерфейса файл настроек <tt>/etc/net/ifaces/ath0/ipv4route</tt> таким:<br />
<pre>default via 192.168.123.1 metric 5</pre><br />
<br />
=== Беспроводный Ethernet (или настройка WI-FI) ===<br />
Большинство беспроводных интерфейсов сейчас представлено системе как интерфейсы Ethernet. Соответственно беспроводный интерфейс будет иметь <tt>[https://bugzilla.altlinux.org/show_bug.cgi?id=6283 TYPE=eth]</tt>. Чтобы интерфейс нормально функционировал, необходимо кроме загрузки модуля с параметрами, воспользоваться утилитами <tt>iwconfig</tt> из пакета wireless-tools или <tt>wpa_supplicant</tt> из такого же пакета. Вместо того, чтобы запускать их вручную, можно поместить в конфигурационный каталог интерфейса файл <tt>iwconfig</tt> с командами iwconfig или файл <tt>wpa_supplicant.conf</tt> с конфигурацией wpa_supplicant. Они будут использованы автоматически.<br />
<br />
Пример [http://hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wireless.html конфигурации] (совместно с <tt>[http://ndiswrapper.sourceforge.net/ ndiswrapper]</tt>):<br />
<br />
Файл: <tt>/etc/net/ifaces/wlan0/options</tt><br />
<pre>TYPE=eth<br />
MODULE=ndiswrapper<br />
NEVER_RMMOD=yes<br />
BOOTPROTO=dhcp<br />
USE_HOTPLUG=no<br />
ONBOOT=no</pre><br />
<br />
Файл: <tt>/etc/net/ifaces/wlan0/iwconfig</tt><br />
<pre>essid default<br />
#key bababababa</pre><br />
<br />
<br />
Еще один пример использования etcnet для настройки беспроводной сети:<br />
<br />
Файл: <tt>/etc/net/ifaces/eth0/options</tt><br />
<pre>TYPE=eth<br />
USE_HOTPLUG=NO<br />
BOOTPROTO=static<br />
module=ipw2200<br />
WPA_DRIVER=wext</pre><br />
<br />
Файл: <tt>/etc/net/ifaces/eth0/iwconfig</tt><br />
<pre>essid homenet<br />
mode 1<br />
ap 00:11:D8:22:AD:0D<br />
channel 3<br />
rate 11M</pre><br />
<br />
Файл: <tt>/etc/net/ifaces/eth0/wpa_supplicant.conf</tt><br />
<pre>ctrl_interface=/var/run/wpa_supplicant<br />
ctrl_interface_group=0<br />
eapol_version=1<br />
ap_scan=1<br />
fast_reauth=1<br />
<br />
network={<br />
ssid="homenet"<br />
bssid=00:11:D8:22:AD:0D<br />
proto=WPA<br />
key_mgmt=WPA-PSK<br />
pairwise=CCMP TKIP<br />
group=TKIP<br />
psk="this is my mega secret password string to wpa supplicant"<br />
priority=2<br />
}</pre><br />
<br />
<br />
<div id="sysctl"></div><br />
<br />
=== Использование автодополнения в sysctl.conf ===<br />
<br />
В конфигурационном каталоге интерфейса может находиться файл <tt>sysctl.conf</tt>, в котором можно перечислить переменные <tt>sysctl(8)</tt>. Но переменные могут быть как общесистемными, так и относящимися к интерфейсу — описание переменных можно почитать в [http://gazette.linux.ru.net/rus/articles/index-ipsysctl-tutorial.html http://gazette.linux.ru.net/rus/articles/index-ipsysctl-tutorial.html]. Естественно, запись в sysctl.conf настроек вида <tt>net.ipv4.conf.eth0.log_martians = 1</tt> достаточно неудобна, а при переименовании интерфейса велик риск не отредактировать файл <tt>sysctl.conf</tt> соответствующим образом.<br />
<br />
Эта проблема решается следующим способом : производится запись в файл только имени переменной и значение, а система [http://etcnet.org/ /etc/net] сама найдет путь к этой переменной и вызовет <tt>sysctl</tt> с полным именем. <br />
<br />
Пример содержания файла <tt>sysctl.conf</tt>:<br />
<pre>log_martians=1<br />
rp_filter=1</pre><br />
<br />
<div id="profiles"></div><br />
<br />
=== Подключение к Wi-Fi с сертификатом на аппаратном токене ===<br />
Для беспроводного подключения в корпоративных сетях могут использоваться сертификаты, записанные на аппаратном токене, например, Aladdin eToken. Для настройки такого подключения необходимо использовать <tt>/etc/net/ifaces/wlan0/wpa_supplicant.conf</tt>.<br />
<pre><br />
ctrl_interface=/var/run/wpa_supplicant<br />
ctrl_interface_group=wheel<br />
#eapol_version=1<br />
#ap_scan=2<br />
#fast_reauth=1<br />
pkcs11_engine_path=/usr/lib/openssl/engines/engine_pkcs11.so<br />
pkcs11_module_path=/usr/lib/libeTPkcs11.so<br />
update_config=0<br />
<br />
network={<br />
ssid="test"<br />
key_mgmt=WPA-EAP<br />
pairwise=CCMP TKIP<br />
group=CCMP TKIP<br />
eap=TLS<br />
identity="email@address.ru"<br />
engine_id="pkcs11"<br />
key_id="xxxxxxxxx"<br />
cert_id="xxxxxxxxx"<br />
engine=1<br />
}<br />
</pre><br />
где key_id и cerd_id взяты из вывода команды<br />
<pre><br />
# pkcs11-tool --module /usr/lib/libeTPkcs11.so -O -l<br />
</pre><br />
<br />
Используются оригинальные ("родные") драйвера Aladdin - pkiclient-5.00.28-0, и пакет openssl-engine_pkcs11-0.1.5-alt1.<br />
<br />
=== Профили конфигурации ===<br />
<br />
==== Определение профилей ====<br />
Профиль — именованный вариант конфигурации, в той или иной степени изменяющий базовую конфигурацию системы. Профили могут быть применены, например, для конфигурации ноутбука в разных сетевых окружениях, или при подготовке новой или тестовой конфигурации с возможностью быстрого возврата к старой. Практически профили реализуются следующим образом: для какого-либо из файлов, составляющих общесистемную конфигурацию или конфигурацию интерфейса, создаётся альтернативный вариант, который отличается добавлением в конце названия файла знака # и имени профиля.<br />
<br />
Например, пусть единственное отличие между профилями заключается в том, какой модуль ядра будет загружен для интерфейса eth0. В этом случае файл <tt>/etc/net/ifaces/eth0/options</tt> необходимо скопировать в <tt>/etc/net/ifaces/eth0/options#profile1</tt> и изменить значение переменной <tt>MODULE</tt> в одном из них. Далее при использовании конфигурации по умолчанию будет использован файл <tt>options</tt>, а при использовании профиля profile1 — файл <tt>options#profile1</tt>. Если при этом для назначения интерфейсу имени используется файл <tt>/etc/net/iftab</tt>, то скорее всего необходимо будет создать соответствующий файл <tt>/etc/net/iftab#profile1</tt>, так как другой модуль ядра указывает на другой физический интерфейс и исходный файл <tt>iftab</tt> работать не будет.<br />
<br />
Профили могут использоваться также и для отключения каких-то параметров конфигурации. Например, если используется файл <tt>ipv4route</tt> для установки маршрутов для интерфейса, то можно создать файл нулевого размера <tt>ipv4route#profile2</tt>, чтобы при использовании профиля profile2 никаких маршрутов не конфигурировалось.<br />
<br />
==== Выбор профиля при загрузке ====<br />
Если при загрузке системы ядру был передан параметр netprofile, то его значение будет использовано как имя профиля по умолчанию. Это может быть использовано для создания собственных пунктов меню загрузчиков LILO и GRUB с заранее определённым профилем сетевой конфигурации. Заданный таким образом профиль может быть далее переопределён другими методами. Следует понимать разницу между различными конфигурациями и различными результатами применения одной конфигурации. Например, если в двух разных сетях используется DHCP, то смысла в разных профилях конфигурации нет.<br />
<br />
Для загрузчика LILO секции <tt>/etc/lilo.conf</tt> могут выглядеть следующим образом:<br />
<pre>image=/boot/vmlinuz-up<br />
label=linux-up home<br />
append=" netprofile=home"<br />
[...]<br />
image=/boot/vmlinuz-up<br />
label=linux-up office<br />
append=" netprofile=office"<br />
[...]</pre><br />
Для приведённого примера необходимо будет создать варианты для файлов, отличающихся в профилях home и office, и можно будет выбирать при загрузке, какой из профилей необходимо использовать. Использование этого метода удобно, если смена сетевого окружения происходит синхронно с загрузкой системы.<br />
<br />
==== Выбор профиля по умолчанию ====<br />
Если требуется, чтобы определенный профиль конфигурации использовался по умолчанию, то необходимо записать его название в файл <tt>/etc/net/profile</tt>. Этот метод имеет приоритет над параметром ядра netprofile. Использование такого способа выбора профиля целесообразно, когда переключение между конфигурациями происходит реже, чем перезагрузка системы.<br />
<br />
==== Смена профиля во время работы ====<br />
Если требуется переконфигурировать сеть без перезагрузки или редактирования файла {{path|/etc/net/profile}}, то следует использовать параметры сервиса network, описанные в разделе [[#restart, reload и другие команды|restart, reload и другие команды]]. Этот метод имеет приоритет над профилем по умолчанию и профилем, выбранным при загрузке. Целесообразно его использовать, если смена сетевого окружения происходит чаще, чем перезагрузка системы.<br />
<br />
==== Определение профиля во время конфигурации интерфейса ====<br />
Если в каталоге конфигурации интерфейса существует исполняемый файл ненулевого размера с именем <tt>selectprofile</tt>, то этот файл будет выполнен и первое слово первой строки его стандартного вывода использовано как имя профиля, которое должно быть использовано для конфигурации данного интерфейса. Этот метод имеет приоритет над всеми остальными методами. Исходной задачей, требующей такого решения, являлось конфигурирование беспроводного интерфейса в зависимости от доступных точек доступа.<br />
<br />
Следует учитывать, что число вызовов файла <tt>selectprofile</tt> может меняться в зависимости от контекста и время его выполнения может быть различным, поэтому при написании такого файла следует учитывать, что первым параметром будет являться имя текущего сценария. В настоящее время это могут быть ifup*, ifdown*, setup* и shutdown*. Для приведённого выше примера имеет смысл реагировать только на вызовы из ifup или ifup-common.<br />
<br />
== References ==<br />
<br />
<references/><br />
<br />
{{Category navigation|title=etcnet|category=etcnet|sortkey=*}}</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Etcnet&diff=15328Etcnet2010-07-13T11:27:28Z<p>EvgeniiTerechkov: typos fixed</p>
<hr />
<div>{{DISPLAYTITLE:etcnet}}<br />
{{span|font-size: 180%|Подсказки пользователю /etc/net}}<br />
<br />
{| style="border:1px solid #AAA; background:#F9F9F9; width:200px; margin: 0 0 1em 1em; padding:.2em; float: right;" class=noprint<br />
|-<br />
|[[Image:Information.svg|20x20px]] external links:<br />
* [http://sisyphus.ru/en/srpm/etcnet package info]<br />
* [http://git.altlinux.org/people/sbolshakov/packages/?p=etcnet.git;a=summary source git repo]<br />
|}<br />
<br />
Дополнительные страницы:<br />
* [[etcnet/qos|настройка QoS]]<br />
* [[etcnet/firewall|настройка сетевого экрана (firewall]])<br />
<!-- Не убирайте div-ы, на них есть внешние ссылки! --><br />
<div id="quickstart"></div><br />
<br />
== Быстрый старт ==<br />
<div id="docs"></div><br />
<br />
=== Где брать информацию ===<br />
Обращаю внимание, что начиная с версии 0.8.0 документация [http://etcnet.org/ /etc/net] переместилась из комментариев, рассеянных по множеству файлов, в несколько man-страниц. Список всех файлов документации пакета можно получить командой<br />
<pre>rpmquery -d etcnet</pre><br />
<br />
<div id="onecard"></div><br />
<br />
=== Как быстро настроить одну карту Ethernet ===<br />
# Создайте каталог <tt>/etc/net/ifaces/eth0</tt>. Это собственный каталог конфигурации данного интерфейса, в нём будут храниться файлы с настройками.<br />
# Определите, какой модуль необходим для вашей карты. Для этого можно использовать lspci, lspcidrake, pciscan. Затем<br />
# В каталоге конфигурации создайте файл <tt>options</tt>, в который впишите строку <pre>MODULE=<имя модуля></pre>. Больше ничего пока не добавляйте.<br />
# Выясните, какой IP-адрес должен быть назначен вашему интерфейсу. Если интерфейс конфигурируется по DHCP, то поместите в файл <tt>/etc/net/ifaces/eth0/options</tt> строку <tt>BOOTPROTO=dhcp</tt> и переходите к шагу 7. '''Замечание:''' в ряде случаев может также понадобиться <pre>DHCP_HOSTNAME=<имя машины без домена></pre>. Эта опция описана в man-странице <tt>etcnet-options</tt>. Также необходимо, чтобы была пустая строка в конце файла.<br />
# У вашего интерфейса есть два взаимосвязанных атрибута: IP-адрес и сетевая маска. Текущие назначенные адреса можно просмотреть командой <tt>/sbin/ip address show</tt>. Скорее всего вы увидите, что интерфейс-петля lo уже сконфигурирован с адресом 127.0.0.1/8. Создайте файл <tt>/etc/net/ifaces/eth0/ipv4address</tt>, в который поместите IP-адрес с длиной маски, например <pre>10.0.0.20/24</pre>. Наиболее популярны маски /24 и /30. Для справки приводится##LINKTOFTN ftnd1## таблица соответствия сетевых масок в различных нотациях.<br />
# Выясните адрес вашего шлюза (маршрут по умолчанию). Например, этот IP-адрес — 10.0.0.254. Создайте файл <tt>/etc/net/ifaces/eth0/ipv4route</tt>, в который поместите строку <pre>default via 10.0.0.254</pre><br />
# Убедитесь, что всё выполнено правильно, выполнив команду <tt>service network restart</tt>. Ваш интерфейс должен быть успешно сконфигурирован. Если вы конфигурировали использование DHCP, но адрес интерфейсу не назначается, просмотрите <tt>/var/log/messages</tt>.<br />
<br />
<div id="ifplugd"></div><br />
<br />
=== Как настроить ifplugd ===<br />
С версии 0.7.10 [http://etcnet.org/ /etc/net] управляет ifplugd самостоятельно. Это было сделано для лучшей интеграции пакетов и для возможности следить за несколькими интерфейсами одновременно. Для корректного использования ifplugd необходимо выполнить <tt>chkconfig ifplugd off</tt> и назначить переменную USE_IFPLUGD в файлах options соответствующих интерфейсов. Комментарий по данной переменной дан на странице руководства <tt>etcnet-options(5)</tt>.<br />
<br />
<div id="ppp"></div><br />
<br />
=== Как настроить интерфейс PPP ===<br />
Для настройки обычного модемного PPP-соединения вам нужно:<br />
# Создать каталог конфигурации, например, <tt>/etc/net/ifaces/ppp5</tt>. Сейчас вы не можете использовать что-либо кроме pppN или pppNN или pppNNN и т. п.<br />
# Прочесть <tt>/etc/net/ifaces/default/options-ppp</tt><br />
# Создать файлы конфигурации. Скорее всего вам понядобятся pppconnect и pppdisconnect, чтобы pppd знал, как дозваниваться и соединяться. Это скрипты для программы chat(8). Кроме этого в файле pppoptions можно (а зачастую нужно) перечислить опции pppd(8), определяющие способ авторизации, скорость и название порта и т. п.<br />
# Заполнить <tt>/etc/ppp/chap-secrets</tt> или <tt>/etc/ppp/pap-secrets</tt>.<br />
<br />
<div id="ppp-pptp-pppoe"></div><br />
<br />
=== Как настроить интерфейс PPtP или PPPoE ===<br />
''[[VPN_(PPTP_PPPoE) | Основная статья: VPN (PPTP PPPoE)]]''<br />
<br />
Хотя PPtP-соединения могут быть настроены и как обычные PPP-соединения, в [http://etcnet.org/ /etc/net] версии 0.7.10 для удобства пользователей была введена опция PPPTYPE. Она может принимать следующие значения:<br />
* dialup: обычный PPP-интерфейс.<br />
* pppoe: интерфейс PPPoE. Для такого интерфейса необходимо в опции HOST указывать имя Ethernet-интерфейса, через который будет производиться работа PPPoE. Побочным положительным эффектом будет то, что этот интерфейс будет при необходимости автоматически подниматься (см. ##FTN requires##).<br />
* pptp: интерфейс PPtP. Для такого интерфейса необходимо в опции PPTP_SERVER указывать имя хоста или IP-адрес PPtP-сервера, к которому будет производиться подключение. Обратите внимание, что хотя такие интерфейсы не имеют опции HOST, в большинстве случаев имеет смысл указать в опции REQUIRES интерфейс, через который будет достижим хост, указанный в PPTP_SERVER.<br />
<br />
См также [[#vpn|VPN]]<br />
<div id="DNSandPPP"></div><br />
<br />
=== DNS и PPP-соединения ===<br />
<div style="display: inline; color: red;">Внимание: здесь описывается проблема, которая на самом деле была создана, а не решена — бишь ради специфики [https://bugzilla.altlinux.org/show_bug.cgi?id=13789 kppp] была создана чётная ошибка в [https://bugzilla.altlinux.org/show_bug.cgi?id=13773 ppp-common]; последняя уже исправлена.</div><br />
<br />
Довольно долгое время существовала проблема неправильной модификации /etc/resolv.conf при установке PPP-соединений: [https://bugzilla.altlinux.org/show_bug.cgi?id=4249 https://bugzilla.altlinux.org/show_bug.cgi?id=4249]. Сейчас она решена, но необходимо дать пояснения. Прежде всего убедитесь, что у вас в файле <tt>/etc/resolv.conf</tt> есть строка <pre># ppp temp entry</pre><br />
Если этой строки нет, то в файле не будут модифицироваться строки nameserver, если только какая-нибудь программа типа kppp это не сделает специально. Если такая строка есть, то <tt>/etc/resolv.conf</tt> будет модифицироваться в зависимости от значения булевской переменной RESOLV_MODS, которую необходимо задавать в файле <tt>/etc/sysconfig/network</tt>.<br />
<br />
<div style="display: inline; color: red;">Внимание</div>: при ppp-common >= 0.4-alt1 строки <tt># ppp temp entry</tt> в <tt>/etc/resolv.conf</tt> при отсутствии PPP-соединения, поднятого какой-либо «звонилкой», запущенной от рута — быть '''не должно'''! Если есть — уберите, чтобы <tt>/etc/ppp/ip-up</tt> занимался обновлением записей про DNS в этом файле.<br />
<br />
<div id="restartreload"></div><br />
<br />
=== restart, reload и другие команды ===<br />
У сервиса network имеется ряд команд:<br />
* start: запустить все стационарные интерфейсы. hotplug-интерфейсы будут сконфигурированы при поступлении соответствующего вызова от hotplug.<br />
* startwith <имя профиля>: start с указанным именем профиля, а не определённым автоматически.<br />
* stop: остановить все стационарные интерфейсы. hotplug-интерфейсы будут расконфигурированы при поступлении соответствующего вызова от hotplug.<br />
* stopwith <имя профиля>: stop с указанным именем профиля, а не определённым автоматически.<br />
* restart: эквивалентно stop с последующим start, как и в большинстве других сервисов.<br />
* restartwith <имя профиля>: рестарт в контексте указанного профиля, эквивалентно stopwith <имя профиля> и startwith <имя профиля>.<br />
* switchto <имя профиля>: переключение в указанный профиль, эквивалентно stop и startwith <имя профиля>.<br />
* reload: семантически обозначает «актуализировать текущую конфигурацию». Для всех сконфигурированных в настоящий момент интерфейсов будет выполнена реконфигурация при наличии конфигурации.<br />
* check: автоматическая проверка конфигурационной базы.<br />
<br />
<div id="bootproto"></div><br />
<br />
=== Протоколы конфигурации адресов ===<br />
С помощью опции BOOTPROTO вы можете управлять тем, как у интерфейса будут появляться адреса и маршруты (это относится только к протоколу IPv4, так как IPv6 и IPX приобретают адреса только статически).<br />
* static — адреса и маршруты будут взяты из <tt>ipv4address</tt> и <tt>ipv4route</tt>.<br />
* dhcp — интерфейс будет сконфигурирован по DHCP.<br />
* ipv4ll — интерфейс будет сконфигурирован с помощью IPv4LL (link-local), ранее известному как ZCIP (zeroconf IP). Это значит, что из сети 169.254.0.0/16 будет подобран ещё не использованный адрес и назначен на интерфейс.<br />
Существует несколько комбинированных способов:<br />
* dhcp-static — если конфигурация по DHCP не удалась, конфигурировать методом static.<br />
* dhcp-ipv4ll — если конфигурация по DHCP не удалась, конфигурировать методом ipv4ll.<br />
* dhcp-ipv4ll-static — если конфигурация по DHCP не удалась, конфигурировать методом ipv4ll. Если и это не удалось, конфигурировать методом static.<br />
<br />
<div id="internals"></div><br />
<br />
== Почему всё так устроено ==<br />
<div id="generalinfo"></div><br />
<br />
=== Общие сведения ===<br />
[http://etcnet.org/ /etc/net] — немного больше, чем кажется на первый взгляд. Несмотря на это, [http://etcnet.org/ /etc/net] остаётся системой конфигурации сети в Linux, то есть должна позволить вам сконфигурировать вашу сеть без трюков и особого напряжения. Если вы всё же читаете эту страницу, то у вас, вероятно, возникли трудности с её использованием.<br />
<br />
Для начала я дам ряд утверждений, от которых можно оттолкнуться:<br />
# У проекта есть сайт, на котором можно найти примеры конфигурации и тексты, претендующие на звание документации: [http://etcnet.org/ http://etcnet.org/]<br />
# [http://etcnet.org/ /etc/net] интегрирован в ALTLinux Sisyphus в виде пакетов:<br />
#* etcnet (базовые сценарии)<br />
#* etcnet-full (виртуальный пакет с зависимостями на все пакеты, которые могут использоваться сценариями [http://etcnet.org/ /etc/net], с указанием их точных версий)<br />
#* etcnetconf ('''прототип''' конфигуратора)<br />
#* etcnet-defaults-desktop (умолчания для рабочей станции)<br />
#* etcnet-defaults-server (умолчания для сервера)<br />
# Пакеты etcnet и net-scripts — две конфликтующие реализации такой сущности, как «подсистема конфигурации сети» (network-config-subsystem).<br />
# При установке etcnet вместо net-scripts или наоборот сервис network оказывается выключенным. Это означает, что при загрузке системы сеть не будет сконфигурирована, проверить это можно командой <tt>chkconfig --list network</tt>. Для быстрого исправления проблемы можно дать команду <tt>chkconfig network reset</tt>.<br />
# etcnet '''НЕ''' импортирует автоматически настройки net-scripts. Если вы только что установили etcnet и ваши сетевые интерфейсы всё ещё остаются сконфигурированными (несмотря на уже отсутствующий пакет net-scripts), то вы можете запустить сценарий <tt>/etc/net/scripts/initconf</tt>. Он попытается проанализировать текущее состояние интерфейсов и выведет вам результат. Никаких файлов при этом записано не будет. Если вам понравится вывод initconf, запустите его с параметром write и он проделает то же самое, но уже с сохранением конфигурации.<br />
# Для корректной работы системы в целом необходимо, чтобы содержимое файла <tt>/etc/sysconfig/network</tt> было корректным.<br />
# Переменные sysctl в ALT Linux конфигурируются в следующих местах: <tt>/etc/sysctl.conf</tt> (глобальные системные), <tt>/etc/sysconfig/network-scripts/sysctl.conf</tt> (общие сетевые в net-scripts), <tt>/etc/net/sysctl.conf</tt> (общие сетевые в [http://etcnet.org/ /etc/net]), <tt>/etc/net/ifaces/*/sysctl.conf*</tt> (частные для конкретных интерфейсов или их типов в [http://etcnet.org/ /etc/net]).<br />
<br />
<div id="options.d"></div><br />
<br />
=== Как организованы опции по умолчанию ===<br />
Методология [http://etcnet.org/ /etc/net] предусматривает несколько шагов наследования опций, первый из которых — загрузка опций по умолчанию. Раньше это происходило из одного файла <tt>/etc/net/options</tt>, сейчас же в нашем распоряжении есть каталог <tt>/etc/net/options.d</tt>, из которого будут последовательно прочитаны все файлы.<br />
<br />
Смысл этого нагромождения следующий: оригинальный архив etcnet содержит только файл <tt>/etc/net/options.d/00-default</tt>.<br />
<br />
Упаковщик etcnet в какой-либо дистрибутив вместо того, чтобы прикладывать патч, просто добавляет файл с бОльшим номером, который переопределяет нужные опции.<br />
<br />
Администратору системы может не понравиться дистрибутивный набор, в этом случае он создаст файл с ещё более высоким номером и определит умолчания для своей системы. В результате такого подхода:<br />
# Уменьшается количество патчей (хотя их свойство отваливаться бывает полезным).<br />
# Не изменяются файлы с опциями, принадлежащие пакету. Это делает обновление пакета намного более корректным.<br />
# Сразу видно, на каком этапе какие опции переопределяются.<br />
<br />
<div id="iftab"></div><br />
<br />
=== Зачем нужен iftab ===<br />
<br />
Начиная с дистрибутивов, основанных на ветках p5 и 5.1, переименование интерфейсов возложено на udev; см. тж. [http://lists.altlinux.org/pipermail/sisyphus/2009-June/340033.html это письмо] и [https://bugzilla.altlinux.org/show_bug.cgi?id=19313 #19313] и [http://sisyphus.ru/srpm/wireless-tools/changelog %changelog ifrename].<br />
<br />
Имена сетевых интерфейсов по умолчанию, как правило, содержат их тип (eth, ppp, wifi, ipsec) и индекс: 0 для первого созданного интерфейса, 1 для второго и т. д. При этом соответствие автоматически назначенных имён физическим устройствам может не сохраняться.<br />
<br />
Эта особенность неудобна, когда машина с Linux имеет более одного интерфейса каждого типа. Типичными примерами являются маршрутизаторы и ноутбуки. В маршрутизаторах, как правило, используются однотипные сетевые карты и при их замене или изменении порядка на PCI-шине соответствие оказывается нарушенным. В ноутбуках используются ethernet и wifi-устройства с горячим подключением, при этом слотов и карт может быть более чем 1. В этом случае пользователь скорее всего пожелает закрепить за каждой сменной картой её конфигурацию.<br />
<br />
[http://etcnet.org/ /etc/net] при конфигурации интерфейса использует то имя, под которым он сконфигурирован, а именно имя каталога, в котором хранятся файлы конфигурации интерфейса.<br />
<br />
Для привязки сетевой карты к имени интерфейса в простых случаях можно воспользоваться файлом <tt>/etc/iftab</tt>, man-страница по формату которого входит в пакет <tt>ifrename</tt> (man 5 iftab).<br />
<br />
Использование <tt>/etc/iftab</tt> удобно, поскольку позволяет сохранять традиционные имена интерфейсов (например, eth0), но этот механизм не поддерживает расширенную функциональность <tt>/etc/net</tt> (в частности, ''профили'' /etc/net).<br />
<br />
Средством, позволяющим использовать все возможности <tt>etcnet</tt>, является файл <tt>/etc/net/iftab</tt>, обрабатываемый не утилитой <tt>ifrename</tt>, а непосредственно <tt>etcnet</tt>. Синтаксис этого файла совпадает с синтаксисом <tt>/etc/iftab</tt>. Ограничением же является невозможность использовать стандартные имена интерфейсом (<tt>ethX</tt>, <tt>pppX</tt>), так как переименование интерфейсов происходит уже после конфигурации интерфейса ядром. В случае, если вам необходим <tt>/etc/net/iftab</tt>, имеет смысл переименовать интерфейсы, давая им либо двухзначные номера (<tt>eth00</tt>, <tt>eth01</tt>...), либо осмысленные названия (<tt>isplink</tt>, <tt>lan</tt>...)<br />
<br />
См. письмо про [http://lists.altlinux.org/pipermail/sisyphus/2009-March/337924.html важность /etc/iftab]<br />
и тж. это письмо про [http://lists.altlinux.org/pipermail/devel/2007-October/065097.html отличия etcnet и сервиса ifrename]:<br />
{{начало цитаты}}И сразу позволю себе прокомментировать другие письма этого треда:<br />
<br />
1. «etcnet уже научился менять местами eth0 и eth1?»<br />
<br />
Освоение этого фокуса обладает сомнительной пользой. Я по-прежнему<br />
рекомендую рассматривать eth0 как временное имя с малым сроком жизни,<br />
а для повышения комфорта пользователей Ethernet-интерфейсы предлагаю<br />
называть eth00, eth01, eth02 etc.<br />
<br />
2. «Существование (номинальное) net-scripts вынуждает поддерживать<br />
ряд сервисов, которые иначе могли бы быть упразднены»<br />
<br />
Эти сервисы можно обезвредить контролем CONFMETHOD<br />
из /etc/sysconfig/network. При этом зависимости на пакет etcnet<br />
не возникнет, только на network-config-subsystem. Примеры таких<br />
пакетов должны быть в Sisyphus.<br />
<br />
3. «после приведения в порядок /etc/udev/rules.d/19-udev-ifrename.rules<br />
нужности в /etc/net/iftab я не заметил»<br />
<br />
Важнейшее принципиальное отличие /etc/net/iftab от /etc/iftab —<br />
нахождение /etc/net/iftab в специальном пространстве имён. Для него<br />
действуют механизмы определения профиля и хоста конфигурации. Это,<br />
например, позволит _желающим_ составить конфигурацию так, что срочный<br />
ремонт маршрутизатора сведётся к переносу диска (или массива)<br />
из сгоревшего шасси в запасное. Возможны и другие примеры, которые<br />
станут невозможными при помещении iftab в /etc и его лобовой<br />
интерпретации.<br />
<br />
Конечно, пользователю единственного ноутбука с одним-двумя сетевыми<br />
интерфейсами такая практика — полный overkill, но его никто и не<br />
заставляет видеть всю подводную часть. В этом и гибкость.{{конец цитаты}}<br />
<br />
<div id="specifaces"></div><br />
<br />
=== Интерфейсы lo, default и unknown ===<br />
Сразу после установки в каталоге <tt>/etc/net/ifaces</tt> (в котором хранятся конфигурации интерфейсов) можно обнаружить три каталога: lo, default и unknown.<br />
<br />
Интерфейс lo — стандартная петля, которая должна быть во всякой Linux-системе, поэтому конфигурация для него включена по умолчанию. В остальном он ничем не отличается от любого другого интерфейса и конфигурируется точно так же файлами options и ipv4address.<br />
<br />
Интерфейс default — вовсе не интерфейс. Это специальный каталог, файлы в котором обрабатываются следующим образом:<br />
* resolv.conf — если присутствует, то копируется в <tt>/etc/resolv.conf</tt>.<br />
* options — файл опций, читается после опций по умолчанию. Этот файл содержит комментарии.<br />
* options-<вид интерфейса> — этот файл содержит опции, специфичные для данного вида интерфейсов. Какие-то из них необязательны и позволяют использовать особенности данного вида интерфейсов, например, LINKDETECT в options-eth; другие обязательны, например, HOST в options-bri. Эти файлы содержат комментарии. Обратите внимание, что эти файлы лучше не редактировать. Если вам нужно задать опцию для интерфейса, то как правило это можно сделать в файле options в конфигурационном каталоге данного интерфейса. Это облегчит процесс обновления пакета etcnet.<br />
* sysctl.conf-<вид интерфейса> — файл с переменными sysctl, которые необходимо изменить. Сейчас единственный такой файл — sysctl.conf-dvb, который отключает return path filter, что всегда нужно в случае асимметричной маршрутизации.<br />
* iplink-<вид интерфейса> — файл с командами iplink, специфичными для данного вида.<br />
* selectprofile — если этот файл исполняемый, то он будет вызван из сценариев ifup/ifdown, setup/shutdown для того, чтобы вернуть на стандартном выводе имя профиля, которое необходимо использовать. Это позволяет автоматически переключать профили в зависимости от каких-либо условий. В поставку включен комментированный пример сценария: <tt>/etc/net/ifaces/default/selectprofile</tt>.<br />
* fw — каталог с настройками сетевого экрана по умолчанию.<br />
<br />
Интерфейс unknown — специальная конфигурация, которая будет использована в том случае, когда [http://etcnet.org/ /etc/net] просят сконфигурировать hotplug-интерфейс, для которого не существует каталога конфигурации. Это будет работать только в том случае, если включена опция ALLOW_UNKNOWN.<br />
<br />
<div id="broadcast"></div><br />
<br />
=== О загадочном broadcast ===<br />
Периодически возникает вопрос: почему после старта [http://etcnet.org/ /etc/net] при запуске ifconfig можно видеть Bcast:0.0.0.0, хотя при использовании net-scripts это поле было правильным? Дело в том, что net-scripts оперируют адресом, маской, адресом сети и широковещательным адресом, пытаясь определить неизвестные компоненты из известных, а <tt>config-ipv4</tt> просто передаёт утилите ip содержимое файла ipv4address, не заботясь о его содержимом. Хорошо ли это или плохо? Я думаю, что скорее хорошо.<br />
<br />
Во-первых, если iproute2 изменит свой синтаксис, то с большой вероятностью править придётся только конфигурационные файлы.<br />
Во-вторых, я пока не встречал проблем с «отсутствующим» broadcast address. Он есть в таблице маршрутизации local. В-третьих, вы всегда можете назначить адрес broadcast в файле ipv4address. Проще всего это сделать с помощью выражения <tt>broadcast +</tt>##LINKTOFTN ftnd2##.<br />
Обновление: в версии 0.8.0 появилась опция <tt>AUTO_BROADCAST</tt> для автоматического дополнения каждой строки <tt>ipv4address</tt>.<br />
<br />
<div id="never_rmmod"></div><br />
<br />
=== О ядре 2.6 и пропадающих интерфейсах ===<br />
Иногда жалуются, что если два интерфейса используют один и тот же модуль ядра и у них определена опция MODULE (то есть скрипты [http://etcnet.org/ /etc/net] сами загружают и выгружают модули), то при опускании одного интерфейса пропадает и второй. Почти наверняка используется ядро 2.6, особенностью которого являются странные значения счётчика ссылок (третий столбец вывода lsmod). Когда он оказывается равен нулю (довольно часто), скрипты могут попытаться выгрузить модуль интерфейса, для которого запущен ifdown. И у них получится, несмотря на то, что другой интерфейс, использующий этот же модуль, находится в состоянии UP.<br />
<br />
Чтобы заблокировать выгрузку модулей, можно использовать булевскую переменную NEVER_RMMOD. Возможно, позже это будет происходить автоматически для таких странных ядер.<br />
<br />
<div id="removables"></div><br />
<br />
=== О hotplug-интерфейсах и не только ===<br />
Часто задают вопросы об опции USE_HOTPLUG, причём задают в контексте уже установленной кем-то USE_HOTPLUG=yes. Я попробую объяснить, зачем нужна эта опция и как её правильно использовать. Есть несколько сценариев конфигурации сети.<br />
<br />
Первый и самый простой — выполнение <tt>service network start</tt> при старте системы или вручную. При этом требуется только сформировать погруппные (потиповые) списки интерфейсов, подлежащих обработке, и последовательно выполнить требуемые действия. Модули ядра при этом загружаются сценариями [http://etcnet.org/ /etc/net], при этом имена модулей берутся из опции MODULE (кстати, в этой опции можно перечислить несколько имён и они будут последовательно загружены, только не забудьте взять список в кавычки). Это мой любимый метод конфигурации, он лучше всего подходит для маршрутизаторов. Преимущество его в том, что вся необходимая информация сконцентрирована в одном месте — каталоге <tt>/etc/net</tt>. Если опция MODULE не определена, то будет предпринята попытка загрузки по имени интерфейса в надежде на правильно заполненный <tt>/etc/modules.conf</tt>.<br />
<br />
Второй сценарий — реакция на событие ifplugd. Раньше существовала путаница, так как требовалась синхронная настройка сервиса ifplugd, но сейчас логика работы более определена, так как [http://etcnet.org/ /etc/net] взяла управление ifplugd на себя. В части загрузки модуля этот сценарий не отличается от первого.<br />
<br />
Третий сценарий — реакция на появление или исчезновение сменного устройства. Для обработки таких событий предназначены сценарии <tt>/etc/net/scripts/{ifup,ifdown}-removable</tt>, которые вызываются из сценариев пакетов hotplug и pcmcia-cs. Сложность заключается в том, что для сменных PCMCIA-карт вызовы могут дублироваться: для одного и того же события первый раз ifup-removable будет вызван из hotplug, второй — из pcmcia-cs. Но это не всё. hotplug также реагирует на загрузку модулей ядра для обычных карт PCI и более того, включает сценарии, которые пытаются загружать модули самостоятельно. В этом контексте [http://etcnet.org/ /etc/net] получает слишком много вызовов от hotplug и по умолчанию их игнорирует (USE_HOTPLUG=no).<br />
<br />
Предположим, вам необходимо настроить действительно сменную карту. После заполнения <tt>/etc/iftab</tt> или <tt>/etc/net/iftab</tt> в файле options необходимо будет задать USE_HOTPLUG=yes. После этого при получении события от hotplug [http://etcnet.org/ /etc/net] будет работать в том контексте, что модуль в загрузке и выгрузке не нуждается. Кроме того, '''такой интерфейс будет пропущен при обычном старте сети'''. Почему? Потому, что если он сменный, то единственный достоверный способ узнать, что он присутствует — получить вызов от hotplug. Из факта выполнения <tt>service network start</tt> совсем не следует, что какой-то один или несколько из сконфигурированных hotplug-интерфейсов сейчас в наличии и требует конфигурации. Если вы хотите вручную расконфигурировать hotplug-интерфейс до его извлечения, дайте команду ifdown. Для повторной конфигурации вставьте его ещё раз.<br />
<br />
Также существует опция USE_PCMCIA. Если события для вашей карты генерирует pcmcia-cs, то вам нужно её включить. Если события генерируются только hotplug, то используйте опцию USE_HOTPLUG.<br />
<br />
<div id="eth0"></div><br />
<br />
=== В каких случаях eth0 вреден ===<br />
При использовании файла <tt>/etc/net/iftab</tt>, то есть в случае применения сложных конфигураций, возникает следующая проблема:<br />
* При загрузке модулей имена интерфейсов принимают вид eth0, eth1, eth2… Какие именно — в общем случае контролировать нельзя.<br />
* Имя eth0 обладает наибольшей вероятностью оказаться занятым.<br />
* ifrename не может переименовать интерфейс, если целевое имя уже занято (udev использует хак — <tt>ifrename -t</tt>, но это не работает после начальной загрузки, см. man-страницу ifrename)<br />
С учётом этого, если <tt>/etc/net/iftab</tt> содержит тот же набор имён интерфейсов, что уже имеется после загрузки модулей (то есть <tt>eth0</tt>/<tt>eth1</tt> и другие «стандартные» названия), то единственный случай, когда etcnet сможет без ошибок обработать такой файл — изначальное соответствие, не требующее переименования.<br />
<br />
Таким образом, при использовании <tt>/etc/net/iftab</tt> имеет смысл давать интерфейсам названия, отличные по виду от тех, что назначает ядро. В простых случаях проще использовать <tt>/etc/iftab</tt>.<br />
<br />
<div id="advanced"></div><br />
<br />
== Расширенные возможности ==<br />
<div id="multipleIPs"></div><br />
<br />
=== Несколько IP-адресов или маршрутов на одном интерфейсе ===<br />
Вы можете помещать произвольное количество IP-адресов в файл ipv4address по одному адресу на каждой строке. То же самое относится к статическим маршрутам и файлу ipv4route.<br />
<br />
Обратите внимание, что [http://etcnet.org/ /etc/net] не анализирует содержимое этих файлов, а формирует на основе каждой строки командную строку для утилиты ip. Это означает, что вы можете помещать в этих файлах произвольные поддерживаемые ip опции и они будут обработаны. Например, в файле ipv4route можно поместить строку <pre>10.0.1.0/24 via 10.0.0.253 metric 50 weight 5 table 100</pre><br />
<br />
<div id="requires"></div><br />
<br />
=== Зависимости между интерфейсами ===<br />
У интерфейсов vlan, bond, bri и teql, входящих в группу зависимых физических, должна быть определена опция HOST со списком интерфейсов, необходимых для инициализации текущего интерфейса. Если хост-интерфейс не сконфигурирован при поднятии зависимого интерфейса, то это будет исправлено.<br />
<br />
Кроме обязательной для определённых интерфейсов опции HOST может быть задана необязательная для всех остальных интерфейсов опция REQUIRES. Интерфейсы, перечисленные в этой опции, будут считаться зависимостями текущего интерфейса. По умолчанию попытка сконфигурировать интерфейс А, который зависит от Б и В, приведёт сначала к конфигурации Б и В. Аналогично, при расконфигурации Б или В сначала будет расконфигурирован А.<br />
<br />
Зависимость одного интерфейса от другого не всегда формальна. Например, в сценарии ifup-pre одного интерфейса может использоваться команда, которая потребует разрешения DNS-имени, которое может быть разрешено только с помощью resolv.conf, инсталлируемого другим интерфейсом. Или это может быть PPPoE/PPtP-интерфейс, требующий Ethernet-интерфейс для работы.<br />
<br />
Для того, чтобы избежать неожиданных сбоев в таких случаях, правильно задавайте опцию REQUIRES.<br />
<br />
<div id="postpre"></div><br />
<br />
=== Как использовать свои сценарии post и pre ===<br />
Вы можете поместить в каталог конфигурации интерфейса файлы, которые будут выполнены в определённые моменты. Для этого они должны быть исполняемыми и называться следующим образом:<br />
* <tt>ifup-pre</tt> — для выполнения перед конфигурированием интерфейса.<br />
* <tt>ifup-post</tt> — для выполнения после конфигурирования интерфейса. Например, можно запустить почтовую систему.<br />
* <tt>ifdown-pre</tt> — для выполнения перед расконфигурированием интерфейса. Например, можно остановить почтовую систему.<br />
* <tt>ifdown-post</tt> — для выполнения после расконфигурирования интерфейса.<br />
Также в версии до 0.8.0 вы можете использовать следующие сценарии (они должны быть исполняемыми):<br />
* <tt>/etc/net/scripts/ifup-pre-local</tt><br />
* <tt>/etc/net/scripts/ifup-post-local</tt><br />
* <tt>/etc/net/scripts/ifdown-pre-local</tt><br />
* <tt>/etc/net/scripts/ifdown-post-local</tt><br />
Они будут вызваны для *каждого* интерфейса. Начиная с версии 0.8.0 эти сценарии называются так:<br />
* <tt>/etc/net/ifup-pre</tt><br />
* <tt>/etc/net/ifup-post</tt><br />
* <tt>/etc/net/ifdown-pre</tt><br />
* <tt>/etc/net/ifdown-post</tt><br />
Семантика сохранена.<br />
<br />
<div id="iplink"></div><br />
<br />
=== Как управлять канальными параметрами интерфейсов ===<br />
Если вы поместите в конфигурационный каталог интерфейса файл iplink, в котором в каждой строке будут записаны команды режима link утилиты ip, то они будут выполнены при конфигурации интерфейса. Например, если вы желаете, чтобы интерфейс net1 имел MAC-адрес aa:bb:cc:dd:ee:ff и MTU 200 байт, то в файл <tt>/etc/net/ifaces/net1/iplink</tt> нужно поместить следующее:<br />
<pre>address aa:bb:cc:dd:ee:ff<br />
mtu 200</pre><br />
Обратите внимание, что в этом случае в <tt>/etc/net/iftab</tt> вам необходимо будет использовать селектор businfo или driver вместо mac.<br />
<br />
<div id="ethtool"></div><br />
<br />
=== Как управлять физическими параметрами интерфейсов ===<br />
Если вы поместите в конфигурационный каталог интерфейса файл ethtool, в котором будет строка с параметрами программы ethtool, то она будет выполнена при конфигурации интерфейса. Например, если вы желаете, чтобы интерфейс net1 имел скорость 10Мбит и авто-согласование скорости было отключено, то в файл <tt>/etc/net/ifaces/net1/ethtool</tt> нужно поместить следующее:<br />
<pre>speed 10 autoneg off<br />
</pre><br />
<br />
<div id="bridge"></div><br />
<br />
=== Как настроить Ethernet-мост ===<br />
<br />
Перед настройкой моста с помощью etcnet сначала проверьте, что у вас установлен пакет bridge-utils. Etcnet использует утилиту brctl для настройки моста, и, если при рестарте сети у вас ее не будет, то сеть станет недоступна. Если интерфейсы, входящие в бридж, единственные физически подключённые, и настраиваете бридж вы на удалённом сервере, то вам придётся делать это осторожно: эти интерфейсы перестанут быть доступны. Если вы ошибётесь с конфигурацией, вам потребуется физический доступ к серверу (перед перезапуском сервиса network можно, на всякий случай, открыть ещё одну консоль и запустить там что-то вроде sleep 500 && reboot).<br />
<br />
Для настройки Ethernet-моста (bridge, допустим интейфейс будет называться br0) надо, создав каталог ifaces/br0, создать там файлы со следующими данными:<br />
<br />
* <tt>brctl</tt>:<br />
stp AUTO on<br />
<br />
* <tt>ipv4address</tt>:<br />
192.168.100.200/24<br />
<br />
* <tt>options</tt>:<br />
TYPE=bri<br />
HOST='eth0 tap0'<br />
BOOTPROTO=static<br />
<br />
содержимое файла brctl передастся утилите brctl. AUTO означает, что скрипт setup-bri самостоятельно определит имя bridge-интерфейса (см. README.bridge в каталоге doc пакета etcnet).<br />
IP-адрес для интерфейса, как обычно, будет взят из ipv4address.<br />
В опции HOST файла options нужно указать те интерфейсы, которые будут входить в мост. Если в него будут входить интерфейсы, которые до этого имели ip-адрес (например, eth0), то этот адрес должен быть удален (например, можно закомментировать содержимое файла ifaces/eth0/ipv4address).<br />
<br />
При старте сети сначала поднимаются интерфейсы, входящие в мост, затем сам мост (автоматически). Для назначения адреса мосту можно так же использовать DHCP (BOOTPROTO=dhcp). Но, при этом, важно обратить внимание на параметр forwarding delay (man brctl /setfd), так как интерфейс, подключенный к мосту, не сразу входит в режим передачи пакетов, и это может вызвать dhcp таймаут. Версии etcnet в server4 и desktop4.1 (0.9.7-alt0.M40/M41)<br />
имеют эту багу, она исправлена только в версии 0.9.9-alt1. <br />
Большой документ по настройке моста с вопросами и ответами (перевод) можно найти [http://xgu.ru/wiki/Linux_Bridge тут], а его оригинал [http://www.linuxfoundation.org/en/Net:Bridge тут].<br />
<br />
<br />
С пакетом etcnet поставляются примеры конфигурации. Один из них показывает, как из двух ethernet-интерфейсов port0 и port1 можно собрать мост bridge: [http://etcnet.org/examples/Ethernet-bridge-GRE/ http://etcnet.org/examples/Ethernet-bridge-GRE/]<br />
<br />
Безотносительно к etcnet, стоит помнить про проблему, связанную с NAT:<br />
http://bugzilla.kernel.org/show_bug.cgi?id=13079<br />
<br />
<div id="vlan"></div><br />
<br />
=== Как настроить VLAN ===<br />
<br />
Для настройки 802.1q VLAN (например, id 4094 на eth1) следует, создав каталог ifaces/eth1.4094, поместить в него файлы со следующим содержимым:<br />
<br />
* <tt>ipv4address</tt>:<br />
192.168.100.200/24<br />
<br />
* <tt>options</tt>:<br />
TYPE=vlan<br />
HOST=eth1<br />
VID=4094<br />
BOOTPROTO=static<br />
<br />
Содержимое переменных HOST и VID будет передано утилите vconfig; использование файла vlantab необязательно (и не рекомендуется по причине невозможности использовать ifup для отдельного интерфейса). Пример конфигурации: [http://etcnet.org/examples/VLAN-without-vlantab/ http://etcnet.org/examples/VLAN-without-vlantab/]<br />
<br />
Следует обратить внимание, что 4094 является верхней допустимой границей идентификатора валидного VLAN, а [http://www.candelatech.com/pipermail/vlan/2004-November/000128.html 4095 используется технически в процессе отбрасывания трафика по неверным VLAN]. (следует отметить, что это не ограничение Linux: [http://en.wikipedia.org/wiki/802.1Q в стандарте под VID отведено 12 бит])<br />
<br />
'''Для настройки Q-in-Q интерфейса''', скажем, eth1.123.513 (дважды тегированный трафик: внешняя метка -- 123, внутренняя -- 513) нужно файл <tt>options</tt> в каталоге <tt>ifaces/eth1.123.513</tt> заполнить примерно так:<br />
<br />
* <tt>options</tt>:<br />
TYPE=vlan<br />
HOST=eth1.123 # "родительский" интерфейс; может называться иначе<br />
VID=513<br />
VLAN_REORDER_HDR=0<br />
BOOTPROTO=static<br />
<br />
Разумеется, родительский интерфейс должен быть сконфигурирован (можно с или без BOOTPROTO, с или без ipv4address и т.п.).<br />
<br />
Таким образом можно каскадировать интерфейсы "как угодно глубоко" (Q-in-Q-in-Q-in-Q....). Необходимо только учесть, что длина имени интерфейса ограничена (16-ю символами).<br />
<br />
<div id="tun/tap"></div><br />
<br />
=== Настройка tun/tap интерфейса ===<br />
<br />
Etcnet поддерживает простое создание интерфейсов типа tun/tap. Это виртуальный тип интерфейсов для передачи пакетов между ядром и программами, который не передает данных через физические устройства.<br />
tun — это интерфейс типа point-to-point, работающий с кадрами IP, tap — интерфейс типа ethernet, работающий с кадрами ethernet.<br />
Потребуется использование утилиты tunctl, находящейся в одноименном пакете.<br />
Для настройки tun/tap интерфейса (допустим, интейфейс будет называться tap0) надо, создав каталог /etc/net/ifaces/tap0, создать там файл со следующими данными:<br />
<br />
* <tt>options</tt>:<br />
TYPE=tuntap<br />
TUNTAP_USER=combr<br />
<br />
<tt>TUNTAP_USER</tt> — это аккаунт или цифровой id пользователя, которому будут даны права на использование интерфейса tap0 (устройство /dev/net/tun).<br />
Этот параметр будет передан утилите tunctl как аргумент опции -u (см. man tunctl).<br />
С версии ядра 2.6.18 произошли изменения в управлении этим типом интерфейсов:<br />
<br />
{{Начало цитаты}}<br />
В 2.6.18 действительно произошли изменения, потребовавшие<br />
обязательного применения tunctl для разрешения доступа обычных<br />
пользователей к tap-интерфейсам. В предыдущих версиях любой<br />
пользователь, имеющий доступ к /dev/net/tun, мог создать любое<br />
количество сетевых интерфейсов с произвольными именами. Начиная с<br />
2.6.18, для создания интерфейса через /dev/net/tun требуется<br />
CAP_NET_ADMIN (обычно эту привилегию имеет только root), а обычный<br />
пользователь, имеющий доступ к /dev/net/tun, может только использовать<br />
уже созданные интерфейсы, к которым разрешён доступ для его uid.<br />
{{Конец цитаты|источник=Сергей Власов}}<br />
<br />
<div id="iptun"></div><br />
<br />
=== Настройка и использование IP-туннелей ===<br />
IP-туннели — средство, позволяющее при умелом использовании улучшить IP-сети. Поддерживаются IP-туннели трёх видов: IPIP, GRE и SIT. Прежде всего необходимо определиться, какой вид туннеля вам необходим. Туннели IPIP — самые простые. Обратите внимание, что IPIP-туннели не могут передавать multicast-пакеты, соответственно, OSPF на таких интерфейсах работать не будет.<br />
<br />
Туннели GRE (general incapsulation) обычно используются в маршрутизаторах Cisco. По туннелям этого типа могут передаваться broadcast и multicast пакеты, кроме того, эти туннели поддерживают контрольные суммы и контроль упорядоченности пакетов. Также GRE-туннели обладают опциональным атрибутом key в виде произвольного 4-байтового числа, который позволяет конфигурировать несколько GRE туннелей между одной парой IP-адресов несущей сети (в отличие от IPIP-туннелей, с которыми это невозможно).<br />
<br />
Туннели SIT предназначены для транспортировки пакетов IPv6 через сети IPv4.<br />
<br />
Тип туннеля определяется опцией TUNTYPE (ipip, gre, sit). По умолчанию TUNTYPE=ipip. Кроме типа туннеля для конфигурации всегда требуется адрес удалённого хоста и почти всегда — локальный адрес. Эти адреса определяются опциями TUNREMOTE и TUNLOCAL соответственно. В некоторых случаях локальный адрес можно не указывать. В этом случае опция TUNLOCAL всё равно обязательна, но принимает значение any. Не забудьте назначить туннельному интерфейсу адреса и маршруты в соответствущих файлах.<br />
<br />
Пример: для конфигурации GRE-туннеля между 10.0.1.2 и 10.0.2.3 с двумя ключами для исходящих и входящих пакетов, проверкой очерёдности пакетов, TTL 8 и вычислением контрольных сумм. Туннель должен использовать только интерфейс gw1. Файл <tt>/etc/net/ifaces/mytunnel/options</tt> будет следующим:<br />
<source lang="ini"><br />
TYPE=iptun<br />
TUNTYPE=gre<br />
TUNLOCAL=10.0.1.2<br />
TUNREMOTE=10.0.2.3<br />
TUNTTL=8<br />
HOST=gw1<br />
TUNOPTIONS='seq ikey 2020 okey 2030 csum'<br />
</source><br />
<br />
<div id="vpn"></div><br />
<br />
=== Что следует помнить при настройке VPN (и туннелей) ===<br />
Довольно часто при настройке VPN-подключения (под которыми тут я буду подразумевать все туннельные подключения, то есть подключения поверх IP) забывают, что при использовании опции pppd '<tt>defaultroute</tt>' маршрут по-умолчанию после подключения будет изменен. При этом, если VPN-сервер находится в другой, нежели клиент, сети, то после подключения (и изменения маршрута по-умолчанию) VPN-сервер становится недоступным, следовательно, недоступными становятся все внешние адреса, и подключение, как правило, рвется по тайм-ауту.<br />
<br />
Выходом, как обычно (и рекомендовано) служит указание ''отдельного'' маршрута на VPN-сервер (или его сеть). Для этого необходимо прописать (в примере для маршрута через eth0) в <tt>/etc/net/ifaces/eth0/ipv4route</tt> строку вида<br />
<pre>10.0.1.0/24 via 10.0.0.1</pre><br />
Тут подразумевается, что VPN-сервер находится в сети 10.0.1.0/24 (например, имеет адрес 10.0.1.1), клиент — в сети 10.0.0.0/24 (например, 10.0.0.10), а маршрутизатор имеет адрес 10.0.0.1.<br />
<br />
Теперь, при использовании опции '<tt>defaulroute</tt>' для pppd (которая указывает, что нужно изменить на вновь созданное подключение маршрут по-умолчанию), даже после замены маршрута по-умолчанию новым сеть 10.0.1.0, в которой в нашем примере и находится VPN-сервер, остается доступной.<br />
<br />
Как более точечный вариант (применяется в alterator-net-pptp 0.5.x) можно использовать скрипты <tt>ifup-pre</tt> и <tt>ifdown-post</tt> в каталоге конфигурируемого PPP-интерфейса; пример:<br />
<source lang="bash"><br />
#!/bin/sh<br />
# sample /etc/net/ifaces/ppp0/ifup-pre; replace variables yourself<br />
ip route add $VPN_SERVER via $DEF_GW<br />
</source><br />
<source lang="bash"><br />
#!/bin/sh<br />
# sample /etc/net/ifaces/ppp0/ifdown-post; replace variables yourself<br />
ip route del $VPN_SERVER via $DEF_GW<br />
</source><br />
Не забудьте подставить нужные IP-адреса (не сеть, где VPN-сервер, а его /32) и сделать <tt>chmod +x ifup-pre ifdown-post</tt><br />
<br />
<div id="ipsectun"></div><br />
<br />
=== Настройка и использование IPSec-туннелей ===<br />
В ALT Linux поддерживаются статические IPSec-туннели, которые реализутся модулем ядра ipsec_tunnel, который в свою очередь использует CryptoAPI ядер серии 2.4. Для этих интерфейсов кроме TUNLOCAL и TUNREMOTE обязательно требуется ещё такой параметр как TUNSPI. Это уникальный номер туннеля, он должен быть более 0x2000 и одинаковым на обоих хостах. Эти туннели требуют, чтобы для них были определены параметры либо шифрования, либо подписи, либо того и другого вместе. Опции CIPHER и DIGEST определяют соответственно алгоритмы и режимы шифрования и подписи, а опции CIPHERFILE и DIGESTFILE — имена файлов в конфигурационном каталоге интерфейса, которые содержат ключи шифрования и подписи. Для форсирования интерфейса, через который будут посылаться туннелированные пакеты, можно использовать опцию HOST.<br />
<br />
<div id="iprule"></div><br />
<br />
=== Сложная маршрутизация ===<br />
Под сложной маршрутизацией понимается наличие нескольких таблиц маршрутизации. Для их использования нужно будет сконфигурировать правила ядра. Если мы посмотрим на правила по умолчанию, то мы увидим следующее:<br />
<pre>$ /sbin/ip ru<br />
0: from all lookup local <br />
32766: from all lookup main <br />
32767: from all lookup default</pre><br />
Сами таблицы определены в файле <tt>/etc/iproute2/rt_tables</tt>. Для создания конфигурации «сложной маршрутизации» необходимо вначале «создать» нужные таблицы в этом файле (если вы хотите использовать имена таблиц, а не числа).<br />
<br />
Следующий шаг — заполнение таблиц. В конфигурационном каталоге интерфейса в файле ipv4route добавьте маршрутные записи, не забыв указать <tt>table XX</tt>. Учтите, что если вы не начинаете строку с режима ip route (add, del, replace, append, change), то по умолчанию будет использован режим DEFAULT_IPV4ROUTE_CMD (append).<br />
<br />
Второй шаг — определение правил в файле ipv4rule. Опять же, не обошлось без некоторой автоматики. Если строка не начинается с операции del или add, то нужный режим будет подставлен автоматически. Это подходит для тех случаев, когда вам при поднятии интерфейса необходимо добавить правила, а при опускании — удалить. Возможность указывать del или add реализована для обратных случаев: если при поднятии интерфейса вам необходимо удалить правила, а при опускании — добавить. В этом случае add и del будут в нужный момент автоматически заменены на del и add.<br />
<br />
Пример такой конфигурации входит в [http://etcnet.org/ /etc/net] 0.7.12: [http://etcnet.org/examples/routing-LARTC-1/ http://etcnet.org/examples/routing-LARTC-1/]<br />
<br />
<div id="wireless"></div><br />
<br />
=== Простое переключение маршрутов ===<br />
В ситуации, когда вы постоянно пользуетесь eth-интерфейсом и у вас настроен маршрут по умолчанию,<br />
бывает удобно настроить второй маршрут по умолчанию через беспроводной интерфейс,<br />
но с метрикой, меньшей чем у проводного интерфейса.<br />
В этом случае, при поднятии WI-FI маршрут по умолчанию «развернется» в нужную сторону.<br />
<br />
Например:<br />
<br />
<tt>/etc/net/ifaces/eth0/ipv4route</tt><br />
<pre>default via 192.168.3.254 metric 10</pre><br />
и<br />
<tt>/etc/net/ifaces/ath0/ipv4route</tt><br />
<pre>default via 192.168.123.1 metric 5</pre><br />
<br />
=== О беспроводном Ethernet ===<br />
Большинство беспроводных интерфейсов сейчас представлено системе как интерфейсы Ethernet. Соответственно ваш беспроводный интерфейс будет иметь [https://bugzilla.altlinux.org/show_bug.cgi?id=6283 TYPE=eth]. Чтобы он нормально работал, нужно кроме загрузки модуля с параметрами воспользоваться утилитами iwconfig из пакета wireless-tools или wpa_supplicant из такого же пакета. Вместо того, чтобы запускать их вручную, можно просто поместить в конфигурационный каталог интерфейса файл iwconfig с командами iwconfig или файл wpa_supplicant.conf с конфигурацией wpa_supplicant. Они будут использованы автоматически.<br />
<br />
Пример [http://hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wireless.html конфигурации] (совместно с <tt>[http://ndiswrapper.sourceforge.net/ ndiswrapper]</tt>):<br />
<tt>/etc/net/ifaces/wlan0/options</tt><br />
<pre>TYPE=eth<br />
MODULE=ndiswrapper<br />
NEVER_RMMOD=yes<br />
BOOTPROTO=dhcp<br />
USE_HOTPLUG=no<br />
ONBOOT=no</pre><br />
<tt>/etc/net/ifaces/wlan0/iwconfig</tt><br />
<pre>essid default<br />
#key bababababa</pre><br />
<br />
<br />
Еще один пример (от thresh@) использования etcnet для настройки беспроводной сети (в данный момент это не WPA2, но работало и на нем):<br />
<tt>/etc/net/ifaces/eth0/options</tt><br />
<pre>TYPE=eth<br />
USE_HOTPLUG=NO<br />
BOOTPROTO=static<br />
module=ipw2200<br />
WPA_DRIVER=wext</pre><br />
<br />
<tt>/etc/net/ifaces/eth0/iwconfig</tt><br />
<pre>essid homenet<br />
mode 1<br />
ap 00:11:D8:22:AD:0D<br />
channel 3<br />
rate 11M</pre><br />
<br />
<tt>/etc/net/ifaces/eth0/wpa_supplicant.conf</tt><br />
<pre>ctrl_interface=/var/run/wpa_supplicant<br />
ctrl_interface_group=0<br />
eapol_version=1<br />
ap_scan=1<br />
fast_reauth=1<br />
<br />
network={<br />
ssid="homenet"<br />
bssid=00:11:D8:22:AD:0D<br />
proto=WPA<br />
key_mgmt=WPA-PSK<br />
pairwise=CCMP TKIP<br />
group=TKIP<br />
psk="this is my mega secret password string to wpa supplicant"<br />
priority=2<br />
}</pre><br />
<br />
<br />
<div id="sysctl"></div><br />
<br />
=== Как использовать автодополнение в sysctl.conf ===<br />
В конфигурационном каталоге интерфейса может находиться файл sysctl.conf, в котором можно перечислить переменные sysctl (8). Но переменные могут быть как общесистемными, так и относящимися к интерфейсу — описание переменных можно почитать в [http://gazette.linux.ru.net/rus/articles/index-ipsysctl-tutorial.html http://gazette.linux.ru.net/rus/articles/index-ipsysctl-tutorial.html]. Естественно, писать в sysctl.conf что-то вроде <tt>net.ipv4.conf.eth0.log_martians = 1</tt> неудобно. К тому же при переименовании интерфейса вы можете забыть отредактировать файл sysctl.conf.<br />
<br />
Решается это следующим способом: просто запишите в файл имя переменной и значение, а [http://etcnet.org/ /etc/net] сама решит, как к этой переменной добраться, и вызовет sysctl с полным именем. Например:<br />
<pre>log_martians=1<br />
rp_filter=1</pre><br />
<br />
<div id="profiles"></div><br />
<br />
=== Подключение к Wi-Fi с сертификатом на аппаратном токене ===<br />
Для беспроводного подключения в корпоративных сетях могут использоваться сертификаты, записанные на аппаратном токене, например, Aladdin eToken. Для настройки такого подключения нужно использовать <tt>/etc/net/ifaces/wlan0/wpa_supplicant.conf</tt><br />
<pre><br />
ctrl_interface=/var/run/wpa_supplicant<br />
ctrl_interface_group=wheel<br />
#eapol_version=1<br />
#ap_scan=2<br />
#fast_reauth=1<br />
pkcs11_engine_path=/usr/lib/openssl/engines/engine_pkcs11.so<br />
pkcs11_module_path=/usr/lib/libeTPkcs11.so<br />
update_config=0<br />
<br />
network={<br />
ssid="test"<br />
key_mgmt=WPA-EAP<br />
pairwise=CCMP TKIP<br />
group=CCMP TKIP<br />
eap=TLS<br />
identity="email@address.ru"<br />
engine_id="pkcs11"<br />
key_id="xxxxxxxxx"<br />
cert_id="xxxxxxxxx"<br />
engine=1<br />
}<br />
</pre><br />
где key_id и cerd_id взяты из вывода команды<br />
<pre><br />
# pkcs11-tool --module /usr/lib/libeTPkcs11.so -O -l<br />
</pre><br />
Используются родные драйвера Aladdin - pkiclient-5.00.28-0, и пакет openssl-engine_pkcs11-0.1.5-alt1.<br />
<br />
=== Профили конфигурации ===<br />
<br />
==== Определение профилей ====<br />
Профиль — именованный вариант конфигурации, в той или иной степени изменяющий базовую конфигурацию системы. Профили могут быть применены, например, для конфигурации ноутбука в разных сетевых окружениях, или при подготовке новой или тестовой конфигурации с возможностью быстрого возврата к старой. Практически профили реализуются следующим образом: для какого-либо из файлов, составляющих общесистемную конфигурацию или конфигурацию интерфейса, создаётся альтернативный вариант, который отличается добавлением в конце названия файла знака # и имени профиля.<br />
<br />
Например, единственное отличие между профилями заключается в том, какой модуль ядра будет загружен для интерфейса eth0. В этом случае файл <tt>/etc/net/ifaces/eth0/options</tt> необходимо скопировать в <tt>/etc/net/ifaces/eth0/options#profile1</tt> и изменить значение переменной MODULE в одном из них. Далее при использовании конфигурации по умолчанию будет использован файл options, а при использовании профиля profile1 — файл options#profile1. Если при этом для назначения интерфейсу имени используется файл <tt>/etc/net/iftab</tt>, то скорее всего необходимо будет создать соответствующий файл <tt>/etc/net/iftab#profile1</tt>, так как другой модуль ядра указывает на другой физический интерфейс и исходный файл iftab работать не будет.<br />
<br />
Профили могут использоваться также и для отключения каких-то параметров конфигурации. Например, если используется файл ipv4route для установки маршрутов для интерфейса, то можно создать файл нулевого размера ipv4route#profile2, чтобы при использовании профиля profile2 никаких маршрутов не конфигурировалось.<br />
<br />
==== Выбор профиля при загрузке ====<br />
Если при загрузке системы ядру был передан параметр netprofile, то его значение будет использовано как имя профиля по умолчанию. Это может быть использовано для создания собственных пунктов меню загрузчиков LILO и GRUB с заранее определённым профилем сетевой конфигурации. Заданный таким образом профиль может быть далее переопределён другими методами. Следует понимать разницу между различными конфигурациями и различными результатами применения одной конфигурации. Например, если в двух разных сетях используется DHCP, то смысла в разных профилях конфигурации нет.<br />
<br />
Для загрузчика LILO секции <tt>/etc/lilo.conf</tt> могут выглядеть следующим образом:<br />
<pre>image=/boot/vmlinuz-up<br />
label=linux-up home<br />
append=" netprofile=home"<br />
[...]<br />
image=/boot/vmlinuz-up<br />
label=linux-up office<br />
append=" netprofile=office"<br />
[...]</pre><br />
Для приведённого примера необходимо будет создать варианты для файлов, отличающихся в профилях home и office, и можно будет выбирать при загрузке, какой из профилей необходимо использовать. Использование этого метода удобно, если смена сетевого окружения происходит синхронно с загрузкой системы.<br />
<br />
==== Выбор профиля по умолчанию ====<br />
Если вы хотите, чтобы какой-то профиль конфигурации использовался по умолчанию, запишите его название в файл <tt>/etc/net/profile</tt>. Этот метод имеет приоритет над параметром ядра netprofile. Использование такого способа выбора профиля целесообразно, когда переключение между конфигурациями происходит реже, чем перезагрузка системы.<br />
<br />
==== Смена профиля во время работы ====<br />
Если вы хотите переконфигурировать сеть без перезагрузки или редактирования файла <tt>/etc/net/profile</tt>, то используйте параметры сервиса network, описанные в разделе ##FTN restartreload##. Этот метод имеет приоритет над профилем по умолчанию и профилем, выбранным при загрузке. Целесообразно его использовать, если смена сетевого окружения происходит чаще, чем перезагрузка системы.<br />
<br />
==== Определение профиля во время конфигурации интерфейса ====<br />
Если в каталоге конфигурации интерфейса существует исполняемый файл ненулевого размера с именем selectprofile, то этот файл будет выполнен и первое слово первой строки его стандартного вывода использовано как имя профиля, которое должно быть использовано для конфигурации данного интерфейса. Этот метод имеет приоритет над всеми остальными методами. Исходной задачей, требующей такого решения, являлось конфигурирование беспроводного интерфейса в зависимости от доступных точек доступа.<br />
<br />
Следует учитывать, что число вызовов файла selectprofile может меняться в зависимости от контекста и время его выполнения может быть различным, поэтому при написании такого файла следует учитывать, что первым параметром будет являться имя текущего сценария. В настоящее время это могут быть ifup*, ifdown*, setup* и shutdown*. Для приведённого выше примера имеет смысл реагировать только на вызовы из ifup или ifup-common.<br />
<br />
<nowiki>## FTN ftnd1##</nowiki><br />
<br />
{|<br />
|<br />
{| class="standard"<br />
|-<br />
!маска<br />в битах!!маска<br />точечно-<br />десятичная<br />
|-<br />
|/32||255.255.255.255<br />
|-<br />
|/31||255.255.255.254<br />
|-<br />
|/30||255.255.255.252<br />
|-<br />
|/29||255.255.255.248<br />
|-<br />
|/28||255.255.255.240<br />
|-<br />
|/27||255.255.255.224<br />
|-<br />
|/26||255.255.255.192<br />
|-<br />
|/25||255.255.255.128<br />
|-<br />
|/24||255.255.255.0<br />
|-<br />
|/23||255.255.254.0<br />
|-<br />
|/22||255.255.252.0<br />
|-<br />
|/21||255.255.248.0<br />
|-<br />
|/20||255.255.240.0<br />
|-<br />
|/19||255.255.224.0<br />
|-<br />
|/18||255.255.192.0<br />
|-<br />
|/17||255.255.128.0<br />
|}<br />
|<br />
| ||<br />
{| class="standard"<br />
|-<br />
!маска<br />в битах!!маска<br />точечно-<br />десятичная<br />
|-<br />
|/16||255.255.0.0<br />
|-<br />
|/15||255.254.0.0<br />
|-<br />
|/14||255.252.0.0<br />
|-<br />
|/13||255.248.0.0<br />
|-<br />
|/12||255.240.0.0<br />
|-<br />
|/11||255.224.0.0<br />
|-<br />
|/10||255.192.0.0<br />
|-<br />
|/9||255.128.0.0<br />
|-<br />
|/8||255.0.0.0<br />
|-<br />
|/7||254.0.0.0<br />
|-<br />
|/6||252.0.0.0<br />
|-<br />
|/5||248.0.0.0<br />
|-<br />
|/4||240.0.0.0<br />
|-<br />
|/3||224.0.0.0<br />
|-<br />
|/2||192.0.0.0<br />
|-<br />
|/1||128.0.0.0<br />
|}<br />
|}<br />
<br />
<nowiki>## FTN ftnd2##</nowiki><br />
<br />
Выдержка из файла ip-cref.ps, который входит в документацию пакета iproute2:<br />
* broadcast ADDRESS<br />
<br />the broadcast address on the interface.<br />
It is possible to use the special symbols '+' and '-' instead of the broadcast address. In this case, <br />
the broadcast address is derived by setting/resetting the host bits of the interface prefix.<br />
NB. Unlike ifconfig, the ip utility does not set any broadcast address unless explicitly requested.<br />
<br />
<br />
{{Category navigation|title=etcnet|category=etcnet|sortkey=*}}</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Etcnet_Firewall&diff=15237Etcnet Firewall2010-07-03T04:57:27Z<p>EvgeniiTerechkov: /* Настройка сетевого экрана в /etc/net */ - косметика</p>
<hr />
<div>[[Category:Admin]]<br />
<br />
== Настройка сетевого экрана в [[etcnet|/etc/net]] ==<br />
Начиная с версии {{pkg|0.7.9}} {{pkg|etcnet}} содержит поддержку управления сетевым экраном ({{term|firewall}}). В данный момент поддерживается {{prg|iptables}}, {{prg|ip6tables}}, {{prg|ipset}} и {{prg|ebtables}}. Реализация основана на группировке таблиц и цепочек в таблицах. Таблицы могут быть только системные, цепочки же, кроме системных, могут быть заданы пользователем. <br />
<br />
=== Системные таблицы и возможные системные цепочки в них ===<br />
{| class="standard"<br />
|-<br />
!Таблица<br />
!Цепочки<br />
|-<br />
|{{term|filter}}<br />
|{{term|INPUT FORWARD OUTPUT}}<br />
|-<br />
|{{term|nat}}<br />
|{{term|PREROUTING OUTPUT POSTROUTING}}<br />
|-<br />
|{{term|mangle}}<br />
|{{term|PREROUTING INPUT FORWARD OUTPUT POSTROUTING}}<br />
|-<br />
|{{term|raw}}<br />
|{{term|PREROUTING OUTPUT}}<br />
|}<br />
<br />
Схема прохождения пакетов<ref>[http://iptables-tutorial.frozentux.net/iptables-tutorial.html Iptables Tutorial]</ref><br />
<br />
[[Изображение:Tables_traverse.jpg]]<br />
<br />
=== Используемые файлы и каталоги ===<br />
{{path|/etc/net/ifaces/default/fw/options}} — файл с настройками сетевого экрана по-умолчанию:<br />
* {{term|FW_TYPE}} — тип сетевого экрана.<br />
*: Здесь можно указать только {{term|iptables}}, другие типы пока не поддерживаются. Обратите внимание на этот параметр, по умолчанию он не указан в файле настроек.<br />
* {{term|IPTABLES_HUMAN_SYNTAX}} — включает или отключает использование поддержки «читабельного» синтаксиса правил для iptables (см. ниже).<br />
*: Значение: {{term|yes}} или {{term|no}}<br />
* {{term|IPTABLES_SYSTEM_CHAINS}} — список системных цепочек в таблицах. Все цепочки, не указанные здесь, будут автоматически создаваться и удаляться.<br />
*: Значение: названия цепочек (все названия чувствительны к регистру!), разделенные пробелом<br />
* {{term|IPTABLES_INPUT_POLICY}} — действие по-умолчанию для пакетов, попадающих в системную цепочку INPUT таблицы filter.<br />
*: Значение: одно из {{term|ACCEPT}}, {{term|DROP}}, {{term|QUEUE}} или {{term|RETURN}}<br />
* {{term|IPTABLES_FORWARD_POLICY}} — действие по-умолчанию для пакетов, попадающих в системную цепочку FORWARD таблицы filter.<br />
*: Значение: одно из {{term|ACCEPT}}, {{term|DROP}}, {{term|QUEUE}} или {{term|RETURN}}<br />
* {{term|IPTABLES_OUTPUT_POLICY}} — действие по-умолчанию для пакетов, попадающих в системную цепочку OUTPUT таблицы filter.<br />
*: Значение: одно из {{term|ACCEPT}}, {{term|DROP}}, {{term|QUEUE}} или {{term|RETURN}}<br />
* {{term|IPTABLES_RULE_EMBEDDING}} — способ добавления нового правила в цепочку.<br />
*: Значение: {{term|APPEND}} или {{term|INSERT}}, что означает добавление в конец списка правил или в начало соответственно.<br />
<br />
{{path|/etc/net/ifaces/default/fw/iptables/filter}}, {{path|/etc/net/ifaces/default/fw/iptables/nat}}, {{path|/etc/net/ifaces/default/fw/iptables/mangle}} — каталоги, соответствующие таблицам iptables. В каталогах создаются файлы, соответствующие необходимым системным или пользовательским цепочкам, в которых уже и прописываются сами правила iptables.<br />
<br />
{{path|/etc/net/ifaces/default/fw/iptables/loadorder}}, {{path|/etc/net/ifaces/default/fw/tablename/loadorder}} — если такой существует и он не пустой, то обработка таблиц и/или цепочек в таблице происходит в том порядке, который указан в файле (по одному значению на строку). Все таблицы и цепочки, которые не указаны, обрабатываться не будут.<br />
{{path|/etc/net/ifaces/default/fw/iptables/modules}} — список модулей ядра, которые необходимо загрузить перед запуском сетевого экрана. При остановке эти модули выгружаются.<br />
{{path|/etc/net/ifaces/default/fw/iptables/syntax}} — описание замен при использовании «читабельного» синтаксиса правил iptables<br />
<br />
=== Алгоритм работы сетевого экрана ===<br />
# При запуске службы {{prg|network}}, виртуальный интерфейс {{term|default}}:<br />
## Если опция {{term|CONFIG_FW}} (в файле {{path|/etc/net/ifaces/default/options}}) не установлена в {{term|yes}}, то ничего не делает и происходит выход из процедуры запуска сетевого экрана; иначе переходим к следующему пункту<br />
## Считывается файл настроек {{path|/etc/net/ifaces/default/fw/iptables/options}}<br />
## До настройки любого интерфейса и обработки значений {{term|sysctl}} устанавливаются действия по умолчанию ({{term|policy}}) для системных цепочек таблицы {{term|filter}}<br />
## Считывается файл со списком модулей ядра {{path|/etc/net/ifaces/default/fw/iptables/modules}} и все указанные там модули (по одному на строку) загружаются; при отсутствии файла никакие модули не загружаются<br />
## Создаются все пользовательские цепочки во всех таблицах (пользовательскими считаются все цепочки, не указанные в переменной {{term|IPTABLES_SYSTEM_CHAINS}})<br />
## Считывается файл {{path|/etc/net/ifaces/default/fw/iptables/loadorder}} и в указанном в нем порядке происходит обработка таблиц {{term|iptables}}; при отсутствии файла обработка происходит в соответствии с сортировкой названий таблиц по имени<br />
## Считывается файл {{path|/etc/net/ifaces/default/fw/iptables/tablename/loadorder}} в каждой обрабатываемой таблице и происходит обработка и загрузка правил для каждой цепочки в порядке, указанном в файле; при отсутствии файла обработка опять же происходит в соответствии с сортировкой по имени<br />
## Если опция {{term|IPTABLES_HUMAN_SYNTAX}} установлена в {{term|yes}}, то считывается и обрабатывается файл с «синтаксисом» {{path|/etc/net/ifaces/default/fw/iptables/syntax}}<br />
## Файл с правилами обрабатывает построчно (одно правило на строку); если указана опция {{term|IPTABLES_HUMAN_SYNTAX}}, то правило обрабатывается интерпретатором в соответствии с синтаксисом и превращается в реальные опции для команды {{prg|iptables}}, после чего запускается {{prg|iptables}} с этими параметрами; иначе правило без обработки передается {{prg|iptables}}<br />
# При «поднятии» любого интерфейса, кроме {{term|default}}:<br />
## Выполняются все подпункты пунка 1, только все файлы и каталоги ищутся в каталоге текущего интерфейса<br />
# При «опускании» любого интерфейса, кроме {{term|default}}:<br />
## Все подпункты пункта 1 выполняются в обратном порядке, все правила удаляются из цепочек в обратном порядке, все модули ядра выгружаются в обратном порядке; все файлы и каталоги ищутся в каталоге текущего интерфейса<br />
# При остановке службы {{prg|network}}, виртуальный интерфейс {{term|default}}:<br />
## Все подпункты пункта 1 выполняются в обратном порядке, все правила из всех цепочек удаляются командой {{cmd|iptables -F}}, все модули выгружаются в обратном порядке, все пользовательские цепочки удаляются<br />
## Действия по умолчанию ({{term|policy}}) для системных цепочек устанавливается в {{term|ACCEPT}}<br />
<br />
=== Примечания ===<br />
* Правила для {{prg|iptables}} можно писать с помощью синтаксиса, подобного синтаксису {{prg|ipfw}} и других. Сделано это с помощью простой замены слов на опции {{prg|iptables}}. Сами замены описаны в файле {{path|/etc/net/ifaces/default/fw/iptables/syntax}} (там также описано некоторое количество вспомогательных слов, так что правила можно писать практически на литературном английском :). Синтаксис правила можно совмещать (то есть использовать и заданный в {{pkg|etcnet}} синтаксис и реальные опции команды {{prg|iptables}})<br />
* Во всех правилах ''нельзя'' использовать названия цепочки и/или таблицы; они будут добавляться автоматически<br />
* В правилах можно использовать любые переменные окружения, выполнять любые команды {{prg|shell}} (они должны быть указаны в одну строку). Переменная {{term|$NAME}} содержит имя текущего интерфейса. Переменные {{term|$IPV4ADDRESS}} и {{term|$IPV6ADDRESS}} содержат массив {{term|IPV4/IPV6}} адресов текущего интерфейса (это обычные bash arrays, можно обращаться к ним по индексу: {{term|${IPV4ADDRESS[2]} }}или просто {{term|$IPV4ADDRESS}} для первого значения). Для удобства можно использовать файлы {{path|options}}, в которых прописывать какие-либо переменные, к примеру, адреса gateway, ISP, сетей и т. д.<br />
* Во всех файлах можно использовать комментарии (строка должна начинаться с символа {{term|#}})<br />
* Вам не нужно копировать все файлы настроек в каталог каждого интерфейса. Сначала будут считаны настройки виртуального интерфейса {{term|default}}, а уже потом у текущего интерфейса, соответственно, можно переопределять какие-то параметры для определенного интерфейса<br />
* Описания всех правил в настройках виртуального интерфейса {{term|default}} достаточно для поднятия простого сетевого экрана. При наличии же большого количества правил и интерфейсов есть смысл разделить логически все правила по каждому интерфейсу (опять же, не будет нагружаться процессор вхолостую, если интерфейс, к которому относится много правил, сейчас не «поднят»)<br />
* В начале каждого правила можно указать, что с этим правилом делать. Может быть одно из трёх значений:<br />
** {{term|-A}} — добавление в конец списка правил (при включенном «читабельном» синтаксисе соответствует команде {{term|append}})<br />
** {{term|-I [num]}} — добавление в начало списка правил; если указан необязательный параметр {{term|num}}, то правило будет вставлено в строку правил с таким номером (будьте внимательны, {{prg|iptables}} считает несуществующий номер строки ошибкой и не добавляет правило); (при включенном «читабельном» синтаксисе соответствует команде {{term|insert [num]}})<br />
** {{term|-D}} — удаление правила из списка правил (соответственно, при «остановке» интерфейса правило наоборот будет добавлено); (при включенном «читабельном» синтаксисе соответствует команде {{term|delete}})<br />
* Если никакое действие не указано, то правило добавляются в цепочку в соответствии со значением переменной {{term|IPTABLES_RULE_EMBEDDING}}<br />
* Если вы изменяете какое-то правило в конфигурационных файлах при уже загруженных правилах {{prg|iptables}}, то для того, чтобы в памяти не остались старые правила, необходимо или выгрузить все правила для текущего интерфейса (если вы настраиваете для конкретного интерфейса, а не {{term|default}}) перед изменением файлов или после изменения использовать команду {{cmd|efw default restart}} (она полностью удалит все правила; однако пользовательские цепочки других интерфейсов не будут затронуты) и далее загрузить заново правила для нужного или всех интерфейсов.<br />
<br />
=== Примеры ===<br />
{{path|/etc/net/ifaces/eth0/fw/options}}<br />
<pre># Our WAN IP address<br />
WAN_IP=5.6.7.8/24<br />
# First net<br />
NET1=1.2.3.0/24<br />
# Second net<br />
NET2=4.3.2.0/24<br />
# Friend net<br />
FRIEND_NET=5.6.7.0/24</pre><br />
{{path|/etc/net/ifaces/eth0/fw/iptables/filter/INPUT}}<br />
<pre>accept all from any to $IPV4ADDRESS<br />
jump-to COUNT-CHAIN if marked as 0x11</pre><br />
{{path|/etc/net/ifaces/eth0/fw/iptables/filter/FORWARD}}<br />
<pre>jump-to FRIEND-NET if from $FRIEND-NET<br />
append drop tcp from net $NET1 to net NET2<br />
delete drop udp from $NET1 to $NET2<br />
insert reject udp to $WAN_IP<br />
drop icmp to $(somescript.sh)</pre><br />
{{path|/etc/net/ifaces/eth0/fw/iptables/filter/FRIEND-NET}}<br />
<pre>policy reject</pre><br />
{{path|/etc/net/ifaces/eth0/fw/iptables/mangle/PREROUTING}}<br />
<pre>insert 15 mark tcp as 0x10 if from-iface $NAME and dport is 22<br />
mark tcp as 0x11 if from net $NET1 and from-iface $NAME</pre><br />
{{path|/etc/net/ifaces/eth0/fw/iptables/nat/POSTROUTING}}<br />
<pre>snat-to $WAN_IP if marked as 0x10</pre><br />
<br />
=== Утилиты ===<br />
* В {{pkg|contrib}} находятся следующие вспомогательные утилиты:<br />
** Скрипт {{prg|efw}}, который предназначен для ручного управления сетевым экраном и умеет следующее:<br />
<pre>Usage: ./efw [iface] [table] [chain] <action> [iptables rule or action options]<br />
<br />
iface - 'default' (by default), real interface name or 'all' for all interfaces<br />
table - 'mangle', 'filter' (by default), 'nat' or 'all' for all tables<br />
chain - system or user defined chain name (case sensitive!) or 'all' for all chains<br />
action - 'start','stop','restart','load','unload','reload','flush','show|list','count|counters',<br />
'rule','new|create','remove|delete','zero','policy','rename'<br />
start - process all tables and chains for given interface (even when chain or table is defined)<br />
stop - process all tables and chains for given interface (even when chain or table is defined)<br />
restart - equivalent to stop then start<br />
load - load rules for given interface, table and chain<br />
unload - unload rules for given interface, table and chain<br />
reload - equivalent to unload then load<br />
flush - flush rules for given interface, table and chain<br />
show - list rules for given interface, table and chain<br />
list - same as show<br />
count - show counters for given table and chains<br />
counters - same as count<br />
rule - parse rule and pass it to iptables<br />
new - create new chain<br />
create - same as new<br />
remove - remove chain<br />
delete - same as remove<br />
zero - zero packet and byte counters in chain<br />
policy - set default policy for chain<br />
rename - rename chain<br />
<br />
Options for action 'show' or 'list':<br />
-n or numeric - numeric output for IP addresses, ports and services<br />
-v or verbose - verbose output of rules<br />
-x or exact - expand numbers instead of rounded numbers<br />
--line-numbers or lines - display line number for each rule</pre><br />
:: На текущий момент он умеет частично угадывать интерфейс, таблицу и цепочку (если их не передали в командной строке) и все действия, кроме {{term|counters}}. Так же поддерживается маска {{term|all}} для интерфейсов, таблиц и цепочек.<br />
<br />
=== Примеры команд ===<br />
<br />
* Выгрузить (''flush'') все правила из всех цепочек всех таблиц, удалить цепочки, заданные пользователем, выгрузить все загруженные модули:<br />
*: {{cmd|efw default stop}}<br />
* Выгрузить (путем удаления каждого правила в обратном порядке) все правила из цепочки {{term|FORWARD}} таблицы {{term|filter}} для интерфейса {{term|eth0}}:<br />
*: {{cmd|efw eth0 unload}}<br />
* Загрузить все правила для всех цепочек во всех таблицах всех интерфейсов:<br />
*: {{cmd|efw all all all load}}<br />
* Обработать правило и добавить его во все цепочки таблицы {{term|filter}}:<br />
*: {{cmd|efw default filter all rule accept all from any}}<br />
* Если вы изменяете какое-то правило в конфигурационных файлах при уже загруженных правилах {{term|iptables}}, то для того, чтобы в памяти не остались старые правила, необходимо или выгрузить все правила для текущего интерфейса (если вы настраиваете для конкретного интерфейса, а не {{term|default}}) перед изменением файлов или после изменения использовать команду {{cmd|efw default restart}} (она полностью удалит ''все'' правила; однако пользовательские цепочки других интерфейсов не будут затронуты) и далее загрузить заново правила для нужного или всех интерфейсов. Таким образом, наиболее используемой командой при изменении конфигурации сетевого экрана является:<br />
: {{cmd|efw default stop ; efw all start}}<br />
<br />
=== Прочее ===<br />
[http://fly.osdn.org.ua/~mike/works/misc/iptables2etcnet/ Конвертор правил], точнее, дампа {{prg|iptables-save}} (альфа! и требует {{pkg|ruby}}) в соответствующее расположение правил в {{pkg|etcnet}}<br />
<br />
----<br />
Весь этот текст относится к версии {{pkg|etcnet >{{=}} 0.8.5}}<br />
<br />
== Ссылки ==<br />
<br />
<references/><br />
<br />
<br />
{{Category navigation|title=etcnet|category=etcnet}}</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=VPN_(PPTP_PPPoE)&diff=14459VPN (PPTP PPPoE)2010-05-06T09:47:39Z<p>EvgeniiTerechkov: добавил описание хранения паролей в одном месте</p>
<hr />
<div>[[Категория:Admin]]<br />
{{викифицировать}}<br />
<br />
== Настройка VPN-соединения (PPtP и PPPOE) ==<br />
<br />
<div style="display: inline; color: red;">NB: ошибка в ALT Linux Server 4.0.0/4.0.1, ALT Linux Desktop 4.0.0/4.0.1/4.0.2: [http://faq.altlinux.ru/index.php?action=single&nf=1&qid=950 FAQ#950]</div><br />
<br />
Данное руководство подразумевает использование [[etcnet|etcnet]]. etcnet используется по умолчанию во всех дистрибутивах ALT Linux, начиная с версии 3.0. Для настройки «по-дубовому» см. раздел в конце документа.<br />
<br />
=== PPtP ===<br />
<br />
Необходимые пакеты: '''ppp'''.<br />
<br />
Рассматривается настройка VPN-соединения (pptp), совместимого с клиентами Windows.<br />
Для начала рекомендуется читать документацию в /usr/share/doc/pptp* (на русском).<br />
<br />
Создаем каталог /etc/net/ifaces/pppXX (где XX — любой свободный номер интерфейса). Пишем туда следующие файлы:<br />
<br />
/etc/net/ifaces/pppXX/options:<br />
<pre>ONBOOT=yes<br />
PPPTYPE=pptp<br />
PPTP_SERVER=10.0.0.1<br />
REQUIRES=eth0</pre><br />
''Пояснение:'' в параметр REQUIRES записывается имя того интерфейса, через который осуществляется доступ к PPTP (VPN) серверу. Наличие этого параметра гарантирует правильный порядок старта интерфейсов. Здесь и далее предполагается, что имя этого интерфейса eth0.<br />
/etc/net/ifaces/pppXX/pppoptions:<br />
<pre>name ВАШ_ЛОГИН<br />
password SUPER_SECRET_PASSWORD<br />
noipdefault<br />
defaultroute<br />
noauth<br />
hide-password<br />
persist</pre><br />
<br />
(вместо <tt>user/password</tt> можно вписать параметр <tt>name</tt>, по аргументу которого будет производится поиск в первой колонке /etc/ppp/{pap,chap}-secrets)<br />
<br />
Также рекомендуется в /etc/net/ifaces/eth0/ipv4route добавить отдельную строку для маршрута к VPN-серверу:<br />
<br />
<pre>default via 10.0.66.1<br />
10.0.0.1/32 via 10.0.66.1</pre><br />
''Пояснение:'' первая строка — маршрут (в локальную сеть) по умолчанию для интерфейса eth0. Вторая строчка это указание статического маршрута до одного конкретного сервера (того самого сервера PPTP). Если его не указать (частая ошибка в настройках PPTP), то после присоединения к PPTP-серверу маршрут по умолчанию изменится, и сам сервер станет недоступен. Симптомы такой неправильной настройки: соединение устанавливается, но ничего не работает, и соединение почти сразу разрывается.<br />
<br />
Для ручной остановки PPTP-соединения следует (от root) использовать команду '''ifdown pppXX''', где вместо ''pppXX'' следует писать имя вашего PPTP-интерфейса. Для ручного запуска используйте команду '''ifup pppXX'''.<br />
<br />
=== PPPOE ===<br />
<br />
Необходимые пакеты: '''rp-pppoe-base'''.<br />
<br />
Сначала настраиваем /etc/net/ifaces/eth0. Для этого удаляем из этого каталога всё кроме options. В options оставляем строчки<br />
<br />
<pre><br />
BOOTPROTO=static<br />
MODULE=<имя_модуля_сетевой карточки><br />
</pre><br />
<br />
После создаём в /etc/net/ifaces/ppp0 файлы:<br />
<br />
options:<br />
<pre><br />
ONBOOT=yes<br />
PPPTYPE=pppoe<br />
HOST=eth0<br />
PPPOE_EXTRA_OPTIONS="-T 80"<br />
</pre><br />
<br />
pppoptions:<br />
<pre><br />
noipdefault<br />
noauth<br />
default-asyncmap<br />
defaultroute<br />
hide-password<br />
mtu 1492<br />
mru 1492<br />
noaccomp<br />
noccp<br />
nobsdcomp<br />
nodeflate<br />
nopcomp<br />
novj<br />
novjccomp<br />
user ВАШ_ЛОГИН<br />
password ВАШ_ПАРОЛЬ<br />
lcp-echo-interval 20<br />
lcp-echo-failure 3<br />
persist<br />
</pre><br />
<br />
(вместо <tt>user/password</tt> можно вписать параметр <tt>name</tt>, по аргументу которого будет производится поиск в первой колонке /etc/ppp/{pap,chap}-secrets)<br />
<br />
<br />
Проверяем что все работает<br />
# service network restart<br />
и… всё. Теперь при загрузке в процессе запуска сервиса network будет создаваться и подниматься pppoe соединение.<br />
<br />
=== Ручная настройка (без etcnet) ===<br />
<br />
==== PPtP ====<br />
<br />
Кратко: устанавливаем пакет pptp-client, запускаем pptp-config и настраиваем. На всякий случай укажите данные для авторизации как PAP, так и CHAP.<br />
В /etc/sysconfig/pptp нужно указать название соединения (придуманное при pptp-config):<br />
<pre># Tunnel name<br />
PPTP_TUNNEL=НАЗВАНИЕ_ТУННЕЛЯ</pre><br />
<br />
Данные о соединении запишутся в /etc/ppp/peers/название_соединения:<br />
<pre>debug<br />
<br />
pty "/usr/sbin/pptp 192.168.0.254 --nolaunchpppd"<br />
connect /bin/true<br />
defaultroute<br />
<br />
# <br />
# Tags for CHAP secret selection<br />
#<br />
name ВАШ_ЛОГИН<br />
remotename PPTP<br />
<br />
#<br />
# Tunnel name for ip-up.local or ip-up.d scripts<br />
#<br />
ipparam НАЗВАНИЕ_ТУННЕЛЯ<br />
<br />
file /etc/ppp/options.pptp</pre><br />
а также в файлы /etc/ppp/pap-secrect и /etc/ppp/chap-secret<br />
<br />
Далее делаем service pptptunnel start<br />
Если интерфейс ppp0 появляется, а обмена нет, попробуйте отключить сжатие: в /etc/ppp/options.pptp дописать nodeflate.<br />
<br />
Если вы задали GATEWAY в /etc/sysconfig/network, то при подключении через VPN он не будет переопределяться, соответственно работать Инет не будет. Поэтому GATEWAY надо отключить, а в /etc/sysconfig/static-routes указать статические маршруты для локальной сети:<br />
<pre>any net 192.168.2.0/24 gw 192.168.2.246</pre><br />
<br />
==== PPPOE ====<br />
<br />
Необходимые пакеты: '''rp-pppoe-client'''.<br />
<br />
Указываем настройки в /etc/ppp/pppoe.conf:<br />
<pre>ETH=eth0 #сетевой интерфейс<br />
USER=логин<br />
DNSTYPE=SERVER<br />
ACNAME=internet</pre><br />
Указать в /etc/ppp/chap-secret (и быть может в /etc/ppp/pap-secret) свой логин/пароль и<br />
# service adsl start<br />
для подключения.</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Community&diff=14359Community2010-04-25T14:17:28Z<p>EvgeniiTerechkov: /* Красноярск */ - поправил адрес</p>
<hr />
<div>'''География сообщества ALT Linux'''<br />
<br />
Здесь предполагается составить приблизительную географическую карту сосредоточенности пользователей [[Main Page|ALT Linux]].<br />
Для более плодотворной работы, учёбы, развлечений, связанных с Линуксом, и, в частности, с ALT (Попить пива/кока-колы, обсудить новую сборку xmms, поделиться опытом и т. д.)<br />
<br />
'''Внимание:'''<br />
* Города отсортированы в алфавитном порядке. Страны — по количеству участников.<br />
* mike@ предлагает записывать e-mail'ы как <tt>(login / host.dom)</tt><br />
* ruslandh@ предлагает сортировать записи внутри городов по фамилиям<br />
<br />
== Россия ==<br />
<br />
=== Архангельск ===<br />
* [http://freesource.info/wiki//IgorAndrosov Игорь Андросов] (blacester / gmail.com)<br />
<br />
=== Балабаново ===<br />
* Антон Фарыгин (rider / altlinux)<br />
* Сергей Турчин (zerg / altlinux)<br />
<br />
=== Владимир ===<br />
* Александр Волков (vaa / altlinux.ru)<br />
<br />
=== Волгодонск ===<br />
* Павел Шурубура (pvs / vdnet.ru)<br />
<br />
=== Выборг ===<br />
* Гульванюк Алексей (trash4 / yandex.ru)<br />
<br />
=== Екатеринбург ===<br />
* Алексей Карпов (aakarpov / gmail.com)<br />
* Андрей Коновалов (krapa666 / gmail.com)<br />
* Илья «Ilis» Кругликов (ilis.krou / gmail.com)<br />
* Денис Огневский (emp / rus-com.org)<br />
* Андрей Рахматуллин (wrar / altlinux.ru)<br />
* Павел Соловьёв (2182 / r66.ru)<br />
<br />
=== Иркутск ===<br />
* Валерий Пипин (Valery_Pipin at damtp_cam_ac_uk или pip_iszf_irk_ru)<br />
<br />
=== Казань ===<br />
* Marat Khayrullin (xmm / rambler.ru)<br />
* Тимур Батыршин (erthad / gmail.com)<br />
<br />
=== Калининград ===<br />
* Артём Золочевский (azol / altlinux.ru)<br />
* Ирина Самойленко (irishka.sam / gmail.com)<br />
* Павел Малеев (pavel_rolland / mail.ru)<br />
<br />
=== Камчатка ===<br />
* Алексей Боровской (alb / altlinux.ru)<br />
<br />
=== Королёв ===<br />
* Артём Лукьянов (seractus / gmail.com)<br />
<br />
=== Красноярск ===<br />
* Евгений Терешков (evg / altlinux.org)<br />
* Элья Гревнев (gray_graff / inbox.ru)<br />
<br />
=== Москва ===<br />
* [http://freesource.info/wiki//VadimGusev Вадим «henker» Гусев] (kopilo4ka / gmail.com)<br />
* Александр Злобин (alexander.zlobin / gmail.com)<br />
* Михаил Кангин (mak / rsmu.ru)<br />
* Артем Пастухов (artem.pastukhov / gmail.com)<br />
* Алексей Русаков (ktirf / altlinux.org)<br />
* Алексей Сидоров (alex / reutman.ru)<br />
* Денис Смирнов (mithraen / altlinux.ru)<br />
* Хихин Руслан (Ruslandh / oszone.net)<br />
* Николай Фетисов (naf / altlinux.ru)<br />
* Дамир Шайхутдинов (damir / altlinux.org)<br />
* Андрей Черепанов (cas / altlinux.org)<br />
* [http://freesource.info/wiki//RavilGatin Равиль Гатин] (sh0ckfile / gmail.com)<br />
* Денис Медведев (nbr /altlinux.org)<br />
<br />
=== Мурманск ===<br />
* Александров Александр (ABATAPA / yandex.ru)<br />
<br />
=== Нижний Новгород ===<br />
* Dmitriy Khanzhin (dimajin / mail.ru)<br />
<br />
=== Новосибирск ===<br />
* [http://freesource.info/wiki//PhpCoder Слава Семушин aka php-coder] (php-coder / altlinux.ru)<br />
<br />
=== Оренбург ===<br />
* Александр Клименков<br />
<br />
=== Пенза ===<br />
* Anton Gorlov (gorlov.a / gmail.com)<br />
<br />
=== Ростов-на-Дону ===<br />
* Eugene Prokopiev (eugene.prokopiev / gmail.com)<br />
* Григорий Можаев (zcrendel / altlinux.ru)<br />
* Сергей Сукиязов (corwin / altlinux.ru)<br />
<br />
=== Саратов ===<br />
* Vadim Peskov (sunofvault / gmail.com)<br />
* Евгений В. Хорохорин (genix / list.ru)<br />
* Алексей Синицын (a.sinitsin / gmail.com)<br />
* Алексей Романов (finikru / mail.ru)<br />
* Евгений Сучков (eugene.suchkov / gmail.com)<br />
* Евгений Синельников (sin / altlinux.ru / info.sgu.ru)<br />
* Сергей В. Кудрявцев (kudryavtsevsv / info.sgu.ru)<br />
* Алексей Хомченко (keepas / mail.ru)<br />
<br />
=== Санкт-Петербург ===<br />
* Vitaly Lipatov (lav / altlinux.ru)<br />
* Кирилл Маслинский (kirill / altlinux.ru)<br />
<br />
=== Североуральск ===<br />
* Максим Яновский (coolmax / gmail.com)<br />
<br />
=== Сыктывкар ===<br />
* Афанасов Дмитрий (ender / atrus.ru)<br />
<br />
=== Таганрог ===<br />
* Москаленко Александр (moskalenko_ai / meradom.ru)<br />
* Тарала Иван (tarala / yandex.ru)<br />
<br />
=== Тольятти ===<br />
* Лебедев Александр (alebedev7 / gmail.com)<br />
<br />
=== Томск ===<br />
* Куликов Глеб (gleb / asd.iao. ru)<br />
* Перевалов Вячеслав (vip[ноль] / seversk.ru)<br />
* Чичак Андрей (chch / s-plus.in)<br />
<br />
=== Тюмень ===<br />
* Андрей Кутузов (tyumenkender / gmail.com)<br />
* Владимир Камарзин (vvk / vvk.pp.ru, vvk / altlinux.org)<br />
* Евгений Власов (eugvv / altlinux.ru, eugene / tmnsc.ru)<br />
* Денис Климов (zver / altlinux.org)<br />
<br />
=== Новый Уренгой ===<br />
* Акулов Захар (hozzzar / mail.ru)<br />
<br />
=== Уфа ===<br />
* Михайленко Константин (const / altlinux.ru)<br />
<br />
=== Южно-Сахалинск ===<br />
* Dmitry Lebkov (dima / sakhalin.ru)<br />
<br />
== Украина ==<br />
<br />
=== Берислав ===<br />
* Motsyo Gennadi (drool / altlinux.ru)<br />
<br />
=== Днепропетровск ===<br />
* Андрей Корнилов (hiddenman / altlinux.org)<br />
* Павел Тимощенков (timoschenkov / gmail.com)<br />
* Евгений Шевченко (Yvgen / altlinux.org)<br />
<br />
=== Донецк ===<br />
* Igor Zubkov (icesik / altlinux.org)<br />
* Andrei Bulava (abulava / altlinux.org)<br />
<br />
=== Киев ===<br />
* Jose (vadim.adm / gmail.com)<br />
* Michael Shigorin (mike / altlinux.org)<br />
* Led (led / altlinux.org)<br />
* Евгений Косенко (eugine.kosenko / gmail.com)<br />
* Andrii Dobrovol`s`kii (andob /ukr.net)<br />
* Vlasenko Igor (viy /altlinux.org)<br />
* Pavel Solntsev (p_solntsev / altlinux.org)<br />
<br />
=== Лубны ===<br />
* Jurij Bogaevskiy (samuray / oboz.com.ua)<br />
<br />
=== Луганск ===<br />
* Stanislav Yadykin (tosick / altlinux.ru)<br />
<br />
=== Львов ===<br />
* Грутман Алексей (axe79 / mail.ru)<br />
<br />
=== Одесса ===<br />
* Dmitriy Spodarets (m31 / root-ua.com)<br />
<br />
=== Полтава ===<br />
* Dmitriy Kruglikov ([[Участник:DmitriyKruglikov|Dmitriy.Kruglikov]] / gmail.com)<br />
<br />
=== Ровно ===<br />
* Maxim Tyurin (mrkooll / altlinux.ru)<br />
<br />
=== Севастополь ===<br />
* Alexander Yereschenko (ave4600 / mail.ru)<br />
<br />
=== Стаханов ===<br />
* [http://freesource.info/wiki//SergeyBalbeko Sergey Balbeko] (balbeko / altlinux.org)<br />
<br />
=== Чаплинка ===<br />
* Кулик Дмитрий (lnkvisitor.ts / gmail.com)<br />
<br />
=== Харьков ===<br />
* Журавлёв Александр (goblin / altlinux.org)<br />
<br />
== Беларусь ==<br />
<br />
=== Гомель ===<br />
* Кудрявцев Сергей (olvin / rambler.ru) <br />
* Юрковский Андрей (anyr / tut.by)<br />
<br />
=== Минск ===<br />
* Свиридов Святослав (svd / altlinux.org)<br />
* Шутемов Кирилл (kas / altlinux.org)<br />
* Стибло Глеб (ulfr / altlinux.org)<br />
<br />
=== Могилёв ===<br />
* Клепча Андрей (andrew.klepcha / gmail.com)<br />
<br />
=== Молодечно ===<br />
* Чернецкий Андрей (andy_ch / open.by) <br />
<br />
== США ==<br />
<br />
=== Бостон ===<br />
* Иван Аджубей (iadzhubey / rics.bwh.harvard.edu)<br />
<br />
=== Балтимор ===<br />
* Сергей Иванов (seriv / altlinux.org)<br />
<br />
== Казахстан ==<br />
<br />
=== Арысь ===<br />
* Лев Трубач (trubachlev / mail.ru)<br />
<br />
== Ссылки ==<br />
* [http://www.altlinux.org.ua/?id=197&L=1 altlinux.org.ua guestbook]<br />
* [http://www.frappr.com/altlinux Frappr map]<br />
* [http://linuxfest.ru/ LinuxFest] — там, где многие знакомятся персонально<br />
* [http://conference.osdn.org.ua Конференция] в Киеве<br />
<br />
[[Категория:ALT Linux]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Git.alt/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA&diff=13976Git.alt/Справочник2010-03-25T11:24:07Z<p>EvgeniiTerechkov: Описал --test-only</p>
<hr />
<div>{{DISPLAYTITLE:git.alt/Справочник}}<br />
Эта страница документирует команды [[git.alt]], но не является [[Краткое руководство пользователя git.alt|кратким руководством]] или учебником по нему.<br />
<br />
__TOC__<br />
<br />
== Как воспользоваться <tt>git.alt</tt>? ==<br />
<br />
<tt>git.alt</tt> предоставляет несколько видов доступа:<br />
<br />
* ssh-доступ. Предоставляет несколько команд: для поиска репозиториев, их клонирования, создания, удаления, а также служебных.<br />
* <tt>ssh</tt>-, <tt>git</tt>-, <tt>rsync</tt>-, <tt>http</tt>-доступ для непосредственной работы с репозиториями.<br />
*: <tt>git</tt>-, <tt>rsync</tt>- и <tt>http</tt>-адреса предоставляют r/o доступ, <tt>ssh</tt> — r/w.<br />
* Web-интерфейс. Находится по адресу [http://git.altlinux.org/ git.altlinux.org], предоставляет навигацию по списку репозиториев и <tt>gitweb</tt> для индивидуальных репозиториев.<br />
<br />
ssh-доступ к <tt>git.alt</tt> выдаётся после [[Join|принятия]] в ALT Linux Team.<br />
<br />
<div id="access"></div><br />
== SSH-доступ ==<br />
<br />
<tt>git.alt</tt> доступен по SSH по адресу <tt>git.altlinux.org:222</tt>. Аккаунт для доступа — <tt>git_$USERNAME</tt>, где USERNAME — имя, присвоенное в процессе принятия в Team, с символами «-» заменёнными на «_».<br />
<br />
Пример <tt>~/.ssh/config</tt>:<br />
Host git.alt<br />
HostName git.altlinux.org<br />
Port 222<br />
User git_USERNAME<br />
<br />
Для работы [[fsi:SSHFirewall|через прокси]] и в других сложных условиях SSH также доступен по адресу <tt>git.altlinux.org:443</tt>.<br />
<br />
Для работы с <tt>git.alt</tt> необходимо настроить свой <tt>git</tt> — параметры <tt>user.name</tt>, <tt>user.email</tt>, <tt>user.signingkey</tt>:<br />
$ git config --global user.signingkey "<ID ключа GPG для подписи тэгов>"<br />
$ git config --global user.email "<ваш email, как мантейнера>"<br />
$ git config --global user.name "FirstName LastName"<br />
Например,<br />
$ git config --global user.signingkey 0xA26F54C8<br />
$ git config --global user.email dottedmag@altlinux.org<br />
$ git config --global user.name "Mikhail Gusarov"<br />
<br />
Список команд выдаётся при ssh-логине с командой <tt>help</tt>:<br />
<br />
$ ssh git.alt help<br />
Available commands:<br />
help<br />
git-receive-pack <directory><br />
git-upload-pack <directory><br />
charset <path to git repository> [<charset>]<br />
clone <path to git repository> [<path to directory>]<br />
find-package <pattern><br />
init-db <path to directory><br />
ls [<path to directory>]<br />
mv-db <path to source directory> <path to destination directory><br />
quota<br />
rm-db <path to git repository><br />
task {list|new|show|drop|add|run} ...<br />
build <path to gear repository> <tag name> [<binary package repository name>] [<project name>]<br />
acl {--help|<binary package repository name> ...}<br />
$<br />
<br />
Во всех командах суффикс директорий репозиториев <tt>.git</tt> опционален и может быть опущен. В выводе команд <tt>.git</tt> присутствует всегда.<br />
<br />
<!-- please don't remove -- there are links to #git etc --><br />
<div id="git"></div><br />
=== Управление git-репозиториями ===<br />
<br />
==== ls ====<br />
<br />
'''$ ssh git.alt ls [<directory>]'''<br />
<br />
Эта команда позволяет посмотреть содержимое различных директорий на <tt>git.alt</tt>:<br />
<br />
$ ssh git.alt ls /people/dottedmag/public<br />
total 24<br />
drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git<br />
...<br />
drwxr-sr-x 5 4096 Jul 7 18:03 wackoconvert.git<br />
$<br />
<br />
Без параметров — показывает содержимое <tt>/people/$USERNAME</tt>:<br />
<br />
$ ssh git.alt ls<br />
total 16<br />
drwxr-s--- 5 4096 May 30 21:27 etc<br />
drwxr-sr-x 14 4096 Aug 13 23:53 packages<br />
drwxr-s--x 2 4096 Feb 13 2007 private<br />
drwxr-sr-x 8 4096 Aug 13 23:57 public<br />
$<br />
<br />
От этой же директории отсчитываются относительные пути:<br />
<br />
$ ssh git.alt ls public<br />
total 24<br />
drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git<br />
...<br />
drwxr-sr-x 5 4096 Jul 7 18:03 wackoconvert.git<br />
$<br />
<br />
==== find-package ====<br />
<br />
'''$ ssh git.alt find-package <pattern>'''<br />
<br />
Эта команда позволяет искать репозитории по переданному шаблону. Единственный метасимвол, допустимый в шаблоне — <tt>*</tt>. Репозитории ищутся в директории <tt>packages</tt> каждого пользователя, поскольку предполагается, что <tt>[[gear]]</tt>-репозитории располагаются именно там.<br />
<br />
$ ssh git.alt find-package glibc*<br />
/people/avm/packages/glibc.git 1216320095<br />
...<br />
/people/peet/packages/glibc-kernheaders.git 1177084354<br />
/people/mike/packages/glibc-kvercheck.git 1160664813<br />
$ ssh git.alt find-package glibc<br />
/people/avm/packages/glibc.git 1216320095<br />
...<br />
/people/peet/packages/glibc.git 1177084600<br />
$<br />
<br />
Вторая колонка в выводе <tt>find-package</tt> — unixtime времени последнего обновления репозитория. Получить время в привычном представлении можно с помощью команды <tt>date -d @unixtime</tt>.<br />
<br />
==== clone ====<br />
<br />
'''$ ssh git.alt clone <path to git repository> [<destination directory>]'''<br />
<br />
Эта команда позволяет «склонировать», то есть создать в своей директории копию репозитория для начала работы над ним. При этом локальные клоны (из /people) задействуют хардлинки, экономя дисковое пространство, а также ваши квоту на git.alt и трафик до него.<br />
<br />
Без второго аргумента — клонирует в директорию <tt>packages</tt>:<br />
<br />
$ ssh git.alt clone /people/ldv/packages/glibc.git<br />
Initialized empty Git repository in /people/dottedmag/packages/glibc.git/<br />
$<br />
<br />
Вторым аргументом можно указать как директорию, в которую нужно поместить клон репозитория, так и название репозитория:<br />
<br />
$ ssh git.alt clone /people/ldv/glibc.git public<br />
Initialized empty Git repository in /people/dottedmag/public/glibc.git/<br />
$ ssh git.alt clone /people/ldv/glibc.git public/test<br />
Initialized empty Git repository in /people/dottedmag/public/test.git/<br />
$<br />
<br />
Можно также склонировать репозиторий, находящийся вне <tt>git.alt</tt>:<br />
<br />
$ ssh git.alt clone <nowiki>http://github.com/dottedmag/madshelf.git</nowiki> public<br />
Initialized empty Git repository in /people/dottedmag/packages/public.git/<br />
Getting alternates list for <nowiki>http://github.com/dottedmag/madshelf.git</nowiki><br />
...<br />
walk 03d18e21d85fa30fc3ac8d921eb391e2a7bb242a<br />
$<br />
<br />
==== init-db ====<br />
<br />
'''$ ssh git.alt init-db <path to directory>'''<br />
Позволяет создать новый git-репозиторий. По умолчанию репозиторий создаётся в директории <tt>packages</tt>:<br />
$ ssh git.alt init-db test<br />
Initialized empty Git repository in ./<br />
girar-init-db: /people/dottedmag/packages/test.git<br />
При указании пути создаёт репозиторий по указанному пути:<br />
$ ssh git.alt init-db public/test<br />
Initialized empty Git repository in ./<br />
girar-init-db: /people/dottedmag/public/test.git<br />
<br />
==== mv-db ====<br />
<br />
'''$ ssh git.alt mv-db <path to source directory> <path to destination directory>'''<br />
Позволяет перемещать и переименовывать свои репозитории. При указании только имени репозитория подразумевается директория <tt>packages</tt>.<br />
<br />
Перемещение packages/test.git в public/newname.git:<br />
$ ssh git.alt mv-db test public/newname<br />
$<br />
Перемещение public/newname.git в packages/test.git:<br />
$ ssh git.alt mv-db public/newname test<br />
$<br />
Переименовывание packages/test.git в packages/megatest.git:<br />
$ ssh git.alt mv-db test megatest<br />
$<br />
<br />
==== rm-db ====<br />
<br />
'''$ ssh git.alt rm-db <path to git repository>'''<br />
Позволяет удалять свои репозитории. При указании только имени репозитория подразумевается директория <tt>packages</tt>:<br />
$ ssh git.alt rm-db megatest # удаляет packages/megatest.git<br />
$ ssh git.alt rm-db public/test<br />
<br />
<div id="acl"></div><br />
=== Управление ACL пакетов ===<br />
<br />
''Смотри [[ACL]] для общей информации об ACL пакетов в Sisyphus.''<br />
<br />
Команда <tt>acl</tt> требует указания репозитория, над которым производится работа. На данный момент существует только репозиторий Sisyphus с меткой <tt>sisyphus</tt>.<br />
<br />
Если в командной строке указан только репозиторий, но не указана подкоманда, то список команд читается со стандартного ввода, по одной команде на строку, и выполняется тразакционно: ошибка в выполнении хотя бы одной команды отменяет действие всего набора команд:<br />
$ ssh git.alt acl sisyphus keyjnote<br />
girar-acl: Go ahead and type your commands<br />
'''keyjnote add peet'''<br />
'''keyjnote add raorn'''<br />
'''^D'''<br />
girar-acl: 2 command(s) queued<br />
$<br />
<br />
Все команды, меняющие состав группы или ACL пакета, могут производиться только ''лидером'' — первым в списке ACL пакета или в составе группы. Все такие операции выполняются асинхронно и результат их выполнения сообщается по email.<br />
<br />
==== acl show ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> show'''<br />
Показывает ACL указанного пакета<br />
<br />
$ ssh git.alt acl sisyphus bugzilla show<br />
bugzilla @nobody<br />
<br />
'''$ ssh git.alt acl <binary repository> @<group> show'''<br />
Показывает состав указанной группы майнтайнеров.<br />
<br />
$ ssh git.alt acl sisyhpus @python show<br />
@python ns ldv george akhavr bga lav swi at hiddenman sin mithraen kas<br />
<br />
==== acl check ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> check'''<br />
Проверяет ACL указанного пакета<br />
<br />
$ ssh git.alt acl sisyphus bugzilla check<br />
girar-check-perms: access to bugzilla ALLOWED for ldv: project is orphaned<br />
<br />
==== acl add/del ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> add|del <login>|@<group> ...<br />
Добавляет/удаляет указанных пользователей и группы в/из ACL указанного пакета.<br />
<br />
$ ssh git.alt acl sisyphus keyjnote add damir<br />
girar-acl: 1 command(s) queued<br />
$ ssh git.alt acl sisyphus keyjnote del damir<br />
girar-acl: 1 command(s) queued<br />
<br />
'''$ ssh git.alt acl <binary repository> @<group> add|del <login>|@<group> ...<br />
Добавляет/удаляет указанных пользователей и группы в/из указанной группы.<br />
<br />
$ ssh git.alt acl sisyphus ns add @python<br />
girar-acl: 1 command(s) queued<br />
$ ssh git.alt acl sisyphus ns del @python<br />
girar-acl: 1 command(s) queued<br />
<br />
==== acl replace ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package>|@<group> replace <login>|@<group> <login>|@<group>'''<br />
Заменяет указанную запись в ACL пакета или составе группы на вторую указанную.<br />
<br />
$ ssh git.alt acl sisyphus keyjnote replace dottedmag @python<br />
Заменяет в ACL пакета <tt>keyjnote</tt> запись <tt>dottedmag</tt> на <tt>@python</tt>.<br />
<br />
==== acl leader ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> leader <login>|@<group><br />
Устанавливает лидера пакета — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке ACL пакета до выполнения этой команды.<br />
<br />
$ ssh git.alt acl sisyphus keyjnote leader @python<br />
<br />
'''$ ssh git.alt acl <binary repository> @<group> leader <login>|@<group><br />
Устанавливает лидера группы — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке членов группы до выполнения этой команды.<br />
<br />
$ ssh git.alt acl sisyphus @python leader ns<br />
<br />
==== acl nmu ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> nmu add|del [<login> [<start date> [<end date>]]]'''<br />
Выдаёт/снимает разрешение на проведение [[NMU]] указанного пакета.<br />
<br />
Параметры:<br />
* '''login''' — аккаунт, которому даётся разрешение на NMU. '''*''' или отсутствие параметра означает «кому угодно»<br />
* '''start date''' — дата начала действия NMU, в формате unixtime. Отсутствие параметра означает «немедленно»<br />
* '''end date''' — дата окончания действия NMU, в формате unixtime. Отсутствие параметра означает «никогда».<br />
<br />
Удаление разрешения происходит по точному соответствию имени аккаунта, так что <tt>del *</tt> не приведёт к отмене всех NMU, выданных на пакет. С другой стороны, <tt>del user</tt> приведёт к отмене всех NMU, выданных данному пользователю.<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> nmu show'''<br />
Выдаёт список NMU для указанного пакета, в формате<br />
<package> <login> <start date> <end date><br />
<br />
0 в поле ''end date'' означает «без ограничения».<br />
<br />
<div id="build"></div><br />
=== Сборка пакетов ===<br />
<br />
Для сборки пакетов используется механизм ''заданий'' — пользователь указывает, какие [[gear]]-репозитории необходимо собрать одной транзакцией, создавая задание, после чего запускает его на выполнение. Задание выполняются асинхронно. После завершения задания пользователю приходит отчёт по e-mail (плюс, отчёты о сборке доступны на git.alt, см. ниже). Каждое задание предназначено для изменения только одного репозитория пакетов.<br />
<br />
==== task ====<br />
<br />
'''$ ssh git.alt task ls [--all]'''<br />
Показывает текущий список всех заданий пользователя с указанием их статуса и краткого содержания.<br /><br />
С указанием параметра <tt>--all</tt> показывает список заданий всех пользователей.<br />
'''$ ssh git.alt task show [<task_id>]'''<br />
Показывает содержимое указанного (по умолчанию последнего созданного) задания.<br />
'''$ ssh git.alt task new [<binary_repository_name>]'''<br />
Создаёт новое задание для сборки пакетов в указанный репозиторий пакетов (по умолчанию — Sisyphus).<br /><br />
Список репозиториев можно узнать с помощью <tt>task new --help</tt>.<br /><br />
Данная команда выводит идентификатор задания на stdout.<br />
'''$ ssh git.alt task add [<task_id>] repo <gear_repo> <gear_tag>'''<br />
Добавляет в задание пакет, который необходимо собрать.<br /><br />
Пакет определяется двумя обязательными характеристиками: путём к gear-репозиторию и именем git-тэга.<br />
'''$ ssh git.alt task add [<task_id>] srpm <srpm file>'''<br />
Добавляет в задание пакет, который необходимо собрать.<br /><br />
Пакет определяется именем предварительно отправленного на сервер путём ''rsync git.alt:'' srpm-файла (Пример: ''rsync grace-5.1.22-alt6.src.rpm git.alt:'').<br />
'''$ ssh git.alt task add [<task_id>] copy <package> [<binary_repository_name>]'''<br />
Добавляет в задание имя пакета, который необходимо скопировать из другого репозитория пакетов (по умолчанию — Sisyphus).<br />
<br />
Параметры:<br />
* '''package''' — имя пакета (без версии, релиза и расширения).<br />
'''$ ssh git.alt task add [<task_id>] del <package>'''<br />
Добавляет в задание имя пакета, который необходимо удалить из репозитория.<br />
'''$ ssh git.alt task delsub <task_id> <subtask_id>'''<br />
Удаляет из указанного задания подзадание с указанным номером.<br />
'''$ ssh git.alt task run [--test-only] [<task_id>]'''<br />
Отправляет на выполнение указанное (по умолчанию последнее созданное) задание. Если задан опциональный параметр --test-only, то финальное выкладывание собранного в репозиторий не производится (т.н. тестовая сборка).<br />
'''$ ssh git.alt task share [<task_id>] <status|enabled|disabled>'''<br />
Показывает или изменяет режим доступа к указанному (по умолчанию последнему созданному) заданию.<br /><br />
Задание с режимом доступа ''share enabled'' может быть дополнено другими пользователями с помощью команды <tt>task add</tt>.<br /><br />
По умолчанию задания создаются в режиме доступа ''share disabled''.<br />
'''$ ssh git.alt task approve <task_id> <subtask_id>'''<br />
Подтверждает сборку подзадания с указанным номером, входящего в состав указанного чужого задания.<br /><br />
Используется для разрешения сборки автором, не имеющим полномочий для обновления собираемого пакета (NMU).<br />
'''$ ssh git.alt task rm [<task_id>]'''<br />
Удаляет указанное (по умолчанию последнее созданное) задание.<br />
<br />
Пример:<br />
$ ssh git.alt task ls<br />
girar-task ls: no tasks for ldv<br />
$ ssh git.alt task new<br />
1234<br />
new task #1234: owner=ldv repo=sisyphus<br />
$ ssh git.alt task ls<br />
#1234 NEW sisyphus<br />
$ ssh git.alt task show<br />
id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc=<br />
$ ssh git.alt task add repo vitmp 1.0-alt4<br />
task #1234: added #1 build tag 1.0-alt4 from /people/ldv/packages/vitmp.git<br />
$ ssh git.alt task show<br />
id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc=<br />
1:dir=/people/ldv/packages/vitmp.git<br />
1:tag_name=1.0-alt4<br />
1:tag_id=11c24aa6683506efd89b174de8dbea2af1cebf84<br />
1:tag_author=Dmitry V. Levin (for packages) <ldv@altlinux.org><br />
1:userid=ldv<br />
$ ssh git.alt task run<br />
task #1234: queued, result will be emailed to ldv@altlinux.org<br />
$ ssh git.alt task ls<br />
#1234 AWAITING sisyphus vitmp.git=1.0-alt4<br />
через некоторое время вывод последней команды изменится на<br />
#1234 BUILDING [locked] sisyphus vitmp.git=1.0-alt4<br />
а ещё через некоторое время — на<br />
#1234 DONE sisyphus vitmp.git=1.0-alt4<br />
(или TESTED, если сборка тестовая)<br />
==== build ====<br />
<br />
'''$ ssh git.alt build [-b <binary_repository_name>] [--test-only] <gear_repo_path 1> <gear_tag_name 1> ...'''<br />
Эта команда создаёт задание по сборке указанных пакетов и отправляет его на выполнение,<br />
последовательно запуская <tt>task new</tt>, <tt>task add</tt> и <tt>task run</tt>.<br /><br />
Параметр ''binary repository name'' имеет тот же смысл, что и в команде <tt>task new</tt>.<br /><br />
Параметры ''gear repo path'' и ''gear tag name'' имеют тот же смысл, что и в команде <tt>task add</tt>. Параметр ''--test-only'' имеет тот же смысл что и в команде <tt>task run</tt>.<br />
<br />
'''$ ssh git.alt build [-b <binary_repository_name>] srpm <srpm file> ...'''<br />
Эта команда создаёт задание по сборке указанных пакетов и отправляет его на выполнение,<br />
последовательно запуская <tt>task new</tt>, <tt>task add</tt> и <tt>task run</tt>.<br /><br />
Параметр ''binary repository name'' имеет тот же смысл, что и в команде <tt>task new</tt>.<br /><br />
Параметр ''srpm file'' имеет тот же смысл, что и в команде <tt>task add</tt>.<br />
<br />
==== Отчёты о сборке ====<br />
<br />
Информация о сборках публикуется по адресу http://git.altlinux.org/tasks/<br />
<br />
Каждая поддиректория <tt>/tasks/</tt> содержит информацию об одной сборочной задаче. Идентификатор задачи выдаётся при её создании и указывается в почтовых оповещениях.<br />
<br />
Задача может состоять из нескольких подзадач. Информация о каждой подзадаче публиуется в директориях <tt>/tasks/<id>/build/<sid></tt> и <tt>/tasks/<id>/gears/<sid></tt>.<br />
<br />
Наиболее интересные файлы:<br />
; <id>/task/log<br />
: краткий лог сборки<br />
; <id>/build/<sid>/<arch>/srpm.log<br />
: лог сборки подзадачи для архитектуры <arch>, если сборка производилась через incoming<br />
; <id>/build/<sid>/<arch>/log<br />
: лог сборки подзадачи для архитектуры <arch>, если сборка производилась через git.alt<br />
; <id>/gears/<sid><br />
: информация о подзадаче <sid>, если сборка производилась через git.alt<br />
; <id>/gears/<sid>/git<br />
: частичный git-репозиторий, на основании которго собиралась подзадача <sid><br />
<br />
Более подробное описание структуры задания можно найти в [http://git.altlinux.org/people/ldv/packages/?p=girar-builder.git;a=blob_plain;f=TASK документации на girar-builder].<br />
<br />
Всё, что находится по адресу http://git.altlinux.org/tasks/, в равной<br />
степени доступно и по rsync.<br />
<br />
=== Вспомогательные команды ===<br />
<br />
==== charset ====<br />
<br />
'''$ ssh git.alt charset <path to git repository> [<charset>]'''<br />
<br />
Позволяет узнать или установить кодировку, используемую почтовым клиентом при отправке уведомлений, содержащих цитаты изменений файлов указанного git-репозитория:<br />
<br />
$ ssh git.alt charset packages/glibc<br />
utf-8<br />
$ ssh git.alt charset packages/glibc cp1252<br />
$ ssh git.alt charset packages/glibc<br />
cp1252<br />
$<br />
<br />
==== quota ====<br />
<br />
'''$ ssh git.alt quota'''<br />
<br />
Позволяет узнать квоту и занимаемое пользователем дисковое пространство.<br />
<br />
$ ssh git.alt quota<br />
Filesystem blocks quota limit grace files quota limit grace<br />
/dev/simfs 16932 977M 1465M 555 100k 150k <br />
$<br />
<br />
==== git-receive-pack, git-upload-pack ====<br />
<br />
Эти команды используются утилитами <tt>git push</tt>, <tt>git pull</tt> и подобными, и не предназначены для вызова пользователем.<br />
<br />
=== Клонирование и работа с репозиториями ===<br />
<br />
Работа с git-репозиториями, расположенными на <tt>git.alt</tt>, ничем не отличается от работы с другими git-репозиториями.<br />
<br />
URL-ы репозиториев на git.alt:<br />
; '''git''' (r/o)<br />
: <tt>git://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git</tt><br />
; '''rsync''' (r/o)<br />
: <tt>git.altlinux.org::people/$USER/(packages|public)/$PACKAGE.git</tt><br />
; '''http''' (r/o)<br />
: <tt><nowiki>http://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git</nowiki></tt><br />
; '''ssh''' (r/w)<br />
: <tt>ssh://git.altlinux.org/people/$USER/(etc|packages|public|private)/$PACKAGE.git</tt><br />
<br />
HTTP- и git-URL-ы репозиториев можно в любой момент узнать в web-интерфейсе <tt>git.alt</tt>.<br />
<br />
=== Web-интерфейс ===<br />
<br />
Располагается по адресу http://git.altlinux.org/<br />
<br />
Предоставляет навигацию по публичным репозиториям пользователей (директории <tt>/people/$USERNAME/{packages,public}</tt>) и <tt>gitweb</tt>-интерфейс к этим репозиториям.<br />
<br />
Кроме этого, в web-интерфейсе представлены репозитории <tt>/archive</tt>, списки <tt>/acl</tt> и файл <tt>people-packages-list</tt>, содержащий все репозитории из директорий <tt>/people/$USERNAME/packages</tt> и даты их последнего изменения (в unixtime).<br />
<br />
== Структура репозиториев ==<br />
<br />
<tt>git.alt</tt> содержит три дерева репозиториев:<br />
<br />
* репозитории <tt>/people/$USERNAME</tt> для каждого зарегистрированного пользователя<br />
* репозитории <tt>/gears</tt> с исходным кодом для пакетов Sisyphus, собранных с помощью <tt>git.alt</tt>.<br />
* репозитории <tt>/archive</tt> с исходным кодом для пакетов Sisyphus, прошедших [[incoming]].<br />
<br />
=== /people ===<br />
<br />
Каждому зарегистрированному на git.alt разработчику предоставляется место для git-репозиториев, начинающееся с <tt>/people/$USERNAME</tt>. Доступ на запись в эти директории даётся только владельцу. Структура для хранения репозиториев жёстко определена:<br />
<br />
==== /people/$USERNAME/etc ====<br />
<br />
Содержит репозитории <tt>packages.git</tt>, <tt>private.git</tt>, <tt>public.git</tt>, с помощью которых можно управлять [[#Почтовая подписка|почтовой подпиской]]. Эти репозитории доступны на чтение только владельцу.<br />
<br />
==== /people/$USERNAME/packages ====<br />
<br />
Директория предназначена для хранения gear-репозиториев для пакетов Сизифа. Публично доступна.<br />
<br />
git-репозитории в этой директории будут искаться при выполнении команды <tt>find-package</tt>, и эта директория будет использоваться по умолчанию в командах <tt>init-db</tt>, <tt>clone</tt>, <tt>build</tt>.<br />
<br />
==== /people/$USERNAME/private ====<br />
<br />
Директория предназначена для хранения приватных репозиториев, о существовании и содержании которых должно быть известно только самому разработчику.<br />
<br />
Для удобства работают прямые http-ссылки на файлы репозиториев, размещённых в этой директории.<br />
<br />
==== /people/$USERNAME/public ====<br />
<br />
Директория предназначен для хранения публичных git-репозиториев, не являющихся gear-репозиториями для пакетов Сизифа.<br />
<br />
<div id="gears"></div><br />
=== /gears ===<br />
<br />
В эту директорию помещаются git-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]]. Добавление исходного кода в репозиторий <tt>/gears</tt> происходит после успешной сборки пакета с помощью команд <tt>git.alt</tt> <tt>task</tt> или <tt>build</tt>.<br />
<br />
Каждый git-репозиторий в <tt>/gears</tt> назван по имени пакета с исходным кодом. Бранчи в нём называются по имени ветки, в которую собрался пакет (<tt>sisyphus</tt>, <tt>branch5.0</tt> и т.д). Тэги в репозитории соответствуют собранным версиям пакетов (<tt>1.0-alt1</tt>, <tt>1.0-alt0.M50.1</tt> и т.д.).<br />
<br />
=== /srpms ===<br />
<br />
В этой директории размещаются git-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]], собранных с помощью [[Incoming]].<br />
<br />
После первой сборки командами <tt>task</tt> или <tt>build</tt> <tt>git.alt</tt> репозиторий в <tt>/srpms</tt> замораживается.<br />
<br />
Поскольку git-репозитории <tt>/srpms</tt> создаются на основе <tt>src.rpm</tt>-пакетов, а сборка с помощью [[Incoming]] объявлена устаревшей, то использовать их стоит только из исторического интереса.<br />
<br />
<div id="email"></div><br />
<br />
== Почтовая подписка ==<br />
<br />
На <tt>git.alt</tt> реализовано два вида почтовой подписки на события:<br />
* Пользователь подписывается на события, происходящие в репозиториях <tt>packages</tt> и <tt>public</tt>.<br />
* Пользователь подписывает кого-то на события, происходящие в '''его''' репозиториях <tt>packages</tt>, <tt>public</tt> и <tt>private</tt>.<br />
<br />
Для подписки используются репозитории из каталога <tt>etc</tt>: <tt>packages.git</tt>, <tt>public.git</tt>, <tt>private.git</tt> в каталоге пользователя. Схема работы с подписками напоминает работу с <tt>CVSROOT</tt> из CVS: пользователь клонирует нужный репозиторий, коммитит изменения в него и push-ит обратно на сервер, после чего изменения вступают в силу.<br />
<br />
В каждом из трёх репозиториев находится два файла: <tt>email-subscription</tt> и <tt>email-distribution</tt> (точнее, в <tt>private.git</tt> — только <tt>email-distribution</tt>). <tt>git.alt</tt> использует бранч <tt>master</tt> и не обращает внимания на остальные бранчи в этих репозиториях.<br />
<br />
=== email-subscription ===<br />
<br />
Этот файл позволяет подписаться на события в публичных репозиториях <tt>git.alt</tt>. Формат файла — последовательность строк следующего вида:<br />
$USER $PACKAGE $REFTYPE $REFNAME<br />
где<br />
* $USER — имя пользователя <tt>git.alt</tt>,<br />
* $PACKAGE — имя пакета,<br />
* $REFTYPE — вид изменения: <tt>head</tt> — новые/удалённые коммиты, <tt>tag</tt> — новые/удалённые тэги (техническая подробность: второй компонент из изменяемой ссылки <tt>refs/*/*</tt>)<br />
<!-- или release (релизы для сборки пакетов. Пока что не работает. --><br />
* $REFNAME — имя изменения: имя бранча для коммитов, имя тэга для тэгов (техническая подробность: третий и последующие компоненты из изменяемой ссылки <tt>refs/*/*</tt>).<br />
Каждое из полей может быть полным именем или вайлдкардом <tt>*</tt>. Для имён пакетов также разрешён вайлдкард в конце имени (например, <tt>docs-*</tt>).<br />
<br />
==== Примеры ====<br />
<br />
Подписка на все события во всех репозиториях:<br />
* * * *<br />
Подписка на новые/удалённые тэги в репозитории /people/ldv/packages/glibc.git:<br />
ldv glibc tag *<br />
Действия для осуществления подписки:<br />
git clone git.alt:etc/packages.git<br />
cd packages<br />
echo 'ldv glibc tag *' >> email-subscription<br />
git commit -m "Subscribe to new tags in ldv's glibc repository" email-subscription<br />
git push<br />
<br />
=== email-distribution ===<br />
<br />
Этот файл позволяет подписать других пользователей <tt>git.alt</tt> на события в ваших репозиториях. Формат файла — последовательность строк вида:<br />
$PACKAGE $REFTYPE $REFNAME $MAILTO<br />
где<br />
* $PACKAGE, $REFTYPE, $REFNAME аналогичны параметрам из файла email-subscription<br />
* $MAILTO — разделённый запятыми список имён пользователей <tt>git.alt</tt> — получателей оповещения.<br />
Вайлдкарды в первых трёх полях допустимы так же, как и в email-subscription. Вайлдкарды в $MAILTO не допускаются.<br />
<br />
<br />
{{Category navigation|title=git.alt|category=git.alt|sortkey={{SUBPAGENAME}}}}<br />
<br />
[[Категория:Справочники]]<br />
<br />
[[en:git.alt reference]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_%D0%BD%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8E_changelog&diff=13565Руководство по написанию changelog2010-02-12T11:48:50Z<p>EvgeniiTerechkov: Отмена правки 13560 участника 213.108.203.210 (обсуждение)</p>
<hr />
<div>[[Категория:Руководства]]<br />
[[category:RPM spec]]<br />
[[category:devel]]<br />
<br />
__TOC__<br />
Этот документ описывает рекомендуемые правила оформления секций <tt>%changelog</tt> и объём включаемой в них информации.<br />
== Термины ==<br />
Пример секции:<br />
<pre>* Wed Apr 02 2008 Andrey Rahmatullin <wrar@altlinux> 4.6.2-alt7.pre1<br />
[ Andrey Rahmatullin ]<br />
- syntax:<br />
+ recognize .hh and .hpp as c++ again<br />
+ recognize man pages with additional suffixes other than 'x', such as<br />
write.3p (Debian)<br />
<br />
[ Vladislav Primerov ]<br />
- make visible_tabs and visible_tws mcedit options configurable through config<br />
file (Debian)<br />
<br />
[ Alexander Sluchainyi ]<br />
- specfile cleanup<br />
<br />
* Sat Mar 29 2008 Andrey Rahmatullin <wrar@altlinux> 4.6.2-alt6.pre1<br />
- build with slang2</pre><br />
<br />
Здесь<br />
; запись<br />
: Всё, что относится к сборке 4.6.2-alt7.pre1<br />
; группа<br />
: имя в квадратных скобках<br />
; пункт<br />
: текст, начинающийся с дефиса («- make visible_tabs and visible_tws mcedit options configurable through config file (Debian)»)<br />
; подпункт<br />
: текст, начинающийся с плюса («+ recognize man pages with additional suffixes other than 'x', such as write.3p (Debian)»)<br />
; строка<br />
: одна строка файла спека («- make visible_tabs and visible_tws mcedit options configurable through config»)<br />
<br />
== Синтаксис чейнджлога ==<br />
* (Опциональная) группа состоит из имени в квадратных скобках и начинается с первой позиции строки.<br />
* Пункт верхнего уровня начинается с 1-й позиции в строке и состоит из дефиса, пробела и собственно текста.<br />
* Подпункт начинается с 3-й позиции в строке и состоит из плюса, пробела и собственно текста.<br />
* Строки переносятся по словам и содержат не более 78 символов. При этом текст новой строки выравнивается по началу текста предыдущей (то есть 3-я позиция для пунктов верхнего уровня и 5-я для подпунктов).<br />
* Начинать новую строку с символа # нельзя (такая строка будет воспринята как комментарий).<br />
* При использовании макросов следует экранировать символ "%" ещё одним "%" во избежание раскрытия оных, т.е. напрмер вместо <tt>%name</tt> следует записать <tt>%%name</tt>.<br />
<br />
Пример:<br />
- syntax:<br />
+ recognize .hh and .hpp as c++ again<br />
+ recognize man pages with additional suffixes other than 'x', such as<br />
write.3p (Debian)<br />
- make visible_tabs and visible_tws mcedit options configurable through config<br />
file (Debian)<br />
<br />
== Содержимое ==<br />
* Чейнджлог (обязательно!) пишется на английском языке.<br />
* При сборке новой upstream-версии это указывается первым пунктом.<br />
** При сборке из снэпшота системы контроля версий необходимо указать информацию, позволяющую идентифицировать это снэпшот (дата и время для CVS, ревизия SVN, 8 первых символов идентификатора коммита для git, mtn, bzr, hg, либо вывод git-describe для git).<br />
* Если в сборке версии существенно принимало участие более одного человека, то изменения, вносимые разными людьми, собираются в группы по авторам, иначе группы не нужны.<br />
* Если новая сборка содержит исправленные по сравнению с предыдущей сборкой ошибки безопасности, эти ошибки указываются отдельным пунктом. Желательно кратко описать суть и влияние проблемы. Также используется на [http://sisyphus.ru/security sisyphus.ru]. Пример:<br />
- security fixes:<br />
+ server/dhcp.c (ack_lease): Imported fix for potential<br />
premature server termination (Christoph Biedl; CVE-2009-1892)<br />
* Изменения, произведённые апстримом (кроме исправлений ошибок безопасности), в чейнджлоге не указываются (для этого есть чейнджлоги апстрима, зачастую включаемые в пакет).<br />
* Косметические изменения спек-файла, не влияющие на получаемый пакет, указываются максимум одной строкой, либо не указываются вовсе. Это не относится к исправлениям тега License, изменениям параметров сборки и т. д.<br />
* Исправления, необходимые для успешной сборки, соответствия требованиям ALT Linux и т. д., не указываются, если они были сопряжены с упаковкой новой версии и для старой версии были не нужны (эти исправления — адаптация новой версии, то есть часть процесса её упаковки). Если же они были вызваны изменением требований либо окружения, желательно это указать (пример: «fix FTBFS with new autotools», FTBFS == failure to build from source).<br />
* Если .spec-файл адаптирован из другого дистрибутива, то старые записи %changelog обязательно должны быть сохранены (записи в %changelog фактически являются информацией об авторских правах на спек, и их недопустимо выкидывать в производной от исходного спека работе).<br />
* Используйте спеллчекер :)<br />
<br />
== Указание источников и контекста ==<br />
* Если изменение взято извне либо основано на взятом извне, в соответствующем изменению пункте чейнджлога в скобках указывается источник. Это может быть название дистрибутива/репозитория, название внешней BTS и номер бага в ней, ID участника ALT Linux Team или произвольное указание на человека или сайт. Здесь под изменением подразумевается готовый патч, адаптированный патч или иные аналогичные указания.<br />
Примеры:<br />
- move global configs to /etc (RH)<br />
- linked libnetpbm.so against -lm (RH #165980)<br />
- use optflags (drool@)<br />
<br />
== Автозакрытие багов ==<br />
* Если изменение связано с багрепортом из [[altbug:|bugzilla.altlinux.org]], в скобках в соответствующем пункте можно указать (по вкусу; регистр не учитывается):<br />
** <tt>Closes: NNNN</tt><br />
** <tt>Closes bug: NNNN</tt><br />
** <tt>ALT NNNN</tt><br />
** <tt>ALT bug NNNN</tt><br />
с опциональным знаком <tt>#</tt> перед номером бага. Можно также указать несколько багов: <tt>(Closes: NNNN, MMMM, ZZZZ)</tt>. Синтаксис такого рода закрывает указанный баг после прохождения пакета в репозиторий при условии присутствия соответствующей записи в выводе {{cmd|rpmquery --lastchange}}.<br />
* Номера багов в скобках разделяются запятыми.<br />
Примеры:<br />
- add option to build with libslang2 (closes: 10591)<br />
- recognize .3gp as video, not manpage (ALT #14982, #14999)<br />
Полный regexp для поиска номеров багов в changelog можно посмотреть [http://git.altlinux.org/people/ldv/packages/?p=girar-builder.git;a=blob;f=gb-x-parse-bugs-from-changelog;hb=HEAD здесь].<br />
<br />
== Лучшие практики оформления changelog ==<br />
<br />
* Если changelog пакета оформлен единообразно, не нарушайте это единообразие (если оно не противоречит этому руководству). Если же changelog хаотичен, то оставленный перед changelog комментарий о рекомендуемом стиле ведения changelog поможет избежать продолжения хаоса в будущем.<br />
* Старайтесь, чтобы все предложения в changelog были в одной форме («fix memory leaks», «fixed memory leaks», «memory leaks fixed»), в таком виде их гораздо удобнее читать.<br />
* Единообразно оформляйте предложения changelog’а: либо начинайте, либо не начинайте их все с большой буквы; либо заканчивайте, либо не заканчивайте их точкой.<br />
* Группировка сходных пунктов в подпункты позволяет уменьшить размер changelog’а и улучшить его читаемость.<br />
<br />
== Разное ==<br />
<br />
* Для форматирования changelog существует команднострочная утилита [[add_changelog]], а также макросы для [[редактирование changelog в Vim|Vim]] и [[редактирование changelog в Emacs|Emacs]].<br />
* [[Changelogs guide/example|Пример хорошего changelog’а]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:Hestia&diff=12858Обсуждение:Hestia2009-12-10T15:51:04Z<p>EvgeniiTerechkov: Новая страница: «Ой мама.»</p>
<hr />
<div>Ой мама.</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=SerialLogin&diff=12767SerialLogin2009-11-25T13:52:36Z<p>EvgeniiTerechkov: Typo fixed</p>
<hr />
<div>{{span|font-size: 180%|Как настроить вход на машину через последовательный порт (Serial Login)}}<br />
<br />
Для чего может понадобиться вход на Linux-машину через последовательный порт? Да мало ли для чего — например, если других способов связи нет, или для подключения к «безголовой» машине, конфигурация сети которой в общем случае неизвестна. В общем, бывает нужно.<br />
<br />
Напомню, что последовательные порты в Linux именуются в виде файлов {{path|/dev/ttyS*}} (на месте звёздочки может быть любой номер порта, начиная с нуля). Иногда, если используются адаптеры COM2USB, порты могут именоваться {{path|/dev/ttyUSB*}} (тоже начиная с нуля).<br />
<br />
Для настройки входа через последовательный порт вам надо выполнить два обязательных шага и, возможно, один необязательный:<br />
<br />
== Установка mgetty ==<br />
В ALT Linux вход по модемным линиям (здесь я их не рассматриваю) и последовательным портам обслуживает утилита '''mgetty'''. Для настройки входа вам нужно установить её. Сделайте это обычным методом (apt-get, aptitude, synaptic).<br />
<br />
== /etc/inittab ==<br />
Нужно поправить файл {{path|/etc/inittab}}, указать init-у запускать mgetty на нужных портах. Формат файла довольно прост и хорошо комментирован (в частности, есть пример и для mgetty). Подробности можно уточнить в inittab(5).<br />
<br />
Например, это может выглядеть так:<br />
<pre><br />
~ # grep -iE '^[^#].*mgetty' /etc/inittab<br />
T3:23:respawn:/sbin/mgetty -r -s 9600 -x 0 ttyS0<br />
T4:23:respawn:/sbin/mgetty -r -s 9600 -x 0 ttyS1<br />
</pre><br />
<br />
Эти параметры (с которыми init запустит mgetty для первых двух последовательных портов) означают, что что на портах /dev/ttyS[01] (mgetty сам умеет добавлять /dev/) ожидаются прямые (-r, то есть, с других компьютеров/терминалов, в противоположность модемным) соединения со скоростью 9600 бод (-s) и с уровнем отладочной информации равным нулю (-x). Изменения вступят в силу лишь после прочтения файла init-ом (в результате команды {{cmd|telinit q}} от суперпользователя или перезагрузки машины).<br />
<br />
Дополнительную краткую информацию по вызову mgetty можно почерпнуть из mgetty(8).<br />
<br />
== /etc/mgetty+sendfax/mgetty.config ==<br />
Это необязательный шаг. Всё поведение mgetty контролируется ключами командной строки, однако если вы захотите задать параметры в отдельном файле (и перенести туда все специфичные для портов параметры), то для этого есть файл {{path|/etc/mgetty+sendfax/mgetty.config}}. Здесь вы можете задать как параметры, общие для всех портов, так и индивидуальные параметры линий. Подробности (а так же множество другой информации по последовательному входу) можно уточнить в полном руководстве — {{cmd|info mgetty}}.<br />
<br />
== Проверка ==<br />
Для проверки надо присоединить к только что настроенному порту кабель (COM2USB или DB-9 «мама-мама», для соединения с другим компьютером, либо другие кабеля, для другого оборудования), запустить терминальную программу ('''cu''', '''minicom''', '''cutecom'''), указать ей параметры соединения — порт (на машине откуда соединяемся) и скорость (указанную при запуске mgetty) и дать команду на соединение. В случае успеха на экран ничего не выводится — надо попробовать нажать несколько буквенно-цифовых (не функциональных) клавиш, чтобы mgetty распознал, что его зовут. Если всё хорошо — mgetty откликнется приглашением '''login:'''. Можно вводить имя пользователя и пароль, как обычно. Заметьте, что по умолчанию ALT Linux не пускает пользователя '''root''' через последовательные порты. Вы можете это изменить, поправив файл {{path|/etc/securetty}}.<br />
<br />
[[Категория:Admin]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Spec&diff=12310Spec2009-09-14T00:09:46Z<p>EvgeniiTerechkov: /* %check */ упомянул про git.alt</p>
<hr />
<div>[[Категория:RPM spec]]<br />
<br />
{{Stub}}<br />
<br />
== Работа с upstream-исходниками ==<br />
<br />
Если имя пакета, имя архива с upstream-исходным кодом и имя директории, содержащейся в архиве, не совпадают, не следует перепаковывать архив, чтобы угодить действиям по умолчанию в RPM. Вместо этого стоит указать все названия в spec-файле явно:<br />
<br />
%define origname imms<br />
<br />
Name: xmms-%origname<br />
#...<br />
<br />
Url: <nowiki>http://www.luminal.org/phpwiki/index.php/IMMS</nowiki><br />
Source: <nowiki>http://www.luminal.org/files/%origname/%origname-%version.tar.bz2</nowiki><br />
<br />
# if we had a published package with original name<br />
Obsoletes: %origname<br />
<br />
%prep<br />
%setup -n %origname-%version<br />
<br />
Разумеется, это всё относится только к пакетам, собираемым не с помощью [[Gear]].<br />
<br />
== Включение/выключение подпакетов ==<br />
<br />
Иногда определённые подпакеты нужно собирать только в особых ситуациях (например, статические библиотеки или вариант для bootstrap новой архитектуры). Это делается следующим образом:<br />
<br />
# Включается с помощью --enable=static в командной строке rpm/rpmbuild.<br />
%def_disable static<br />
[...]<br />
# Если необходимо передать опцию --(disable|enable)-static в configure<br />
%configure %{subst_enable static}<br />
[...]<br />
%if_enabled static<br />
%files devel-static<br />
[...]<br />
%endif<br />
<br />
== Version ==<br />
<br />
Версия upstream-кода. В случае упаковки промежуточной версии ({{pkg|1.0-rc1}}, {{pkg|1.0-20080105}}) версия среза упаковывается в поле [[#Release|Release]]: 1.0rc [http://lists.altlinux.org/pipermail/devel/2007-September/144131.html лексикографически круче] 1.0, вследствие чего для нормального обновления 1.0rc до 1.0 придётся<br />
* добавлять <tt>Serial: 1</tt>,<br />
* оформлять как 1.0rel или<br />
* ждать поднятия версии апстримом.<br />
<br />
== Release ==<br />
<br />
Для пакетов Sisyphus поле {{term|Release}} должно иметь вид в простых случаях — {{pkg|altN}}, а в сложных (см. ниже) — {{pkg|altN[суффикс]}}.<br />
<br />
Релиз пакета используется для указания номера сборки пакета при данной версии upstream-кода, N начинается с 1 для каждой новой upstream-версии и увеличивается на 1 для каждой новой сборки:<br />
<br />
* {{pkg|1.0-alt1}}<br />
* {{pkg|1.0-alt2}}<br />
* {{pkg|1.0-alt3}}<br />
* {{pkg|1.1-alt1}}<br />
* {{pkg|1.2-alt1}}<br />
* {{pkg|1.2-alt2}}<br />
* …<br />
<br />
Два особых случая — это упаковка промежуточных релизов upstream-кода и упаковка бэкпортов.<br />
<br />
<div id="intermediate"></div><br />
<br />
=== Промежуточные upstream-релизы ===<br />
<br />
При сборке промежуточных релизов upstream-кода (срезов по дате, по системе контроля версий), следует указывать информацию о срезе в поле {{term|Release}}:<br />
* {{pkg|1.0-alt1.r6543}}<br />
* {{pkg|1.0-alt1.20080101}}<br />
* {{pkg|1.0-alt1.rc1}}<br />
* {{pkg|1.0-alt1.rc2}}<br />
* {{pkg|1.0-alt1.gitda39a3ee}}<br />
<br />
Если система контроля версий не предоставляет линейной нумерации коммитов, то с каждым новым срезом нужно увеличивать номер релиза:<br />
<br />
* {{pkg|1.0-alt1.hg.da39a3ee}}<br />
* {{pkg|1.0-alt2.hg.0d3255bf}}<br />
* {{pkg|1.0-alt3.hg.fef95601}}<br />
<br />
Для линеаризации номера версии в {{pkg|git}} можно использовать {{cmd|git describe}}:<br />
<br />
* {{pkg|1.0-alt1.git1.5.4-1-g18208b2}}<br />
* {{pkg|1.0-alt1.git1.5.4-2-93f1595a}}<br />
* {{pkg|1.0-alt1.git1.5.4-3-8be800af}}<br />
<br />
При первой сборке финального upstream-релиза следует поднять номер релиза пакета:<br />
<br />
* {{pkg|1.0-alt1.gitda39a3ee}}<br />
* {{pkg|1.0-alt2.gitd06f1866}}<br />
* {{pkg|1.0-alt3}}<br />
<br />
Использовать релиз {{pkg|alt0}} запрещено — пакет с таким релизом, попав в репозиторий, порождает проблемы с бэкпортами.<br />
<br />
=== Бэкпорты ===<br />
<br />
{{Main|BackportsPolicy#Правила нумерации релизов}}<br />
<br />
== Epoch ==<br />
<br />
Поле Epoch используется тогда, когда по какой-то причине (странное поведение upstream-а, ошибочная заливка пакета или похожие форс-мажорные обстоятельства) требуется уменьшить версию или релиз пакета по сравнению с имеющимся в репозитории. При этом значение поля <tt>Epoch</tt> увеличивается на единицу по сравнению с предыдущим (отсутствие поля <tt>Epoch</tt> эквивалентно значению 0), версия и релиз устанавливаются в нужное значение.<br />
<br />
Будьте осторожны — в имя RPM-файлов Epoch не входит, и поэтому необходимо избегать RPM-ов с одинаковыми Version и Release и разными Epoch.<br />
<br />
Устаревшим синонимом поля <tt>Epoch</tt> является <tt>Serial</tt>.<br />
<br />
== Summary ==<br />
<br />
Значение тэга <tt>Summary</tt> должно начинаться с заглавной буквы. В конце <tt>Summary</tt> не должно быть точки.<br />
<br />
== License ==<br />
<br />
* Лицензия должна быть указана в точности так, как сформулировано в upstream-пакете (в частности, не разрешается отбрасывать или добавлять «or any later version», а также менять указанные версии или смешивать GPL и LGPL).<br />
* Несвободные лицензии должны быть указаны как «distributable»<br />
<br />
При указании лицензии рекомендуется пользоваться макросами из пакета <tt>rpm-build-licenses</tt>.<br />
<br />
Сам текст лицензии упаковывать в пакет нужно только в том случае, если соответствующий текст отсутствует в <tt>/usr/share/license</tt> (пакет <tt>common-licenses</tt>). Если же таковой файл там присутствует, то достаточно указать название лицензии в тэге пакета.<br />
<br />
Лицензию с добавками к стандартному тексту (например, GPLv2 с дополнительной секцией в ядре Linux) упаковывать обязательно.<br />
<br />
== Group ==<br />
<br />
Указанная группа должна находиться в списке групп, известном RPM. Этот список располагается в файле <tt>/usr/lib/rpm/GROUPS</tt>, находящемся в пакете <tt>rpm</tt>.<br />
<br />
== Url ==<br />
<br />
В тэге <tt>Url</tt> настоятельно рекомендуется указывать действующий URL домашней страницы проекта, либо если таковой нет — любого другого места, где можно получить архив с исходным кодом.<br />
<br />
Рекомендуется периодически проверять адреса в своих пакетах на предмет того, что они действующие, и проект не переехал (даже если по старому адресу стоит перенаправление на новый, имеет смысл исправить содержимое тэга).<br />
<br />
Для тега <tt>Url</tt> можно использовать утилиту <tt>rpmurl</tt> из пакета <tt>etersoft-build-utils</tt>:<br />
rpmurl -c пакет.spec<br />
<br />
== Source ==<br />
<br />
Если сборка производится без использования {{prg|gear}}, то в {{term|Source}} настоятельно рекомендуется указывать действующий URL архива исходного кода относительно тэга {{term|Url}}:<br />
Source: %url/some/thing/%name-%version.tar.bz2<br />
Формат {{term|Source}} для известных хостингов:<br />
# иногда проект называется не так, как пакет, будьте внимательны<br />
Source: <nowiki>http://dl.sourceforge.net/%name/%name-%version.tar.bz2</nowiki><br />
Source: <nowiki>http://download.berlios.de/%name/%name-%version.tar.bz2</nowiki><br />
<br />
Если тарбол формируется из {{prg|[[gear]]}}-репозитория, то в {{term|Source}} указывается имя файла согласно прописанному в {{path|.gear/rules}}, например<br />
Source: %name-%version.tar<br />
<br />
Если исходники берутся из системы контроля версий, то рекомендуется указывать в комментарии рядом команду для получения данного снапшота:<br />
# svn co svn://svnanon.samba.org/samba/trunk samba-trunk -r 1<br />
Source: %name.tar.bz2<br />
<br />
== Patch ==<br />
<br />
Рекомендуемое именование патчей:<br />
* {{term|NAME-VERSION-ORIGIN-WHAT.patch}}, где<br />
** {{term|NAME}} и {{term|VERSION}} — имя и версия пакета, для которого сделан патч,<br />
** {{term|ORIGIN}} — аббревиатура источников патча (обычно дистрибутивов),<br />
** {{term|WHAT}} — краткое описание патча.<br />
<br />
Если патч образован из нескольких частей, полученных из разных источников, {{term|ORIGIN}} должен включать аббревиатуры всех источников. Аббревиатура ALT Linux / Sisyphus — {{term|alt}}. Для патчей, полученных на основе системы контроля версий, {{term|ORIGIN}} должен включать в себя дату или номер ревизии.<br />
<br />
В описании патча рекомендуется пользоваться следующими сокращениями:<br />
* {{term|makefile}} — патчи, затрагивающие исключительно {{path|Makefile*}},<br />
* {{term|bound}} — проверки на границы (буфера, целых чисел и т. д.),<br />
* {{term|config}} — патчи, затрагивающие исключительно конфигурационные файлы,<br />
* {{term|configure}} — патчи, затрагивающие исключительно {{path|configure*}},<br />
* {{term|doc}} — патчи, затрагивающие исключительно документацию,<br />
* {{term|fixes}} — кумулятивные патчи/исправления по надёжности и/или безопасности,<br />
* {{term|format}} — патчи на использование форматирования строк (типа {{term|printf}}),<br />
* {{term|install}} — патчи на выполнение {{cmd|make install}} непривилегированным пользователем,<br />
* {{term|linux}} — патчи для портирования По на Linux,<br />
* {{term|man}} — патчи, затрагивающие исключительно man-страницы,<br />
* {{term|texinfo}} — патчи, затрагивающие исключительно документацию в формате {{term|texinfo}},<br />
* {{term|tmp}} — патчи, предназначенные для решения различных вопросов, связанных с временными файлами,<br />
* {{term|vitmp}} — патчи для поддержки {{term|vitmp(1)}}<br />
* {{term|warnings}} — патчи, исправляющие предупреждения, выданные компилятором<br />
<br />
== Requires, PreReq ==<br />
<br />
При наличии логических зависимостей между пакетами внутри одного spec-файла, пакетная зависимость между ними должна включать полную версию пакета, например так:<br />
Requires: %name = %epoch:%version-%release<br />
<br />
== BuildRequires, BuildPreReq ==<br />
<br />
Тэг <tt>BuildRequires</tt> используется для хранения результатов работы [[buildreq]]. По этой причине дополнительные сборочные зависимости, не находящиеся <tt>buildreq</tt>, рекомендуется хранить в тэге <tt>BuildPreReq</tt>.<br />
<br />
Если в пакете имеются опциональные части (включаемые с помощью конструкций <tt>%if</tt> или подобных), то сборочные зависимости должны содержать пакеты, достаточные для сборки всех опциональных частей. Этого можно добиться двумя способами:<br />
* запуском <tt>buildreq</tt> со всеми включенными опциями,<br />
* указанием дополнительных зависимостей в <tt>BuildPreReq</tt> и периодическим их обновлением.<br />
<br />
== BuildRoot ==<br />
<br />
Тэг <tt>BuildRoot</tt> бесполезен для RPM из Sisyphus: обработку <tt>BuildRoot</tt> RPM производит самостоятельно.<br />
<br />
== BuildHost ==<br />
<br />
Новый опциональный тэг в Sisyphus RPM. Позволяет переопределить имя сборочного хоста. По умолчанию используется, как и в остальных версиях RPM, результат вызова <tt>uname(2)</tt>.<br />
<br />
== Prefix ==<br />
<br />
Тэг <tt>Prefix</tt> в Sisyphus RPM не нужен, он самостоятельно устанавливается в <tt>/usr</tt>.<br />
<br />
== %description ==<br />
<br />
Описание пакета должно содержать информацию, интересную его пользователю, а не сборщику:<br />
* Описание программы или инструмента должно содержать их функционал, а не особенности реализации (язык, используемые библиотеки и т. д.)<br />
* Описание библиотеки должно содержать язык программирования, для которого предназначена библиотека и решаемую задачу<br />
* …<br />
<br />
== %prep ==<br />
<br />
=== %setup ===<br />
<br />
Конструкция <tt>%setup</tt> в Sisyphus RPM использует флаг <tt>-q</tt> (quiet) по умолчанию. Для включения отладочного вывода используйте флаг <tt>-v</tt>.<br />
<br />
== %install ==<br />
<br />
=== %makeinstall_std ===<br />
<br />
Рекомендуемый вариант, эквивалентный <br />
%make_install DESTDIR=%buildroot install<br />
<br />
=== %make_install ===<br />
<br />
Этот макрос используется для упрощения установки софта, Makefile которого умеет использовать параметр <tt>DESTDIR</tt> (в частности, весь софт, использующий automake, это умеет):<br />
%make_install DESTDIR=%buildroot install<br />
или<br />
%make_install DESTDIR=%buildroot %_make_install_target<br />
<br />
=== %makeinstall ===<br />
<br />
Редко используемый макрос, предназначенный для софта, DESTDIR не умеющего, и <tt>prefix</tt> внутри себя не запоминающего:<br />
%makeinstall<br />
В случае, когда Makefile нужно передать какой-то дополнительный параметр (например, особо странный <tt>somefancydir=%buildroot/fancy/dir</tt>), это выглядит так:<br />
%makeinstall somefancydir=%buildroot/fancy/dir<br />
<br />
Иногда требуется запаковать вспомогательные бинарные программы, не предназначеные для выполнения пользователем (обычно их запускают другие программы). Согласно [http://www.gnu.org/prep/standards/html_node/Directory-Variables.html GNU Coding Standards], их следует класть в директорию, определяемую переменной <tt>libexecdir</tt>. В ALT&nbsp;Linux ей соответствует макрос <tt>%_libexecdir</tt>, указывающий на <tt>/usr/lib</tt>. Рекомендуется создавать в этой директории под-папки по названию пакета:<br />
<br />
%makeinstall libexecdir=%buildroot%_libexecdir/fancy<br />
<br />
Задать путь можно также на этапе конфигурирования:<br />
<br />
%build<br />
%configure --libexecdir=%_libexecdir/fancy<br />
<br />
=== Удаление buildroot ===<br />
<br />
В Sisyphus RPM buildroot удаляется самим RPM, и поэтому удалять его вручную не требуется.<br />
<br />
== %check ==<br />
<br />
Начиная с <tt>rpm-4.0.4-alt98.18</tt>, для упрощения проведения автоматических тестов собранного кода поддерживается секция <tt>%check</tt>; типичные примеры:<br />
<br />
%check<br />
make check<br />
<br />
%check<br />
make -k check<br />
<br />
%check<br />
%make_build -k check<br />
<br />
[http://lists.altlinux.org/pipermail/devel/2009-September/174904.html Обратите внимание:] <tt>%check</tt> выполняется после <tt>%install</tt>, т.е. by design не влияет на результат работы <tt>%install</tt>.<br />
<br />
Ненулевой код возврата по умолчанию приводит к останову сборки (в т.ч. и на <tt>git.alt</tt>); это возможно изменить при помощи<br />
%def_disable check<br />
<br />
== %clean ==<br />
<br />
Sisyphus RPM автоматически очищает BuildRoot пакета (с помощью макроса <tt>%clean_buildroot</tt>). Таким образом, ручная очистка BuildRoot является ненужной (а точнее — вредной, поскольку повышает вероятность ошибки).<br />
<br />
Если секция <tt>%clean</tt> пуста, то рекомендуется вообще не включать её в spec-файл.<br />
<br />
== %files ==<br />
<br />
В отличие от других веток RPM, Sisyphus RPM автоматически подставляет в начало каждой секции <tt>%files</tt> и в начало каждого файла, включаемого с помощью <tt>%files -f</tt>, директиву <tt>%defattr</tt> со значением макроса <tt>%_defattr</tt>.<br />
<br />
Таким образом, ручное указание <tt>%defattr</tt> является излишним.<br />
<br />
== %changelog ==<br />
<br />
{{Main|Руководство по написанию changelog}}</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Python_2.6/Rebuild&diff=11787Python 2.6/Rebuild2009-07-21T12:28:32Z<p>EvgeniiTerechkov: - добавил свои пакеты</p>
<hr />
<div>Информация по пакетам, пересобранным энтузиастами в локальных хешерах<br />
<br />
=== Собираются ===<br />
<br />
Список пакетов, которые пересобираются с Python 2.6 (ожидается, что они удачно пересоберутся сборщиком в общей shared task)<br />
<br />
asciidoc<br />
canto<br />
ffc<br />
gnome-doc-utils<br />
instant<br />
libxml2<br />
mercurial<br />
pornotube-dl<br />
python-module-BeautifulSoup<br />
python-module-MySQLdb<br />
python-module-Numeric<br />
python-module-PyQt4<br />
python-module-chardet<br />
python-module-cups<br />
python-module-dbus<br />
python-module-ferari<br />
python-module-fiat<br />
python-module-lxml<br />
python-module-nose<br />
python-module-numpy<br />
python-module-protocols<br />
python-module-pycairo<br />
python-module-pygobject<br />
python-module-pyme<br />
python-module-qt<br />
python-module-serial<br />
python-module-setuptools<br />
python-module-sip<br />
python-module-swiginac<br />
python-module-twisted<br />
python-module-twisted-core<br />
python-module-ufc<br />
python-module-wx<br />
python-module-zconfig<br />
python-module-zope.interface<br />
rpmlint<br />
scons<br />
swig<br />
ufl<br />
<br />
<br />
Еще есть некоторое количество пакетов, зависимость от питона для которых не понятна: в build depends питон не стоит, однако бинарный пакет зависит от питона:<br />
<br />
gtk-doc<br />
glib2<br />
libgtk+2<br />
xorg-xcbproto-devel<br />
<br />
=== Исправленные ===<br />
<br />
Пакеты, которые не пересобираются с Python 2.6, но для которых есть исправления (не от мейнтейнеров), поэтому для сборки пакет нужно брать из другого места:<br />
<br />
python-module-peak (мейнтейнер vvk@) -- исправление [http://git.altlinux.org/people/real/packages/python-module-peak.git python-module-peak] от real@<br />
python-module-Pyrex (мейнтейнер rider@) -- исправление [http://git.altlinux.org/people/real/packages/python-module-Pyrex.git python-module-Pyrex] от real@<br />
python-module-RuleDispatch (мейнтейнер zver@) -- исправление [http://git.altlinux.org/people/real/packages/python-module-RuleDispatch.git python-module-RuleDispatch] от real@<br />
<br />
=== Не пересобираются ===<br />
<br />
<br />
Пакеты, которые не пересобираются с Python 2.6 и для которых нет исправлений:<br />
<br />
python-module-pygtk (мейнтейнер aris@) -- в ожидании решения "always overflow destination buffer" (#баг в багзилле??)<br />
<br />
[[Категория:Sisyphus]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Git.alt/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA&diff=11729Git.alt/Справочник2009-07-19T09:41:46Z<p>EvgeniiTerechkov: Добавил пример закидывания srpm-файла</p>
<hr />
<div>{{DISPLAYTITLE:git.alt/Справочник}}<br />
Эта страница документирует команды [[git.alt]], но не является [[Краткое руководство пользователя git.alt|кратким руководством]] или учебником по нему.<br />
<br />
__TOC__<br />
<br />
== Как воспользоваться <tt>git.alt</tt>? ==<br />
<br />
<tt>git.alt</tt> предоставляет несколько видов доступа:<br />
<br />
* ssh-доступ. Предоставляет несколько команд: для поиска репозиториев, их клонирования, создания, удаления, а также служебных.<br />
* <tt>ssh</tt>-, <tt>git</tt>-, <tt>rsync</tt>-, <tt>http</tt>-доступ для непосредственной работы с репозиториями.<br />
*: <tt>git</tt>-, <tt>rsync</tt>- и <tt>http</tt>-адреса предоставляют r/o доступ, <tt>ssh</tt> — r/w.<br />
* Web-интерфейс. Находится по адресу [http://git.altlinux.org/ git.altlinux.org], предоставляет навигацию по списку репозиториев и <tt>gitweb</tt> для индивидуальных репозиториев.<br />
<br />
ssh-доступ к <tt>git.alt</tt> выдаётся после [[Join|принятия]] в ALT Linux Team.<br />
<br />
<div id="access"></div><br />
== SSH-доступ ==<br />
<br />
<tt>git.alt</tt> доступен по SSH по адресу <tt>git.altlinux.org:222</tt>. Аккаунт для доступа — <tt>git_$USERNAME</tt>, где USERNAME — имя, присвоенное в процессе принятия в Team, с символами «-» заменёнными на «_».<br />
<br />
Пример <tt>~/.ssh/config</tt>:<br />
Host git.alt<br />
HostName git.altlinux.org<br />
Port 222<br />
User git_USERNAME<br />
<br />
Для работы [[fsi:SSHFirewall|через прокси]] и в других сложных условиях SSH также доступен по адресу <tt>git.altlinux.org:443</tt>.<br />
<br />
Для работы с <tt>git.alt</tt> необходимо настроить свой <tt>git</tt> — параметры <tt>user.name</tt>, <tt>user.email</tt>, <tt>user.signingkey</tt>:<br />
$ git config --global user.signingkey "<ID ключа GPG для подписи тэгов>"<br />
$ git config --global user.email "<ваш email, как мантейнера>"<br />
$ git config --global user.name "FirstName LastName"<br />
Например,<br />
$ git config --global user.signingkey 0xA26F54C8<br />
$ git config --global user.email dottedmag@altlinux.org<br />
$ git config --global user.name "Mikhail Gusarov"<br />
<br />
Список команд выдаётся при ssh-логине с командой <tt>help</tt>:<br />
<br />
$ ssh git.alt help<br />
Available commands:<br />
help<br />
git-receive-pack <directory><br />
git-upload-pack <directory><br />
charset <path to git repository> [<charset>]<br />
clone <path to git repository> [<path to directory>]<br />
find-package <pattern><br />
init-db <path to directory><br />
ls [<path to directory>]<br />
mv-db <path to source directory> <path to destination directory><br />
quota<br />
rm-db <path to git repository><br />
task {list|new|show|drop|add|run} ...<br />
build <path to gear repository> <tag name> [<binary package repository name>] [<project name>]<br />
acl {--help|<binary package repository name> ...}<br />
$<br />
<br />
Во всех командах суффикс директорий репозиториев <tt>.git</tt> опционален и может быть опущен. В выводе команд <tt>.git</tt> присутствует всегда.<br />
<br />
<!-- please don't remove -- there are links to #git etc --><br />
<div id="git"></div><br />
=== Управление git-репозиториями ===<br />
<br />
==== ls ====<br />
<br />
'''$ ssh git.alt ls [<directory>]'''<br />
<br />
Эта команда позволяет посмотреть содержимое различных директорий на <tt>git.alt</tt>:<br />
<br />
$ ssh git.alt ls /people/dottedmag/public<br />
total 24<br />
drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git<br />
...<br />
drwxr-sr-x 5 4096 Jul 7 18:03 wackoconvert.git<br />
$<br />
<br />
Без параметров — показывает содержимое <tt>/people/$USERNAME</tt>:<br />
<br />
$ ssh git.alt ls<br />
total 16<br />
drwxr-s--- 5 4096 May 30 21:27 etc<br />
drwxr-sr-x 14 4096 Aug 13 23:53 packages<br />
drwxr-s--x 2 4096 Feb 13 2007 private<br />
drwxr-sr-x 8 4096 Aug 13 23:57 public<br />
$<br />
<br />
От этой же директории отсчитываются относительные пути:<br />
<br />
$ ssh git.alt ls public<br />
total 24<br />
drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git<br />
...<br />
drwxr-sr-x 5 4096 Jul 7 18:03 wackoconvert.git<br />
$<br />
<br />
==== find-package ====<br />
<br />
'''$ ssh git.alt find-package <pattern>'''<br />
<br />
Эта команда позволяет искать репозитории по переданному шаблону. Единственный метасимвол, допустимый в шаблоне — <tt>*</tt>. Репозитории ищутся в директории <tt>packages</tt> каждого пользователя, поскольку предполагается, что <tt>[[gear]]</tt>-репозитории располагаются именно там.<br />
<br />
$ ssh git.alt find-package glibc*<br />
/people/avm/packages/glibc.git 1216320095<br />
...<br />
/people/peet/packages/glibc-kernheaders.git 1177084354<br />
/people/mike/packages/glibc-kvercheck.git 1160664813<br />
$ ssh git.alt find-package glibc<br />
/people/avm/packages/glibc.git 1216320095<br />
...<br />
/people/peet/packages/glibc.git 1177084600<br />
$<br />
<br />
Вторая колонка в выводе <tt>find-package</tt> — unixtime времени последнего обновления репозитория. Получить время в привычном представлении можно с помощью команды <tt>date -d @unixtime</tt>.<br />
<br />
==== clone ====<br />
<br />
'''$ ssh git.alt clone <path to git repository> [<destination directory>]'''<br />
<br />
Эта команда позволяет «склонировать», то есть создать в своей директории копию репозитория для начала работы над ним.<br />
<br />
Без второго аргумента — клонирует в директорию <tt>packages</tt>:<br />
<br />
$ ssh git.alt clone /people/ldv/glibc.git<br />
Initialized empty Git repository in /people/dottedmag/packages/glibc.git/<br />
$<br />
<br />
Вторым аргументом можно указать как директорию, в которую нужно поместить клон репозитория, так и название репозитория:<br />
<br />
$ ssh git.alt clone /people/ldv/glibc.git public<br />
Initialized empty Git repository in /people/dottedmag/public/glibc.git/<br />
$ ssh git.alt clone /people/ldv/glibc.git public/test<br />
Initialized empty Git repository in /people/dottedmag/public/test.git/<br />
$<br />
<br />
Можно также склонировать репозиторий, находящийся вне <tt>git.alt</tt>:<br />
<br />
$ ssh git.alt clone <nowiki>http://github.com/dottedmag/madshelf.git</nowiki> public<br />
Initialized empty Git repository in /people/dottedmag/packages/public.git/<br />
Getting alternates list for <nowiki>http://github.com/dottedmag/madshelf.git</nowiki><br />
...<br />
walk 03d18e21d85fa30fc3ac8d921eb391e2a7bb242a<br />
$<br />
<br />
==== init-db ====<br />
<br />
'''$ ssh git.alt init-db <path to directory>'''<br />
Позволяет создать новый git-репозиторий. По умолчанию репозиторий создаётся в директории <tt>packages</tt>:<br />
$ ssh git.alt init-db test<br />
Initialized empty Git repository in ./<br />
girar-init-db: /people/dottedmag/packages/test.git<br />
При указании пути создаёт репозиторий по указанному пути:<br />
$ ssh git.alt init-db public/test<br />
Initialized empty Git repository in ./<br />
girar-init-db: /people/dottedmag/public/test.git<br />
<br />
==== mv-db ====<br />
<br />
'''$ ssh git.alt mv-db <path to source directory> <path to destination directory>'''<br />
Позволяет перемещать и переименовывать свои репозитории. При указании только имени репозитория подразумевается директория <tt>packages</tt>.<br />
<br />
Перемещение packages/test.git в public/newname.git:<br />
$ ssh git.alt mv-db test public/newname<br />
$<br />
Перемещение public/newname.git в packages/test.git:<br />
$ ssh git.alt mv-db public/newname test<br />
$<br />
Переименовывание packages/test.git в packages/megatest.git:<br />
$ ssh git.alt mv-db test megatest<br />
$<br />
<br />
==== rm-db ====<br />
<br />
'''$ ssh git.alt rm-db <path to git repository>'''<br />
Позволяет удалять свои репозитории. При указании только имени репозитория подразумевается директория <tt>packages</tt>:<br />
$ ssh git.alt rm-db megatest # удаляет packages/megatest.git<br />
$ ssh git.alt rm-db public/test<br />
<br />
<div id="acl"></div><br />
=== Управление ACL пакетов ===<br />
<br />
''Смотри [[ACL]] для общей информации об ACL пакетов в Sisyphus.''<br />
<br />
Команда <tt>acl</tt> требует указания репозитория, над которым производится работа. На данный момент существует только репозиторий Sisyphus с меткой <tt>sisyphus</tt>.<br />
<br />
Если в командной строке указан только репозиторий, но не указана подкоманда, то список команд читается со стандартного ввода, по одной команде на строку, и выполняется тразакционно: ошибка в выполнении хотя бы одной команды отменяет действие всего набора команд:<br />
$ ssh git.alt acl sisyphus keyjnote<br />
girar-acl: Go ahead and type your commands<br />
'''keyjnote add peet'''<br />
'''keyjnote add raorn'''<br />
'''^D'''<br />
girar-acl: 2 command(s) queued<br />
$<br />
<br />
Все команды, меняющие состав группы или ACL пакета, могут производиться только ''лидером'' — первым в списке ACL пакета или в составе группы. Все такие операции выполняются асинхронно и результат их выполнения сообщается по email.<br />
<br />
==== acl show ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> show'''<br />
Показывает ACL указанного пакета<br />
<br />
$ ssh git.alt acl sisyphus bugzilla show<br />
bugzilla @nobody<br />
<br />
'''$ ssh git.alt acl <binary repository> @<group> show'''<br />
Показывает состав указанной группы майнтайнеров.<br />
<br />
$ ssh git.alt acl sisyhpus @python show<br />
@python ns ldv george akhavr bga lav swi at hiddenman sin mithraen kas<br />
<br />
==== acl check ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> check'''<br />
Проверяет ACL указанного пакета<br />
<br />
$ ssh git.alt acl sisyphus bugzilla check<br />
girar-check-perms: access to bugzilla ALLOWED for ldv: project is orphaned<br />
<br />
==== acl add/del ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> add|del <login>|@<group> ...<br />
Добавляет/удаляет указанных пользователей и группы в/из ACL указанного пакета.<br />
<br />
$ ssh git.alt acl sisyphus keyjnote add damir<br />
girar-acl: 1 command(s) queued<br />
$ ssh git.alt acl sisyphus keyjnote del damir<br />
girar-acl: 1 command(s) queued<br />
<br />
'''$ ssh git.alt acl <binary repository> @<group> add|del <login>|@<group> ...<br />
Добавляет/удаляет указанных пользователей и группы в/из указанной группы.<br />
<br />
$ ssh git.alt acl sisyphus ns add @python<br />
girar-acl: 1 command(s) queued<br />
$ ssh git.alt acl sisyphus ns del @python<br />
girar-acl: 1 command(s) queued<br />
<br />
==== acl replace ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package>|@<group> replace <login>|@<group> <login>|@<group>'''<br />
Заменяет указанную запись в ACL пакета или составе группы на вторую указанную.<br />
<br />
$ ssh git.alt acl sisyphus keyjnote replace dottedmag @python<br />
Заменяет в ACL пакета <tt>keyjnote</tt> запись <tt>dottedmag</tt> на <tt>@python</tt>.<br />
<br />
==== acl leader ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> leader <login>|@<group><br />
Устанавливает лидера пакета — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке ACL пакета до выполнения этой команды.<br />
<br />
$ ssh git.alt acl sisyphus keyjnote leader @python<br />
<br />
'''$ ssh git.alt acl <binary repository> @<group> leader <login>|@<group><br />
Устанавливает лидера группы — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке членов группы до выполнения этой команды.<br />
<br />
$ ssh git.alt acl sisyphus @python leader ns<br />
<br />
==== acl nmu ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> nmu add|del [<login> [<start date> [<end date>]]]'''<br />
Выдаёт/снимает разрешение на проведение [[NMU]] указанного пакета.<br />
<br />
Параметры:<br />
* '''login''' — аккаунт, которому даётся разрешение на NMU. '''*''' или отсутствие параметра означает «кому угодно»<br />
* '''start date''' — дата начала действия NMU, в формате unixtime. Отсутствие параметра означает «немедленно»<br />
* '''end date''' — дата окончания действия NMU, в формате unixtime. Отсутствие параметра означает «никогда».<br />
<br />
Удаление разрешения происходит по точному соответствию имени аккаунта, так что <tt>del *</tt> не приведёт к отмене всех NMU, выданных на пакет. С другой стороны, <tt>del user</tt> приведёт к отмене всех NMU, выданных данному пользователю.<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> nmu show'''<br />
Выдаёт список NMU для указанного пакета, в формате<br />
<package> <login> <start date> <end date><br />
<br />
0 в поле ''end date'' означает «без ограничения».<br />
<br />
<div id="build"></div><br />
=== Сборка пакетов ===<br />
<br />
Для сборки пакетов используется механизм ''заданий'' — пользователь указывает, какие [[gear]]-репозитории необходимо собрать одной транзакцией, создавая задание, после чего запускает его на выполнение. Задание выполняются асинхронно. После завершения задания пользователю приходит отчёт по e-mail (плюс, отчёты о сборке доступны на git.alt, см. ниже). Каждое задание предназначено для изменения только одного репозитория пакетов.<br />
<br />
==== task ====<br />
<br />
'''$ ssh git.alt task ls [--all]'''<br />
Показывает текущий список всех заданий пользователя с указанием их статуса и краткого содержания.<br /><br />
С указанием параметра <tt>--all</tt> показывает список заданий всех пользователей.<br />
'''$ ssh git.alt task show [<task_id>]'''<br />
Показывает содержимое указанного (по умолчанию последнего созданного) задания.<br />
'''$ ssh git.alt task new [<binary_repository_name>]'''<br />
Создаёт новое задание для сборки пакетов в указанный репозиторий пакетов (по умолчанию — Sisyphus).<br /><br />
Список репозиториев можно узнать с помощью <tt>task new --help</tt>.<br /><br />
Данная команда выводит идентификатор задания на stdout.<br />
'''$ ssh git.alt task add [<task_id>] repo <gear_repo> <gear_tag>'''<br />
Добавляет в задание пакет, который необходимо собрать.<br /><br />
Пакет определяется двумя обязательными характеристиками: путём к gear-репозиторию и именем git-тэга.<br />
'''$ ssh git.alt task add [<task_id>] srpm <srpm file>'''<br />
Добавляет в задание пакет, который необходимо собрать.<br /><br />
Пакет определяется именем предварительно отправленного на сервер путём ''rsync git.alt:'' srpm-файла (Пример: ''rsync grace-5.1.22-alt6.src.rpm git.alt:'').<br />
'''$ ssh git.alt task add [<task_id>] copy <package> [<binary_repository_name>]'''<br />
Добавляет в задание имя пакета, который необходимо скопировать из другого репозитория пакетов (по умолчанию — Sisyphus).<br />
'''$ ssh git.alt task add [<task_id>] del <package>'''<br />
Добавляет в задание имя пакета, который необходимо удалить из репозитория.<br />
'''$ ssh git.alt task delsub <task_id> <subtask_id>'''<br />
Удаляет из указанного задания подзадание с указанным номером.<br />
'''$ ssh git.alt task run [<task_id>]'''<br />
Отправляет на выполнение указанное (по умолчанию последнее созданное) задание.<br />
'''$ ssh git.alt task share [<task_id>] <status|enabled|disabled>'''<br />
Показывает или изменяет режим доступа к указанному (по умолчанию последнему созданному) заданию.<br /><br />
Задание с режимом доступа ''share enabled'' может быть дополнено другими пользователями с помощью команды <tt>task add</tt>.<br /><br />
По умолчанию задания создаются в режиме доступа ''share disabled''.<br />
'''$ ssh git.alt task approve <task_id> <subtask_id>'''<br />
Подтверждает сборку подзадания с указанным номером, входящего в состав указанного чужого задания.<br /><br />
Используется для разрешения сборки автором, не имеющим полномочий для обновления собираемого пакета (NMU).<br />
'''$ ssh git.alt task rm [<task_id>]'''<br />
Удаляет указанное (по умолчанию последнее созданное) задание.<br />
<br />
Пример:<br />
$ ssh git.alt task ls<br />
girar-task ls: no tasks for ldv<br />
$ ssh git.alt task new<br />
1234<br />
new task #1234: owner=ldv repo=sisyphus<br />
$ ssh git.alt task ls<br />
#1234 NEW sisyphus<br />
$ ssh git.alt task show<br />
id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc=<br />
$ ssh git.alt task add repo vitmp 1.0-alt4<br />
task #1234: added #1 build tag 1.0-alt4 from /people/ldv/packages/vitmp.git<br />
$ ssh git.alt task show<br />
id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc=<br />
1:dir=/people/ldv/packages/vitmp.git<br />
1:tag_name=1.0-alt4<br />
1:tag_id=11c24aa6683506efd89b174de8dbea2af1cebf84<br />
1:tag_author=Dmitry V. Levin (for packages) <ldv@altlinux.org><br />
1:userid=ldv<br />
$ ssh git.alt task run<br />
task #1234: queued, result will be emailed to ldv@altlinux.org<br />
$ ssh git.alt task ls<br />
#1234 AWAITING sisyphus vitmp.git=1.0-alt4<br />
через некоторое время вывод последней команды изменится на<br />
#1234 BUILDING [locked] sisyphus vitmp.git=1.0-alt4<br />
а ещё через некоторое время — на<br />
#1234 DONE sisyphus vitmp.git=1.0-alt4<br />
<br />
==== build ====<br />
<br />
'''$ ssh git.alt build [-b <binary_repository_name>] <gear_repo_path 1> <gear_tag_name 1> ...'''<br />
Эта команда создаёт задание по сборке указанных пакетов и отправляет его на выполнение,<br />
последовательно запуская <tt>task new</tt>, <tt>task add</tt> и <tt>task run</tt>.<br /><br />
Параметр ''binary repository name'' имеет тот же смысл, что и в команде <tt>task new</tt>.<br /><br />
Параметры ''gear repo path'' и ''gear tag name'' имеют тот же смысл, что и в команде <tt>task add</tt>.<br />
<br />
==== Отчёты о сборке ====<br />
<br />
Информация о сборках публикуется по адресу http://git.altlinux.org/tasks/<br />
<br />
Каждая поддиректория <tt>/tasks/</tt> содержит информацию об одной сборочной задаче. Идентификатор задачи выдаётся при её создании и указывается в почтовых оповещениях.<br />
<br />
Задача может состоять из нескольких подзадач. Информация о каждой подзадаче публиуется в директориях <tt>/tasks/<id>/build/<sid></tt> и <tt>/tasks/<id>/gears/<sid></tt>.<br />
<br />
Наиболее интересные файлы:<br />
; <id>/task/log<br />
: краткий лог сборки<br />
; <id>/build/<sid>/<arch>/srpm.log<br />
: лог сборки подзадачи для архитектуры <arch>, если сборка производилась через incoming<br />
; <id>/build/<sid>/<arch>/log<br />
: лог сборки подзадачи для архитектуры <arch>, если сборка производилась через git.alt<br />
; <id>/gears/<sid><br />
: информация о подзадаче <sid>, если сборка производилась через git.alt<br />
; <id>/gears/<sid>/git<br />
: частичный git-репозиторий, на основании которго собиралась подзадача <sid><br />
<br />
Более подробное описание структуры задания можно найти в [http://git.altlinux.org/people/ldv/packages/?p=girar-builder.git;a=blob_plain;f=TASK документации на girar-builder].<br />
<br />
Всё, что находится по адресу http://git.altlinux.org/tasks/, в равной<br />
степени доступно и по rsync.<br />
<br />
=== Вспомогательные команды ===<br />
<br />
==== charset ====<br />
<br />
'''$ ssh git.alt charset <path to git repository> [<charset>]'''<br />
<br />
Позволяет узнать или установить кодировку, используемую почтовым клиентом при отправке уведомлений, содержащих цитаты изменений файлов указанного git-репозитория:<br />
<br />
$ ssh git.alt charset packages/glibc<br />
utf-8<br />
$ ssh git.alt charset packages/glibc cp1252<br />
$ ssh git.alt charset packages/glibc<br />
cp1252<br />
$<br />
<br />
==== quota ====<br />
<br />
'''$ ssh git.alt quota'''<br />
<br />
Позволяет узнать квоту и занимаемое пользователем дисковое пространство.<br />
<br />
$ ssh git.alt quota<br />
Filesystem blocks quota limit grace files quota limit grace<br />
/dev/simfs 16932 977M 1465M 555 100k 150k <br />
$<br />
<br />
==== git-receive-pack, git-upload-pack ====<br />
<br />
Эти команды используются утилитами <tt>git push</tt>, <tt>git pull</tt> и подобными, и не предназначены для вызова пользователем.<br />
<br />
=== Клонирование и работа с репозиториями ===<br />
<br />
Работа с git-репозиториями, расположенными на <tt>git.alt</tt>, ничем не отличается от работы с другими git-репозиториями.<br />
<br />
URL-ы репозиториев на git.alt:<br />
; '''git''' (r/o)<br />
: <tt>git://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git</tt><br />
; '''rsync''' (r/o)<br />
: <tt>git.altlinux.org::people/$USER/(packages|public)/$PACKAGE.git</tt><br />
; '''http''' (r/o)<br />
: <tt><nowiki>http://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git</nowiki></tt><br />
; '''ssh''' (r/w)<br />
: <tt>ssh://git.altlinux.org/people/$USER/(etc|packages|public|private)/$PACKAGE.git</tt><br />
<br />
HTTP- и git-URL-ы репозиториев можно в любой момент узнать в web-интерфейсе <tt>git.alt</tt>.<br />
<br />
=== Web-интерфейс ===<br />
<br />
Располагается по адресу http://git.altlinux.org/<br />
<br />
Предоставляет навигацию по публичным репозиториям пользователей (директории <tt>/people/$USERNAME/{packages,public}</tt>) и <tt>gitweb</tt>-интерфейс к этим репозиториям.<br />
<br />
Кроме этого, в web-интерфейсе представлены репозитории <tt>/archive</tt>, списки <tt>/acl</tt> и файл <tt>people-packages-list</tt>, содержащий все репозитории из директорий <tt>/people/$USERNAME/packages</tt> и даты их последнего изменения (в unixtime).<br />
<br />
== Структура репозиториев ==<br />
<br />
<tt>git.alt</tt> содержит три дерева репозиториев:<br />
<br />
* репозитории <tt>/people/$USERNAME</tt> для каждого зарегистрированного пользователя<br />
* репозитории <tt>/gears</tt> с исходным кодом для пакетов Sisyphus, собранных с помощью <tt>git.alt</tt>.<br />
* репозитории <tt>/archive</tt> с исходным кодом для пакетов Sisyphus, прошедших [[incoming]].<br />
<br />
=== /people ===<br />
<br />
Каждому зарегистрированному на git.alt разработчику предоставляется место для git-репозиториев, начинающееся с <tt>/people/$USERNAME</tt>. Доступ на запись в эти директории даётся только владельцу. Структура для хранения репозиториев жёстко определена:<br />
<br />
==== /people/$USERNAME/etc ====<br />
<br />
Содержит репозитории <tt>packages.git</tt>, <tt>private.git</tt>, <tt>public.git</tt>, с помощью которых можно управлять [[#Почтовая подписка|почтовой подпиской]]. Эти репозитории доступны на чтение только владельцу.<br />
<br />
==== /people/$USERNAME/packages ====<br />
<br />
Директория предназначена для хранения gear-репозиториев для пакетов Сизифа. Публично доступна.<br />
<br />
git-репозитории в этой директории будут искаться при выполнении команды <tt>find-package</tt>, и эта директория будет использоваться по умолчанию в командах <tt>init-db</tt>, <tt>clone</tt>, <tt>build</tt>.<br />
<br />
==== /people/$USERNAME/private ====<br />
<br />
Директория предназначена для хранения приватных репозиториев, о существовании и содержании которых должно быть известно только самому разработчику.<br />
<br />
Для удобства работают прямые http-ссылки на файлы репозиториев, размещённых в этой директории.<br />
<br />
==== /people/$USERNAME/public ====<br />
<br />
Директория предназначен для хранения публичных git-репозиториев, не являющихся gear-репозиториями для пакетов Сизифа.<br />
<br />
<div id="gears"></div><br />
=== /gears ===<br />
<br />
В эту директорию помещаются git-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]]. Добавление исходного кода в репозиторий <tt>/gears</tt> происходит после успешной сборки пакета с помощью команд <tt>git.alt</tt> <tt>task</tt> или <tt>build</tt>.<br />
<br />
Каждый git-репозиторий в <tt>/gears</tt> назван по имени пакета с исходным кодом. Бранчи в нём называются по имени ветки, в которую собрался пакет (<tt>sisyphus</tt>, <tt>branch5.0</tt> и т.д). Тэги в репозитории соответствуют собранным версиям пакетов (<tt>1.0-alt1</tt>, <tt>1.0-alt0.M50.1</tt> и т.д.).<br />
<br />
=== /srpms ===<br />
<br />
В этой директории размещаются git-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]], собранных с помощью [[Incoming]].<br />
<br />
После первой сборки командами <tt>task</tt> или <tt>build</tt> <tt>git.alt</tt> репозиторий в <tt>/srpms</tt> замораживается.<br />
<br />
Поскольку git-репозитории <tt>/srpms</tt> создаются на основе <tt>src.rpm</tt>-пакетов, а сборка с помощью [[Incoming]] объявлена устаревшей, то использовать их стоит только из исторического интереса.<br />
<br />
<div id="email"></div><br />
<br />
== Почтовая подписка ==<br />
<br />
На <tt>git.alt</tt> реализовано два вида почтовой подписки на события:<br />
* Пользователь подписывается на события, происходящие в репозиториях <tt>packages</tt> и <tt>public</tt>.<br />
* Пользователь подписывает кого-то на события, происходящие в '''его''' репозиториях <tt>packages</tt>, <tt>public</tt> и <tt>private</tt>.<br />
<br />
Для подписки используются репозитории из каталога <tt>etc</tt>: <tt>packages.git</tt>, <tt>public.git</tt>, <tt>private.git</tt> в каталоге пользователя. Схема работы с подписками напоминает работу с <tt>CVSROOT</tt> из CVS: пользователь клонирует нужный репозиторий, коммитит изменения в него и push-ит обратно на сервер, после чего изменения вступают в силу.<br />
<br />
В каждом из трёх репозиториев находится два файла: <tt>email-subscription</tt> и <tt>email-distribution</tt> (точнее, в <tt>private.git</tt> — только <tt>email-distribution</tt>). <tt>git.alt</tt> использует бранч <tt>master</tt> и не обращает внимания на остальные бранчи в этих репозиториях.<br />
<br />
=== email-subscription ===<br />
<br />
Этот файл позволяет подписаться на события в публичных репозиториях <tt>git.alt</tt>. Формат файла — последовательность строк следующего вида:<br />
$USER $PACKAGE $REFTYPE $REFNAME<br />
где<br />
* $USER — имя пользователя <tt>git.alt</tt>,<br />
* $PACKAGE — имя пакета,<br />
* $REFTYPE — вид изменения: <tt>head</tt> — новые/удалённые коммиты, <tt>tag</tt> — новые/удалённые тэги (техническая подробность: второй компонент из изменяемой ссылки <tt>refs/*/*</tt>)<br />
<!-- или release (релизы для сборки пакетов. Пока что не работает. --><br />
* $REFNAME — имя изменения: имя бранча для коммитов, имя тэга для тэгов (техническая подробность: третий и последующие компоненты из изменяемой ссылки <tt>refs/*/*</tt>).<br />
Каждое из полей может быть полным именем или вайлдкардом <tt>*</tt>. Для имён пакетов также разрешён вайлдкард в конце имени (например, <tt>docs-*</tt>).<br />
<br />
==== Примеры ====<br />
<br />
Подписка на все события во всех репозиториях:<br />
* * * *<br />
Подписка на новые/удалённые тэги в репозитории /people/ldv/packages/glibc.git:<br />
ldv glibc tag *<br />
Действия для осуществления подписки:<br />
git clone git.alt:etc/packages.git<br />
cd packages<br />
echo 'ldv glibc tag *' >> email-subscription<br />
git commit -m "Subscribe to new tags in ldv's glibc repository" email-subscription<br />
git push<br />
<br />
=== email-distribution ===<br />
<br />
Этот файл позволяет подписать других пользователей <tt>git.alt</tt> на события в ваших репозиториях. Формат файла — последовательность строк вида:<br />
$PACKAGE $REFTYPE $REFNAME $MAILTO<br />
где<br />
* $PACKAGE, $REFTYPE, $REFNAME аналогичны параметрам из файла email-subscription<br />
* $MAILTO — разделённый запятыми список имён пользователей <tt>git.alt</tt> — получателей оповещения.<br />
Вайлдкарды в первых трёх полях допустимы так же, как и в email-subscription. Вайлдкарды в $MAILTO не допускаются.<br />
<br />
<br />
{{Category navigation|title=git.alt|category=git.alt|sortkey={{SUBPAGENAME}}}}<br />
<br />
[[Категория:Справочники]]<br />
<br />
[[en:git.alt reference]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Git.alt/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA&diff=9831Git.alt/Справочник2009-03-09T06:51:54Z<p>EvgeniiTerechkov: /* Отчёты о сборке */ - ошибки/уточнения</p>
<hr />
<div>{{DISPLAYTITLE:git.alt/Справочник}}<br />
Эта страница документирует команды [[git.alt]], но не является [[Краткое руководство пользователя git.alt|кратким руководством]] или учебником по нему.<br />
<br />
__TOC__<br />
<br />
== Как воспользоваться <tt>git.alt</tt>? ==<br />
<br />
<tt>git.alt</tt> предоставляет несколько видов доступа:<br />
<br />
* ssh-доступ. Предоставляет несколько команд: для поиска репозиториев, их клонирования, создания, удаления, а также служебных.<br />
* <tt>ssh</tt>-, <tt>git</tt>-, <tt>rsync</tt>-, <tt>http</tt>-доступ для непосредственной работы с репозиториями.<br />
*: <tt>git</tt>-, <tt>rsync</tt>- и <tt>http</tt>-адреса предоставляют r/o доступ, <tt>ssh</tt> — r/w.<br />
* Web-интерфейс. Находится по адресу [http://git.altlinux.org/ git.altlinux.org], предоставляет навигацию по списку репозиториев и <tt>gitweb</tt> для индивидуальных репозиториев.<br />
<br />
ssh-доступ к <tt>git.alt</tt> выдаётся после [[Join|принятия]] в ALT Linux Team.<br />
<br />
<div id="access"></div><br />
== SSH-доступ ==<br />
<br />
<tt>git.alt</tt> доступен по SSH по адресу <tt>git.altlinux.org:222</tt>. Аккаунт для доступа — <tt>git_$USERNAME</tt>, где USERNAME — имя, присвоенное в процессе принятия в Team, с символами «-» заменёнными на «_».<br />
<br />
Пример <tt>~/.ssh/config</tt>:<br />
Host git.alt<br />
HostName git.altlinux.org<br />
Port 222<br />
User git_USERNAME<br />
<br />
Для работы [[fsi:SSHFirewall|через прокси]] и в других сложных условиях SSH также доступен по адресу <tt>git.altlinux.org:443</tt>.<br />
<br />
Для работы с <tt>git.alt</tt> необходимо настроить свой <tt>git</tt> — параметры <tt>user.name</tt>, <tt>user.email</tt>, <tt>user.signingkey</tt>:<br />
$ git config --global user.signingkey "<ID ключа GPG для подписи тэгов>"<br />
$ git config --global user.email "<ваш email, как мантейнера>"<br />
$ git config --global user.name "FirstName LastName"<br />
Например,<br />
$ git config --global user.signingkey 0xA26F54C8<br />
$ git config --global user.email dottedmag@altlinux.org<br />
$ git config --global user.name "Mikhail Gusarov"<br />
<br />
Список команд выдаётся при ssh-логине с командой <tt>help</tt>:<br />
<br />
$ ssh git.alt help<br />
Available commands:<br />
help<br />
git-receive-pack <directory><br />
git-upload-pack <directory><br />
charset <path to git repository> [<charset>]<br />
clone <path to git repository> [<path to directory>]<br />
find-package <pattern><br />
init-db <path to directory><br />
ls [<path to directory>]<br />
mv-db <path to source directory> <path to destination directory><br />
quota<br />
rm-db <path to git repository><br />
task {list|new|show|drop|add|run} ...<br />
build <path to gear repository> <tag name> [<binary package repository name>] [<project name>]<br />
acl {--help|<binary package repository name> ...}<br />
$<br />
<br />
Во всех командах суффикс директорий репозиториев <tt>.git</tt> опционален и может быть опущен. В выводе команд <tt>.git</tt> присутствует всегда.<br />
<br />
<!-- please don't remove -- there are links to #git etc --><br />
<div id="git"></div><br />
=== Управление git-репозиториями ===<br />
<br />
==== ls ====<br />
<br />
'''$ ssh git.alt ls [<directory>]'''<br />
<br />
Эта команда позволяет посмотреть содержимое различных директорий на <tt>git.alt</tt>:<br />
<br />
$ ssh git.alt ls /people/dottedmag/public<br />
total 24<br />
drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git<br />
...<br />
drwxr-sr-x 5 4096 Jul 7 18:03 wackoconvert.git<br />
$<br />
<br />
Без параметров — показывает содержимое <tt>/people/$USERNAME</tt>:<br />
<br />
$ ssh git.alt ls<br />
total 16<br />
drwxr-s--- 5 4096 May 30 21:27 etc<br />
drwxr-sr-x 14 4096 Aug 13 23:53 packages<br />
drwxr-s--x 2 4096 Feb 13 2007 private<br />
drwxr-sr-x 8 4096 Aug 13 23:57 public<br />
$<br />
<br />
От этой же директории отсчитываются относительные пути:<br />
<br />
$ ssh git.alt ls public<br />
total 24<br />
drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git<br />
...<br />
drwxr-sr-x 5 4096 Jul 7 18:03 wackoconvert.git<br />
$<br />
<br />
==== find-package ====<br />
<br />
'''$ ssh git.alt find-package <pattern>'''<br />
<br />
Эта команда позволяет искать репозитории по переданному шаблону. Единственный метасимвол, допустимый в шаблоне — <tt>*</tt>. Репозитории ищутся в директории <tt>packages</tt> каждого пользователя, поскольку предполагается, что <tt>[[gear]]</tt>-репозитории располагаются именно там.<br />
<br />
$ ssh git.alt find-package glibc*<br />
/people/avm/packages/glibc.git 1216320095<br />
...<br />
/people/peet/packages/glibc-kernheaders.git 1177084354<br />
/people/mike/packages/glibc-kvercheck.git 1160664813<br />
$ ssh git.alt find-package glibc<br />
/people/avm/packages/glibc.git 1216320095<br />
...<br />
/people/peet/packages/glibc.git 1177084600<br />
$<br />
<br />
Вторая колонка в выводе <tt>find-package</tt> — unixtime времени последнего обновления репозитория.<br />
<br />
==== clone ====<br />
<br />
'''$ ssh git.alt clone <path to git repository> [<destination directory>]'''<br />
<br />
Эта команда позволяет «склонировать», то есть создать в своей директории копию репозитория для начала работы над ним.<br />
<br />
Без второго аргумента — клонирует в директорию <tt>packages</tt>:<br />
<br />
$ ssh git.alt clone /people/ldv/glibc.git<br />
Initialized empty Git repository in /people/dottedmag/packages/glibc.git/<br />
$<br />
<br />
Вторым аргументом можно указать как директорию, в которую нужно поместить клон репозитория, так и название репозитория:<br />
<br />
$ ssh git.alt clone /people/ldv/glibc.git public<br />
Initialized empty Git repository in /people/dottedmag/public/glibc.git/<br />
$ ssh git.alt clone /people/ldv/glibc.git public/test<br />
Initialized empty Git repository in /people/dottedmag/public/test.git/<br />
$<br />
<br />
Можно также склонировать репозиторий, находящийся вне <tt>git.alt</tt>:<br />
<br />
$ ssh git.alt clone <nowiki>http://github.com/dottedmag/madshelf.git</nowiki> public<br />
Initialized empty Git repository in /people/dottedmag/packages/public.git/<br />
Getting alternates list for <nowiki>http://github.com/dottedmag/madshelf.git</nowiki><br />
...<br />
walk 03d18e21d85fa30fc3ac8d921eb391e2a7bb242a<br />
$<br />
<br />
==== init-db ====<br />
<br />
'''$ ssh git.alt init-db <path to directory>'''<br />
Позволяет создать новый git-репозиторий. По умолчанию репозиторий создаётся в директории <tt>packages</tt>:<br />
$ ssh git.alt init-db test<br />
Initialized empty Git repository in ./<br />
girar-init-db: /people/dottedmag/packages/test.git<br />
При указании пути создаёт репозиторий по указанному пути:<br />
$ ssh git.alt init-db public/test<br />
Initialized empty Git repository in ./<br />
girar-init-db: /people/dottedmag/public/test.git<br />
<br />
==== mv-db ====<br />
<br />
'''$ ssh git.alt mv-db <path to source directory> <path to destination directory>'''<br />
Позволяет перемещать и переименовывать свои репозитории. При указании только имени репозитория подразумевается директория <tt>packages</tt>.<br />
<br />
Перемещение packages/test.git в public/newname.git:<br />
$ ssh git.alt mv-db test public/newname<br />
$<br />
Перемещение public/newname.git в packages/test.git:<br />
$ ssh git.alt mv-db public/newname test<br />
$<br />
Переименовывание packages/test.git в packages/megatest.git:<br />
$ ssh git.alt mv-db test megatest<br />
$<br />
<br />
==== rm-db ====<br />
<br />
'''$ ssh git.alt rm-db <path to git repository>'''<br />
Позволяет удалять свои репозитории. При указании только имени репозитория подразумевается директория <tt>packages</tt>:<br />
$ ssh git.alt rm-db megatest # удаляет packages/megatest.git<br />
$ ssh git.alt rm-db public/test<br />
<br />
<div id="acl"></div><br />
=== Управление ACL пакетов ===<br />
<br />
''Смотри [[ACL]] для общей информации об ACL пакетов в Sisyphus.''<br />
<br />
Команда <tt>acl</tt> требует указания репозитория, над которым производится работа. На данный момент существует только репозиторий Sisyphus с меткой <tt>sisyphus</tt>.<br />
<br />
Если в командной строке указан только репозиторий, но не указана подкоманда, то список команд читается со стандартного ввода, по одной команде на строку, и выполняется тразакционно: ошибка в выполнении хотя бы одной команды отменяет действие всего набора команд:<br />
$ ssh git.alt acl sisyphus keyjnote<br />
girar-acl: Go ahead and type your commands<br />
'''keyjnote add peet'''<br />
'''keyjnote add raorn'''<br />
'''^D'''<br />
girar-acl: 2 command(s) queued<br />
$<br />
<br />
Все команды, меняющие состав группы или ACL пакета, могут производиться только ''лидером'' — первым в списке ACL пакета или в составе группы. Все такие операции выполняются асинхронно и результат их выполнения сообщается по email.<br />
<br />
==== acl show ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> show'''<br />
Показывает ACL указанного пакета<br />
<br />
$ ssh git.alt acl sisyphus bugzilla show<br />
bugzilla @nobody<br />
<br />
'''$ ssh git.alt acl <binary repository> @<group> show'''<br />
Показывает состав указанной группы майнтайнеров.<br />
<br />
$ ssh git.alt acl sisyhpus @python show<br />
@python ns ldv george akhavr bga lav swi at hiddenman sin mithraen kas<br />
<br />
==== acl check ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> check'''<br />
Проверяет ACL указанного пакета<br />
<br />
$ ssh git.alt acl sisyphus bugzilla check<br />
girar-check-perms: access to bugzilla ALLOWED for ldv: project is orphaned<br />
<br />
==== acl add/del ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> add|del <login>|@<group> ...<br />
Добавляет/удаляет указанных пользователей и группы в/из ACL указанного пакета.<br />
<br />
$ ssh git.alt acl sisyphus keyjnote add damir<br />
girar-acl: 1 command(s) queued<br />
$ ssh git.alt acl sisyphus keyjnote del damir<br />
girar-acl: 1 command(s) queued<br />
<br />
'''$ ssh git.alt acl <binary repository> @<group> add|del <login>|@<group> ...<br />
Добавляет/удаляет указанных пользователей и группы в/из указанной группы.<br />
<br />
$ ssh git.alt acl sisyphus ns add @python<br />
girar-acl: 1 command(s) queued<br />
$ ssh git.alt acl sisyphus ns del @python<br />
girar-acl: 1 command(s) queued<br />
<br />
==== acl replace ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package>|@<group> replace <login>|@<group> <login>|@<group>'''<br />
Заменяет указанную запись в ACL пакета или составе группы на вторую указанную.<br />
<br />
$ ssh git.alt acl sisyphus keyjnote replace dottedmag @python<br />
Заменяет в ACL пакета <tt>keyjnote</tt> запись <tt>dottedmag</tt> на <tt>@python</tt>.<br />
<br />
==== acl leader ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> leader <login>|@<group><br />
Устанавливает лидера пакета — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке ACL пакета до выполнения этой команды.<br />
<br />
$ ssh git.alt acl sisyphus keyjnote leader @python<br />
<br />
'''$ ssh git.alt acl <binary repository> @<group> leader <login>|@<group><br />
Устанавливает лидера группы — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке членов группы до выполнения этой команды.<br />
<br />
$ ssh git.alt acl sisyphus @python leader ns<br />
<br />
==== acl nmu ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> nmu add|del [<login> [<start date> [<end date>]]]'''<br />
Выдаёт/снимает разрешение на проведение [[NMU]] указанного пакета.<br />
<br />
Параметры:<br />
* '''login''' — аккаунт, которому даётся разрешение на NMU. '''*''' или отсутствие параметра означает «кому угодно»<br />
* '''start date''' — дата начала действия NMU, в формате unixtime. Отсутствие параметра означает «немедленно»<br />
* '''end date''' — дата окончания действия NMU, в формате unixtime. Отсутствие параметра означает «никогда».<br />
<br />
Удаление разрешения происходит по точному соответствию имени аккаунта, так что <tt>del *</tt> не приведёт к отмене всех NMU, выданных на пакет. С другой стороны, <tt>del user</tt> приведёт к отмене всех NMU, выданных данному пользователю.<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> nmu show'''<br />
Выдаёт список NMU для указанного пакета, в формате<br />
<package> <login> <start date> <end date><br />
<br />
0 в поле ''end date'' означает «без ограничения».<br />
<br />
<div id="build"></div><br />
=== Сборка пакетов ===<br />
<br />
Для сборки пакетов используется механизм ''заданий'' — пользователь указывает, какие [[gear]]-репозитории необходимо собрать одной транзакцией, создавая задание, после чего запускает его на выполнение. Задание выполняются асинхронно. После завершения задания пользователю приходит отчёт по e-mail (плюс, отчёты о сборке доступны на git.alt, см. ниже). Каждое задание предназначено для изменения только одного репозитория пакетов.<br />
<br />
==== task ====<br />
<br />
'''$ ssh git.alt task ls [--all]'''<br />
Показывает текущий список всех заданий пользователя с указанием их статуса и краткого содержания.<br /><br />
С указанием параметра <tt>--all</tt> показывает список заданий всех пользователей.<br />
'''$ ssh git.alt task show [<task_id>]'''<br />
Показывает содержимое указанного (по умолчанию последнего созданного) задания.<br />
'''$ ssh git.alt task new [<binary_repository_name>]'''<br />
Создаёт новое задание для сборки пакетов в указанный репозиторий пакетов (по умолчанию — Sisyphus).<br /><br />
Список репозиториев можно узнать с помощью <tt>task new --help</tt>.<br /><br />
Данная команда выводит идентификатор задания на stdout.<br />
'''$ ssh git.alt task add [<task_id>] repo <gear_repo> <gear_tag>'''<br />
Добавляет в задание пакет, который необходимо собрать.<br /><br />
Пакет определяется двумя обязательными характеристиками: путём к gear-репозиторию и именем git-тэга.<br />
'''$ ssh git.alt task add [<task_id>] copy <package> [<binary_repository_name>]'''<br />
Добавляет в задание имя пакета, который необходимо скопировать из другого репозитория пакетов (по умолчанию — Sisyphus).<br />
'''$ ssh git.alt task add [<task_id>] del <package>'''<br />
Добавляет в задание имя пакета, который необходимо удалить.<br />
'''$ ssh git.alt task delsub <task_id> <subtask_id>'''<br />
Удаляет из указанного задания подзадание с указанным номером.<br />
'''$ ssh git.alt task run [<task_id>]'''<br />
Отправляет на выполнение указанное (по умолчанию последнее созданное) задание.<br />
'''$ ssh git.alt task share [<task_id>] <status|enabled|disabled>'''<br />
Показывает или изменяет режим доступа к указанному (по умолчанию последнему созданному) заданию.<br /><br />
Задание с режимом доступа ''share enabled'' может быть дополнено другими пользователями с помощью команды <tt>task add</tt>.<br /><br />
По умолчанию задания создаются в режиме доступа ''share disabled''.<br />
'''$ ssh git.alt task approve <task_id> <subtask_id>'''<br />
Подтверждает сборку подзадания с указанным номером, входящего в состав указанного чужого задания.<br /><br />
Используется для разрешения сборки автором, не имеющим полномочий для обновления собираемого пакета (NMU).<br />
'''$ ssh git.alt task rm [<task_id>]'''<br />
Удаляет указанное (по умолчанию последнее созданное) задание.<br />
<br />
Пример:<br />
$ ssh git.alt task ls<br />
girar-task ls: no tasks for ldv<br />
$ ssh git.alt task new<br />
1234<br />
new task #1234: owner=ldv repo=sisyphus<br />
$ ssh git.alt task ls<br />
#1234 NEW sisyphus<br />
$ ssh git.alt task show<br />
id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc=<br />
$ ssh git.alt task add repo vitmp 1.0-alt4<br />
task #1234: added #1 build tag 1.0-alt4 from /people/ldv/packages/vitmp.git<br />
$ ssh git.alt task show<br />
id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc=<br />
1:dir=/people/ldv/packages/vitmp.git<br />
1:tag_name=1.0-alt4<br />
1:tag_id=11c24aa6683506efd89b174de8dbea2af1cebf84<br />
1:tag_author=Dmitry V. Levin (for packages) <ldv@altlinux.org><br />
1:userid=ldv<br />
$ ssh git.alt task run<br />
task #1234: queued, result will be emailed to ldv@altlinux.org<br />
$ ssh git.alt task ls<br />
#1234 AWAITING sisyphus vitmp.git=1.0-alt4<br />
через некоторое время вывод последней команды изменится на<br />
#1234 BUILDING [locked] sisyphus vitmp.git=1.0-alt4<br />
а ещё через некоторое время — на<br />
#1234 DONE sisyphus vitmp.git=1.0-alt4<br />
<br />
==== build ====<br />
<br />
'''$ ssh git.alt build [-b <binary_repository_name>] <gear_repo_path 1> <gear_tag_name 1> ...'''<br />
Эта команда создаёт задание по сборке указанных пакетов и отправляет его на выполнение,<br />
последовательно запуская <tt>task new</tt>, <tt>task add</tt> и <tt>task run</tt>.<br /><br />
Параметр ''binary repository name'' имеет тот же смысл, что и в команде <tt>task new</tt>.<br /><br />
Параметры ''gear repo path'' и ''gear tag name'' имеют тот же смысл, что и в команде <tt>task add</tt>.<br />
<br />
==== Отчёты о сборке ====<br />
<br />
Краткие логи обработки свежих заданий можно найти по адресу<br />
http://git.altlinux.org/tasks/TID/task/log<br />
- где TID это номер задания.<br />
<br />
Полные логи сборок можно найти по адресу<br />
http://git.altlinux.org/tasks/TID/build/SID/ARCH/srpm.log (если собирали из incoming) и<br />
http://git.altlinux.org/tasks/TID/build/SID/ARCH/log (если собирали из git)<br />
- где SID это номер подзадания, ARCH это идентификатор архитектуры<br />
(сейчас i586 или x86_64).<br />
<br />
Если сборка подзадания производится из gear-репозитория, то<br />
всю информацию о входных данных этой сборки можно найти по адресу<br />
http://git.altlinux.org/tasks/TID/gears/SID/<br />
в том числе, частичная копия репозитория, содержащая собираемый тэг,<br />
доступна по адресу http://git.altlinux.org/tasks/TID/gears/SID/git<br />
<br />
Более подробное описание структуры задания можно найти по [http://git.altlinux.org/people/ldv/packages/?p=girar-builder.git;a=blob_plain;f=TASK адресу]<br />
<br />
Всё, что находится по адресу http://git.altlinux.org/tasks/, в равной<br />
степени доступно и по rsync.<br />
<br />
=== Вспомогательные команды ===<br />
<br />
==== charset ====<br />
<br />
'''$ ssh git.alt charset <path to git repository> [<charset>]'''<br />
<br />
Позволяет узнать или установить кодировку, используемую почтовым клиентом при отправке уведомлений, содержащих цитаты изменений файлов указанного git-репозитория:<br />
<br />
$ ssh git.alt charset packages/glibc<br />
utf-8<br />
$ ssh git.alt charset packages/glibc cp1252<br />
$ ssh git.alt charset packages/glibc<br />
cp1252<br />
$<br />
<br />
==== quota ====<br />
<br />
'''$ ssh git.alt quota'''<br />
<br />
Позволяет узнать квоту и занимаемое пользователем дисковое пространство.<br />
<br />
$ ssh git.alt quota<br />
Filesystem blocks quota limit grace files quota limit grace<br />
/dev/simfs 16932 977M 1465M 555 100k 150k <br />
$<br />
<br />
==== git-receive-pack, git-upload-pack ====<br />
<br />
Эти команды используются утилитами <tt>git push</tt>, <tt>git pull</tt> и подобными, и не предназначены для вызова пользователем.<br />
<br />
=== Клонирование и работа с репозиториями ===<br />
<br />
Работа с git-репозиториями, расположенными на <tt>git.alt</tt>, ничем не отличается от работы с другими git-репозиториями.<br />
<br />
URL-ы репозиториев на git.alt:<br />
; '''git''' (r/o)<br />
: <tt>git://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git</tt><br />
; '''rsync''' (r/o)<br />
: <tt>git.altlinux.org::people/$USER/(packages|public)/$PACKAGE.git</tt><br />
; '''http''' (r/o)<br />
: <tt><nowiki>http://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git</nowiki></tt><br />
; '''ssh''' (r/w)<br />
: <tt>ssh://git.altlinux.org/people/$USER/(etc|packages|public|private)/$PACKAGE.git</tt><br />
<br />
HTTP- и git-URL-ы репозиториев можно в любой момент узнать в web-интерфейсе <tt>git.alt</tt>.<br />
<br />
=== Web-интерфейс ===<br />
<br />
Располагается по адресу http://git.altlinux.org/<br />
<br />
Предоставляет навигацию по публичным репозиториям пользователей (директории <tt>/people/$USERNAME/{packages,public}</tt>) и <tt>gitweb</tt>-интерфейс к этим репозиториям.<br />
<br />
Кроме этого, в web-интерфейсе представлены репозитории <tt>/archive</tt>, списки <tt>/acl</tt> и файл <tt>people-packages-list</tt>, содержащий все репозитории из директорий <tt>/people/$USERNAME/packages</tt> и даты их последнего изменения (в unixtime).<br />
<br />
== Структура репозиториев ==<br />
<br />
<tt>git.alt</tt> содержит три дерева репозиториев:<br />
<br />
* репозитории <tt>/people/$USERNAME</tt> для каждого зарегистрированного пользователя<br />
* репозитории <tt>/gears</tt> с исходным кодом для пакетов Sisyphus, собранных с помощью <tt>git.alt</tt>.<br />
* репозитории <tt>/archive</tt> с исходным кодом для пакетов Sisyphus, прошедших [[incoming]].<br />
<br />
=== /people ===<br />
<br />
Каждому зарегистрированному на git.alt разработчику предоставляется место для git-репозиториев, начинающееся с <tt>/people/$USERNAME</tt>. Доступ на запись в эти директории даётся только владельцу. Структура для хранения репозиториев жёстко определена:<br />
<br />
==== /people/$USERNAME/etc ====<br />
<br />
Содержит репозитории <tt>packages.git</tt>, <tt>private.git</tt>, <tt>public.git</tt>, с помощью которых можно управлять [[#Почтовая подписка|почтовой подпиской]]. Эти репозитории доступны на чтение только владельцу.<br />
<br />
==== /people/$USERNAME/packages ====<br />
<br />
Директория предназначена для хранения gear-репозиториев для пакетов Сизифа. Публично доступна.<br />
<br />
git-репозитории в этой директории будут искаться при выполнении команды <tt>find-package</tt>, и эта директория будет использоваться по умолчанию в командах <tt>init-db</tt>, <tt>clone</tt>, <tt>build</tt>.<br />
<br />
==== /people/$USERNAME/private ====<br />
<br />
Директория предназначена для хранения приватных репозиториев, о существовании и содержании которых должно быть известно только самому разработчику.<br />
<br />
Для удобства работают прямые http-ссылки на файлы репозиториев, размещённых в этой директории.<br />
<br />
==== /people/$USERNAME/public ====<br />
<br />
Директория предназначен для хранения публичных git-репозиториев, не являющихся gear-репозиториями для пакетов Сизифа.<br />
<br />
<div id="gears"></div><br />
=== /gears ===<br />
<br />
В эту директорию помещаются git-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]]. Добавление исходного кода в репозиторий <tt>/gears</tt> происходит после успешной сборки пакета с помощью команд <tt>git.alt</tt> <tt>task</tt> или <tt>build</tt>.<br />
<br />
Каждый git-репозиторий в <tt>/gears</tt> назван по имени пакета с исходным кодом. Бранчи в нём называются по имени ветки, в которую собрался пакет (<tt>sisyphus</tt>, <tt>branch5.0</tt> и т.д). Тэги в репозитории соответствуют собранным версиям пакетов (<tt>1.0-alt1</tt>, <tt>1.0-alt0.M50.1</tt> и т.д.).<br />
<br />
=== /srpms ===<br />
<br />
В этой директории размещаются git-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]], собранных с помощью [[Incoming]].<br />
<br />
После первой сборки командами <tt>task</tt> или <tt>build</tt> <tt>git.alt</tt> репозиторий в <tt>/srpms</tt> замораживается.<br />
<br />
Поскольку git-репозитории <tt>/srpms</tt> создаются на основе <tt>src.rpm</tt>-пакетов, а сборка с помощью [[Incoming]] объявлена устаревшей, то использовать их стоит только из исторического интереса.<br />
<br />
<div id="email"></div><br />
<br />
== Почтовая подписка ==<br />
<br />
На <tt>git.alt</tt> реализовано два вида почтовой подписки на события:<br />
* Пользователь подписывается на события, происходящие в репозиториях <tt>public</tt> и <tt>packages</tt>.<br />
* Пользователь подписывает кого-то на события, происходящие в '''его''' репозиториях <tt>public</tt>, <tt>packages</tt> и <tt>private</tt>.<br />
<br />
Для подписки используются репозитории из каталога <tt>etc</tt>: <tt>packages.git</tt>, <tt>public.git</tt>, <tt>private.git</tt> в каталоге пользователя. Схема работы с подписками напоминает работу с <tt>CVSROOT</tt> из CVS: пользователь клонирует нужный репозиторий, коммитит изменения в него и push-ит обратно на сервер, после чего изменения вступают в силу.<br />
<br />
В каждом из трёх репозиториев находится два файла: <tt>email-subscription</tt> и <tt>email-distribution</tt> (точнее, в <tt>private.git</tt> — только <tt>email-distribution</tt>). <tt>git.alt</tt> использует бранч <tt>master</tt> и не обращает внимания на остальные бранчи в этих репозиториях.<br />
<br />
=== email-subscription ===<br />
<br />
Этот файл позволяет подписаться на события в публичных репозиториях <tt>git.alt</tt>. Формат файла — последовательность строк следующего вида:<br />
$USER $PACKAGE $REFTYPE $REFNAME<br />
где<br />
* $USER — имя пользователя <tt>git.alt</tt>,<br />
* $PACKAGE — имя пакета,<br />
* $REFTYPE — вид изменения: <tt>head</tt> — новые/удалённые коммиты, <tt>tag</tt> — новые/удалённые тэги (техническая подробность: второй компонент из изменяемой ссылки <tt>refs/*/*</tt>)<br />
<!-- или release (релизы для сборки пакетов. Пока что не работает. --><br />
* $REFNAME — имя изменения: имя бранча для коммитов, имя тэга для тэгов (техническая подробность: третий и последующие компоненты из изменяемой ссылки <tt>refs/*/*</tt>).<br />
Каждое из полей может быть полным именем или вайлдкардом <tt>*</tt>. Для имён пакетов также разрешён вайлдкард в конце имени (например, <tt>docs-*</tt>).<br />
<br />
==== Примеры ====<br />
<br />
Подписка на все события во всех репозиториях:<br />
* * * *<br />
Подписка на новые/удалённые тэги в репозитории /people/ldv/packages/glibc.git:<br />
ldv glibc tag *<br />
Действия для осуществления подписки:<br />
git clone git.alt:etc/packages.git<br />
cd packages<br />
echo 'ldv glibc tag *' >> email-subscription<br />
git commit -m "Subscribe to new tags in ldv's glibc repository" email-subscription<br />
git push<br />
<br />
=== email-distribution ===<br />
<br />
Этот файл позволяет подписать других пользователей <tt>git.alt</tt> на события в ваших репозиториях. Формат файла — последовательность строк вида:<br />
$PACKAGE $REFTYPE $REFNAME $MAILTO<br />
где<br />
* $PACKAGE, $REFTYPE, $REFNAME аналогичны параметрам из файла email-subscription<br />
* $MAILTO — разделённый запятыми список имён пользователей <tt>git.alt</tt> — получателей оповещения.<br />
Вайлдкарды в первых трёх полях допустимы так же, как и в email-subscription. Вайлдкарды в $MAILTO не допускаются.<br />
<br />
<br />
{{Category navigation|title=git.alt|category=git.alt|sortkey={{SUBPAGENAME}}}}<br />
<br />
[[Категория:Справочники]]<br />
<br />
[[en:git.alt reference]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Git.alt/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA&diff=9830Git.alt/Справочник2009-03-09T06:32:00Z<p>EvgeniiTerechkov: /* Сборка пакетов */ - где смотреть логи сборки</p>
<hr />
<div>{{DISPLAYTITLE:git.alt/Справочник}}<br />
Эта страница документирует команды [[git.alt]], но не является [[Краткое руководство пользователя git.alt|кратким руководством]] или учебником по нему.<br />
<br />
__TOC__<br />
<br />
== Как воспользоваться <tt>git.alt</tt>? ==<br />
<br />
<tt>git.alt</tt> предоставляет несколько видов доступа:<br />
<br />
* ssh-доступ. Предоставляет несколько команд: для поиска репозиториев, их клонирования, создания, удаления, а также служебных.<br />
* <tt>ssh</tt>-, <tt>git</tt>-, <tt>rsync</tt>-, <tt>http</tt>-доступ для непосредственной работы с репозиториями.<br />
*: <tt>git</tt>-, <tt>rsync</tt>- и <tt>http</tt>-адреса предоставляют r/o доступ, <tt>ssh</tt> — r/w.<br />
* Web-интерфейс. Находится по адресу [http://git.altlinux.org/ git.altlinux.org], предоставляет навигацию по списку репозиториев и <tt>gitweb</tt> для индивидуальных репозиториев.<br />
<br />
ssh-доступ к <tt>git.alt</tt> выдаётся после [[Join|принятия]] в ALT Linux Team.<br />
<br />
<div id="access"></div><br />
== SSH-доступ ==<br />
<br />
<tt>git.alt</tt> доступен по SSH по адресу <tt>git.altlinux.org:222</tt>. Аккаунт для доступа — <tt>git_$USERNAME</tt>, где USERNAME — имя, присвоенное в процессе принятия в Team, с символами «-» заменёнными на «_».<br />
<br />
Пример <tt>~/.ssh/config</tt>:<br />
Host git.alt<br />
HostName git.altlinux.org<br />
Port 222<br />
User git_USERNAME<br />
<br />
Для работы [[fsi:SSHFirewall|через прокси]] и в других сложных условиях SSH также доступен по адресу <tt>git.altlinux.org:443</tt>.<br />
<br />
Для работы с <tt>git.alt</tt> необходимо настроить свой <tt>git</tt> — параметры <tt>user.name</tt>, <tt>user.email</tt>, <tt>user.signingkey</tt>:<br />
$ git config --global user.signingkey "<ID ключа GPG для подписи тэгов>"<br />
$ git config --global user.email "<ваш email, как мантейнера>"<br />
$ git config --global user.name "FirstName LastName"<br />
Например,<br />
$ git config --global user.signingkey 0xA26F54C8<br />
$ git config --global user.email dottedmag@altlinux.org<br />
$ git config --global user.name "Mikhail Gusarov"<br />
<br />
Список команд выдаётся при ssh-логине с командой <tt>help</tt>:<br />
<br />
$ ssh git.alt help<br />
Available commands:<br />
help<br />
git-receive-pack <directory><br />
git-upload-pack <directory><br />
charset <path to git repository> [<charset>]<br />
clone <path to git repository> [<path to directory>]<br />
find-package <pattern><br />
init-db <path to directory><br />
ls [<path to directory>]<br />
mv-db <path to source directory> <path to destination directory><br />
quota<br />
rm-db <path to git repository><br />
task {list|new|show|drop|add|run} ...<br />
build <path to gear repository> <tag name> [<binary package repository name>] [<project name>]<br />
acl {--help|<binary package repository name> ...}<br />
$<br />
<br />
Во всех командах суффикс директорий репозиториев <tt>.git</tt> опционален и может быть опущен. В выводе команд <tt>.git</tt> присутствует всегда.<br />
<br />
<!-- please don't remove -- there are links to #git etc --><br />
<div id="git"></div><br />
=== Управление git-репозиториями ===<br />
<br />
==== ls ====<br />
<br />
'''$ ssh git.alt ls [<directory>]'''<br />
<br />
Эта команда позволяет посмотреть содержимое различных директорий на <tt>git.alt</tt>:<br />
<br />
$ ssh git.alt ls /people/dottedmag/public<br />
total 24<br />
drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git<br />
...<br />
drwxr-sr-x 5 4096 Jul 7 18:03 wackoconvert.git<br />
$<br />
<br />
Без параметров — показывает содержимое <tt>/people/$USERNAME</tt>:<br />
<br />
$ ssh git.alt ls<br />
total 16<br />
drwxr-s--- 5 4096 May 30 21:27 etc<br />
drwxr-sr-x 14 4096 Aug 13 23:53 packages<br />
drwxr-s--x 2 4096 Feb 13 2007 private<br />
drwxr-sr-x 8 4096 Aug 13 23:57 public<br />
$<br />
<br />
От этой же директории отсчитываются относительные пути:<br />
<br />
$ ssh git.alt ls public<br />
total 24<br />
drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git<br />
...<br />
drwxr-sr-x 5 4096 Jul 7 18:03 wackoconvert.git<br />
$<br />
<br />
==== find-package ====<br />
<br />
'''$ ssh git.alt find-package <pattern>'''<br />
<br />
Эта команда позволяет искать репозитории по переданному шаблону. Единственный метасимвол, допустимый в шаблоне — <tt>*</tt>. Репозитории ищутся в директории <tt>packages</tt> каждого пользователя, поскольку предполагается, что <tt>[[gear]]</tt>-репозитории располагаются именно там.<br />
<br />
$ ssh git.alt find-package glibc*<br />
/people/avm/packages/glibc.git 1216320095<br />
...<br />
/people/peet/packages/glibc-kernheaders.git 1177084354<br />
/people/mike/packages/glibc-kvercheck.git 1160664813<br />
$ ssh git.alt find-package glibc<br />
/people/avm/packages/glibc.git 1216320095<br />
...<br />
/people/peet/packages/glibc.git 1177084600<br />
$<br />
<br />
Вторая колонка в выводе <tt>find-package</tt> — unixtime времени последнего обновления репозитория.<br />
<br />
==== clone ====<br />
<br />
'''$ ssh git.alt clone <path to git repository> [<destination directory>]'''<br />
<br />
Эта команда позволяет «склонировать», то есть создать в своей директории копию репозитория для начала работы над ним.<br />
<br />
Без второго аргумента — клонирует в директорию <tt>packages</tt>:<br />
<br />
$ ssh git.alt clone /people/ldv/glibc.git<br />
Initialized empty Git repository in /people/dottedmag/packages/glibc.git/<br />
$<br />
<br />
Вторым аргументом можно указать как директорию, в которую нужно поместить клон репозитория, так и название репозитория:<br />
<br />
$ ssh git.alt clone /people/ldv/glibc.git public<br />
Initialized empty Git repository in /people/dottedmag/public/glibc.git/<br />
$ ssh git.alt clone /people/ldv/glibc.git public/test<br />
Initialized empty Git repository in /people/dottedmag/public/test.git/<br />
$<br />
<br />
Можно также склонировать репозиторий, находящийся вне <tt>git.alt</tt>:<br />
<br />
$ ssh git.alt clone <nowiki>http://github.com/dottedmag/madshelf.git</nowiki> public<br />
Initialized empty Git repository in /people/dottedmag/packages/public.git/<br />
Getting alternates list for <nowiki>http://github.com/dottedmag/madshelf.git</nowiki><br />
...<br />
walk 03d18e21d85fa30fc3ac8d921eb391e2a7bb242a<br />
$<br />
<br />
==== init-db ====<br />
<br />
'''$ ssh git.alt init-db <path to directory>'''<br />
Позволяет создать новый git-репозиторий. По умолчанию репозиторий создаётся в директории <tt>packages</tt>:<br />
$ ssh git.alt init-db test<br />
Initialized empty Git repository in ./<br />
girar-init-db: /people/dottedmag/packages/test.git<br />
При указании пути создаёт репозиторий по указанному пути:<br />
$ ssh git.alt init-db public/test<br />
Initialized empty Git repository in ./<br />
girar-init-db: /people/dottedmag/public/test.git<br />
<br />
==== mv-db ====<br />
<br />
'''$ ssh git.alt mv-db <path to source directory> <path to destination directory>'''<br />
Позволяет перемещать и переименовывать свои репозитории. При указании только имени репозитория подразумевается директория <tt>packages</tt>.<br />
<br />
Перемещение packages/test.git в public/newname.git:<br />
$ ssh git.alt mv-db test public/newname<br />
$<br />
Перемещение public/newname.git в packages/test.git:<br />
$ ssh git.alt mv-db public/newname test<br />
$<br />
Переименовывание packages/test.git в packages/megatest.git:<br />
$ ssh git.alt mv-db test megatest<br />
$<br />
<br />
==== rm-db ====<br />
<br />
'''$ ssh git.alt rm-db <path to git repository>'''<br />
Позволяет удалять свои репозитории. При указании только имени репозитория подразумевается директория <tt>packages</tt>:<br />
$ ssh git.alt rm-db megatest # удаляет packages/megatest.git<br />
$ ssh git.alt rm-db public/test<br />
<br />
<div id="acl"></div><br />
=== Управление ACL пакетов ===<br />
<br />
''Смотри [[ACL]] для общей информации об ACL пакетов в Sisyphus.''<br />
<br />
Команда <tt>acl</tt> требует указания репозитория, над которым производится работа. На данный момент существует только репозиторий Sisyphus с меткой <tt>sisyphus</tt>.<br />
<br />
Если в командной строке указан только репозиторий, но не указана подкоманда, то список команд читается со стандартного ввода, по одной команде на строку, и выполняется тразакционно: ошибка в выполнении хотя бы одной команды отменяет действие всего набора команд:<br />
$ ssh git.alt acl sisyphus keyjnote<br />
girar-acl: Go ahead and type your commands<br />
'''keyjnote add peet'''<br />
'''keyjnote add raorn'''<br />
'''^D'''<br />
girar-acl: 2 command(s) queued<br />
$<br />
<br />
Все команды, меняющие состав группы или ACL пакета, могут производиться только ''лидером'' — первым в списке ACL пакета или в составе группы. Все такие операции выполняются асинхронно и результат их выполнения сообщается по email.<br />
<br />
==== acl show ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> show'''<br />
Показывает ACL указанного пакета<br />
<br />
$ ssh git.alt acl sisyphus bugzilla show<br />
bugzilla @nobody<br />
<br />
'''$ ssh git.alt acl <binary repository> @<group> show'''<br />
Показывает состав указанной группы майнтайнеров.<br />
<br />
$ ssh git.alt acl sisyhpus @python show<br />
@python ns ldv george akhavr bga lav swi at hiddenman sin mithraen kas<br />
<br />
==== acl check ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> check'''<br />
Проверяет ACL указанного пакета<br />
<br />
$ ssh git.alt acl sisyphus bugzilla check<br />
girar-check-perms: access to bugzilla ALLOWED for ldv: project is orphaned<br />
<br />
==== acl add/del ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> add|del <login>|@<group> ...<br />
Добавляет/удаляет указанных пользователей и группы в/из ACL указанного пакета.<br />
<br />
$ ssh git.alt acl sisyphus keyjnote add damir<br />
girar-acl: 1 command(s) queued<br />
$ ssh git.alt acl sisyphus keyjnote del damir<br />
girar-acl: 1 command(s) queued<br />
<br />
'''$ ssh git.alt acl <binary repository> @<group> add|del <login>|@<group> ...<br />
Добавляет/удаляет указанных пользователей и группы в/из указанной группы.<br />
<br />
$ ssh git.alt acl sisyphus ns add @python<br />
girar-acl: 1 command(s) queued<br />
$ ssh git.alt acl sisyphus ns del @python<br />
girar-acl: 1 command(s) queued<br />
<br />
==== acl replace ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package>|@<group> replace <login>|@<group> <login>|@<group>'''<br />
Заменяет указанную запись в ACL пакета или составе группы на вторую указанную.<br />
<br />
$ ssh git.alt acl sisyphus keyjnote replace dottedmag @python<br />
Заменяет в ACL пакета <tt>keyjnote</tt> запись <tt>dottedmag</tt> на <tt>@python</tt>.<br />
<br />
==== acl leader ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> leader <login>|@<group><br />
Устанавливает лидера пакета — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке ACL пакета до выполнения этой команды.<br />
<br />
$ ssh git.alt acl sisyphus keyjnote leader @python<br />
<br />
'''$ ssh git.alt acl <binary repository> @<group> leader <login>|@<group><br />
Устанавливает лидера группы — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке членов группы до выполнения этой команды.<br />
<br />
$ ssh git.alt acl sisyphus @python leader ns<br />
<br />
==== acl nmu ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> nmu add|del [<login> [<start date> [<end date>]]]'''<br />
Выдаёт/снимает разрешение на проведение [[NMU]] указанного пакета.<br />
<br />
Параметры:<br />
* '''login''' — аккаунт, которому даётся разрешение на NMU. '''*''' или отсутствие параметра означает «кому угодно»<br />
* '''start date''' — дата начала действия NMU, в формате unixtime. Отсутствие параметра означает «немедленно»<br />
* '''end date''' — дата окончания действия NMU, в формате unixtime. Отсутствие параметра означает «никогда».<br />
<br />
Удаление разрешения происходит по точному соответствию имени аккаунта, так что <tt>del *</tt> не приведёт к отмене всех NMU, выданных на пакет. С другой стороны, <tt>del user</tt> приведёт к отмене всех NMU, выданных данному пользователю.<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> nmu show'''<br />
Выдаёт список NMU для указанного пакета, в формате<br />
<package> <login> <start date> <end date><br />
<br />
0 в поле ''end date'' означает «без ограничения».<br />
<br />
<div id="build"></div><br />
=== Сборка пакетов ===<br />
<br />
Для сборки пакетов используется механизм ''заданий'' — пользователь указывает, какие [[gear]]-репозитории необходимо собрать одной транзакцией, создавая задание, после чего запускает его на выполнение. Задание выполняются асинхронно. После завершения задания пользователю приходит отчёт по e-mail (плюс, отчёты о сборке доступны на git.alt, см. ниже). Каждое задание предназначено для изменения только одного репозитория пакетов.<br />
<br />
==== task ====<br />
<br />
'''$ ssh git.alt task ls [--all]'''<br />
Показывает текущий список всех заданий пользователя с указанием их статуса и краткого содержания.<br /><br />
С указанием параметра <tt>--all</tt> показывает список заданий всех пользователей.<br />
'''$ ssh git.alt task show [<task_id>]'''<br />
Показывает содержимое указанного (по умолчанию последнего созданного) задания.<br />
'''$ ssh git.alt task new [<binary_repository_name>]'''<br />
Создаёт новое задание для сборки пакетов в указанный репозиторий пакетов (по умолчанию — Sisyphus).<br /><br />
Список репозиториев можно узнать с помощью <tt>task new --help</tt>.<br /><br />
Данная команда выводит идентификатор задания на stdout.<br />
'''$ ssh git.alt task add [<task_id>] repo <gear_repo> <gear_tag>'''<br />
Добавляет в задание пакет, который необходимо собрать.<br /><br />
Пакет определяется двумя обязательными характеристиками: путём к gear-репозиторию и именем git-тэга.<br />
'''$ ssh git.alt task add [<task_id>] copy <package> [<binary_repository_name>]'''<br />
Добавляет в задание имя пакета, который необходимо скопировать из другого репозитория пакетов (по умолчанию — Sisyphus).<br />
'''$ ssh git.alt task add [<task_id>] del <package>'''<br />
Добавляет в задание имя пакета, который необходимо удалить.<br />
'''$ ssh git.alt task delsub <task_id> <subtask_id>'''<br />
Удаляет из указанного задания подзадание с указанным номером.<br />
'''$ ssh git.alt task run [<task_id>]'''<br />
Отправляет на выполнение указанное (по умолчанию последнее созданное) задание.<br />
'''$ ssh git.alt task share [<task_id>] <status|enabled|disabled>'''<br />
Показывает или изменяет режим доступа к указанному (по умолчанию последнему созданному) заданию.<br /><br />
Задание с режимом доступа ''share enabled'' может быть дополнено другими пользователями с помощью команды <tt>task add</tt>.<br /><br />
По умолчанию задания создаются в режиме доступа ''share disabled''.<br />
'''$ ssh git.alt task approve <task_id> <subtask_id>'''<br />
Подтверждает сборку подзадания с указанным номером, входящего в состав указанного чужого задания.<br /><br />
Используется для разрешения сборки автором, не имеющим полномочий для обновления собираемого пакета (NMU).<br />
'''$ ssh git.alt task rm [<task_id>]'''<br />
Удаляет указанное (по умолчанию последнее созданное) задание.<br />
<br />
Пример:<br />
$ ssh git.alt task ls<br />
girar-task ls: no tasks for ldv<br />
$ ssh git.alt task new<br />
1234<br />
new task #1234: owner=ldv repo=sisyphus<br />
$ ssh git.alt task ls<br />
#1234 NEW sisyphus<br />
$ ssh git.alt task show<br />
id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc=<br />
$ ssh git.alt task add repo vitmp 1.0-alt4<br />
task #1234: added #1 build tag 1.0-alt4 from /people/ldv/packages/vitmp.git<br />
$ ssh git.alt task show<br />
id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc=<br />
1:dir=/people/ldv/packages/vitmp.git<br />
1:tag_name=1.0-alt4<br />
1:tag_id=11c24aa6683506efd89b174de8dbea2af1cebf84<br />
1:tag_author=Dmitry V. Levin (for packages) <ldv@altlinux.org><br />
1:userid=ldv<br />
$ ssh git.alt task run<br />
task #1234: queued, result will be emailed to ldv@altlinux.org<br />
$ ssh git.alt task ls<br />
#1234 AWAITING sisyphus vitmp.git=1.0-alt4<br />
через некоторое время вывод последней команды изменится на<br />
#1234 BUILDING [locked] sisyphus vitmp.git=1.0-alt4<br />
а ещё через некоторое время — на<br />
#1234 DONE sisyphus vitmp.git=1.0-alt4<br />
<br />
==== build ====<br />
<br />
'''$ ssh git.alt build [-b <binary_repository_name>] <gear_repo_path 1> <gear_tag_name 1> ...'''<br />
Эта команда создаёт задание по сборке указанных пакетов и отправляет его на выполнение,<br />
последовательно запуская <tt>task new</tt>, <tt>task add</tt> и <tt>task run</tt>.<br /><br />
Параметр ''binary repository name'' имеет тот же смысл, что и в команде <tt>task new</tt>.<br /><br />
Параметры ''gear repo path'' и ''gear tag name'' имеют тот же смысл, что и в команде <tt>task add</tt>.<br />
<br />
==== Отчёты о сборке ====<br />
<br />
Полные логи обработки свежих заданий можно найти по адресу<br />
http://git.altlinux.org/tasks/TID/task/log<br />
- где TID это номер задания.<br />
<br />
Полные логи сборок этих заданий можно найти по адресу<br />
http://git.altlinux.org/tasks/TID/build/SID/ARCH/srpm.log и<br />
http://git.altlinux.org/tasks/TID/build/SID/ARCH/log<br />
- где SID это номер подзадания, ARCH это идентификатор архитектуры<br />
(сейчас i586 или x86_64).<br />
<br />
Если сборка подзадания производится из gear-репозитория, то<br />
всю информацию о входных данных этой сборки можно найти по адресу<br />
http://git.altlinux.org/tasks/TID/ears/SID/<br />
в том числе, частичная копия репозитория, содержащая собираемый тэг,<br />
доступна по адресу http://git.altlinux.org/tasks/TID/gears/SID/git<br />
<br />
Более подробное описание структуры задания можно найти по [http://git.altlinux.org/people/ldv/packages/?p=girar-builder.git;a=blob_plain;f=TASK адресу]<br />
<br />
Всё, что находится по адресу http://git.altlinux.org/tasks/, в равной<br />
степени доступно и по rsync.<br />
<br />
=== Вспомогательные команды ===<br />
<br />
==== charset ====<br />
<br />
'''$ ssh git.alt charset <path to git repository> [<charset>]'''<br />
<br />
Позволяет узнать или установить кодировку, используемую почтовым клиентом при отправке уведомлений, содержащих цитаты изменений файлов указанного git-репозитория:<br />
<br />
$ ssh git.alt charset packages/glibc<br />
utf-8<br />
$ ssh git.alt charset packages/glibc cp1252<br />
$ ssh git.alt charset packages/glibc<br />
cp1252<br />
$<br />
<br />
==== quota ====<br />
<br />
'''$ ssh git.alt quota'''<br />
<br />
Позволяет узнать квоту и занимаемое пользователем дисковое пространство.<br />
<br />
$ ssh git.alt quota<br />
Filesystem blocks quota limit grace files quota limit grace<br />
/dev/simfs 16932 977M 1465M 555 100k 150k <br />
$<br />
<br />
==== git-receive-pack, git-upload-pack ====<br />
<br />
Эти команды используются утилитами <tt>git push</tt>, <tt>git pull</tt> и подобными, и не предназначены для вызова пользователем.<br />
<br />
=== Клонирование и работа с репозиториями ===<br />
<br />
Работа с git-репозиториями, расположенными на <tt>git.alt</tt>, ничем не отличается от работы с другими git-репозиториями.<br />
<br />
URL-ы репозиториев на git.alt:<br />
; '''git''' (r/o)<br />
: <tt>git://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git</tt><br />
; '''rsync''' (r/o)<br />
: <tt>git.altlinux.org::people/$USER/(packages|public)/$PACKAGE.git</tt><br />
; '''http''' (r/o)<br />
: <tt><nowiki>http://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git</nowiki></tt><br />
; '''ssh''' (r/w)<br />
: <tt>ssh://git.altlinux.org/people/$USER/(etc|packages|public|private)/$PACKAGE.git</tt><br />
<br />
HTTP- и git-URL-ы репозиториев можно в любой момент узнать в web-интерфейсе <tt>git.alt</tt>.<br />
<br />
=== Web-интерфейс ===<br />
<br />
Располагается по адресу http://git.altlinux.org/<br />
<br />
Предоставляет навигацию по публичным репозиториям пользователей (директории <tt>/people/$USERNAME/{packages,public}</tt>) и <tt>gitweb</tt>-интерфейс к этим репозиториям.<br />
<br />
Кроме этого, в web-интерфейсе представлены репозитории <tt>/archive</tt>, списки <tt>/acl</tt> и файл <tt>people-packages-list</tt>, содержащий все репозитории из директорий <tt>/people/$USERNAME/packages</tt> и даты их последнего изменения (в unixtime).<br />
<br />
== Структура репозиториев ==<br />
<br />
<tt>git.alt</tt> содержит три дерева репозиториев:<br />
<br />
* репозитории <tt>/people/$USERNAME</tt> для каждого зарегистрированного пользователя<br />
* репозитории <tt>/gears</tt> с исходным кодом для пакетов Sisyphus, собранных с помощью <tt>git.alt</tt>.<br />
* репозитории <tt>/archive</tt> с исходным кодом для пакетов Sisyphus, прошедших [[incoming]].<br />
<br />
=== /people ===<br />
<br />
Каждому зарегистрированному на git.alt разработчику предоставляется место для git-репозиториев, начинающееся с <tt>/people/$USERNAME</tt>. Доступ на запись в эти директории даётся только владельцу. Структура для хранения репозиториев жёстко определена:<br />
<br />
==== /people/$USERNAME/etc ====<br />
<br />
Содержит репозитории <tt>packages.git</tt>, <tt>private.git</tt>, <tt>public.git</tt>, с помощью которых можно управлять [[#Почтовая подписка|почтовой подпиской]]. Эти репозитории доступны на чтение только владельцу.<br />
<br />
==== /people/$USERNAME/packages ====<br />
<br />
Директория предназначена для хранения gear-репозиториев для пакетов Сизифа. Публично доступна.<br />
<br />
git-репозитории в этой директории будут искаться при выполнении команды <tt>find-package</tt>, и эта директория будет использоваться по умолчанию в командах <tt>init-db</tt>, <tt>clone</tt>, <tt>build</tt>.<br />
<br />
==== /people/$USERNAME/private ====<br />
<br />
Директория предназначена для хранения приватных репозиториев, о существовании и содержании которых должно быть известно только самому разработчику.<br />
<br />
Для удобства работают прямые http-ссылки на файлы репозиториев, размещённых в этой директории.<br />
<br />
==== /people/$USERNAME/public ====<br />
<br />
Директория предназначен для хранения публичных git-репозиториев, не являющихся gear-репозиториями для пакетов Сизифа.<br />
<br />
<div id="gears"></div><br />
=== /gears ===<br />
<br />
В эту директорию помещаются git-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]]. Добавление исходного кода в репозиторий <tt>/gears</tt> происходит после успешной сборки пакета с помощью команд <tt>git.alt</tt> <tt>task</tt> или <tt>build</tt>.<br />
<br />
Каждый git-репозиторий в <tt>/gears</tt> назван по имени пакета с исходным кодом. Бранчи в нём называются по имени ветки, в которую собрался пакет (<tt>sisyphus</tt>, <tt>branch5.0</tt> и т.д). Тэги в репозитории соответствуют собранным версиям пакетов (<tt>1.0-alt1</tt>, <tt>1.0-alt0.M50.1</tt> и т.д.).<br />
<br />
=== /srpms ===<br />
<br />
В этой директории размещаются git-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]], собранных с помощью [[Incoming]].<br />
<br />
После первой сборки командами <tt>task</tt> или <tt>build</tt> <tt>git.alt</tt> репозиторий в <tt>/srpms</tt> замораживается.<br />
<br />
Поскольку git-репозитории <tt>/srpms</tt> создаются на основе <tt>src.rpm</tt>-пакетов, а сборка с помощью [[Incoming]] объявлена устаревшей, то использовать их стоит только из исторического интереса.<br />
<br />
<div id="email"></div><br />
<br />
== Почтовая подписка ==<br />
<br />
На <tt>git.alt</tt> реализовано два вида почтовой подписки на события:<br />
* Пользователь подписывается на события, происходящие в репозиториях <tt>public</tt> и <tt>packages</tt>.<br />
* Пользователь подписывает кого-то на события, происходящие в '''его''' репозиториях <tt>public</tt>, <tt>packages</tt> и <tt>private</tt>.<br />
<br />
Для подписки используются репозитории из каталога <tt>etc</tt>: <tt>packages.git</tt>, <tt>public.git</tt>, <tt>private.git</tt> в каталоге пользователя. Схема работы с подписками напоминает работу с <tt>CVSROOT</tt> из CVS: пользователь клонирует нужный репозиторий, коммитит изменения в него и push-ит обратно на сервер, после чего изменения вступают в силу.<br />
<br />
В каждом из трёх репозиториев находится два файла: <tt>email-subscription</tt> и <tt>email-distribution</tt> (точнее, в <tt>private.git</tt> — только <tt>email-distribution</tt>). <tt>git.alt</tt> использует бранч <tt>master</tt> и не обращает внимания на остальные бранчи в этих репозиториях.<br />
<br />
=== email-subscription ===<br />
<br />
Этот файл позволяет подписаться на события в публичных репозиториях <tt>git.alt</tt>. Формат файла — последовательность строк следующего вида:<br />
$USER $PACKAGE $REFTYPE $REFNAME<br />
где<br />
* $USER — имя пользователя <tt>git.alt</tt>,<br />
* $PACKAGE — имя пакета,<br />
* $REFTYPE — вид изменения: <tt>head</tt> — новые/удалённые коммиты, <tt>tag</tt> — новые/удалённые тэги (техническая подробность: второй компонент из изменяемой ссылки <tt>refs/*/*</tt>)<br />
<!-- или release (релизы для сборки пакетов. Пока что не работает. --><br />
* $REFNAME — имя изменения: имя бранча для коммитов, имя тэга для тэгов (техническая подробность: третий и последующие компоненты из изменяемой ссылки <tt>refs/*/*</tt>).<br />
Каждое из полей может быть полным именем или вайлдкардом <tt>*</tt>. Для имён пакетов также разрешён вайлдкард в конце имени (например, <tt>docs-*</tt>).<br />
<br />
==== Примеры ====<br />
<br />
Подписка на все события во всех репозиториях:<br />
* * * *<br />
Подписка на новые/удалённые тэги в репозитории /people/ldv/packages/glibc.git:<br />
ldv glibc tag *<br />
Действия для осуществления подписки:<br />
git clone git.alt:etc/packages.git<br />
cd packages<br />
echo 'ldv glibc tag *' >> email-subscription<br />
git commit -m "Subscribe to new tags in ldv's glibc repository" email-subscription<br />
git push<br />
<br />
=== email-distribution ===<br />
<br />
Этот файл позволяет подписать других пользователей <tt>git.alt</tt> на события в ваших репозиториях. Формат файла — последовательность строк вида:<br />
$PACKAGE $REFTYPE $REFNAME $MAILTO<br />
где<br />
* $PACKAGE, $REFTYPE, $REFNAME аналогичны параметрам из файла email-subscription<br />
* $MAILTO — разделённый запятыми список имён пользователей <tt>git.alt</tt> — получателей оповещения.<br />
Вайлдкарды в первых трёх полях допустимы так же, как и в email-subscription. Вайлдкарды в $MAILTO не допускаются.<br />
<br />
<br />
{{Category navigation|title=git.alt|category=git.alt|sortkey={{SUBPAGENAME}}}}<br />
<br />
[[Категория:Справочники]]<br />
<br />
[[en:git.alt reference]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Git.alt/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA&diff=9829Git.alt/Справочник2009-03-09T06:14:20Z<p>EvgeniiTerechkov: /* Сборка пакетов */ - про логи сборки</p>
<hr />
<div>{{DISPLAYTITLE:git.alt/Справочник}}<br />
Эта страница документирует команды [[git.alt]], но не является [[Краткое руководство пользователя git.alt|кратким руководством]] или учебником по нему.<br />
<br />
__TOC__<br />
<br />
== Как воспользоваться <tt>git.alt</tt>? ==<br />
<br />
<tt>git.alt</tt> предоставляет несколько видов доступа:<br />
<br />
* ssh-доступ. Предоставляет несколько команд: для поиска репозиториев, их клонирования, создания, удаления, а также служебных.<br />
* <tt>ssh</tt>-, <tt>git</tt>-, <tt>rsync</tt>-, <tt>http</tt>-доступ для непосредственной работы с репозиториями.<br />
*: <tt>git</tt>-, <tt>rsync</tt>- и <tt>http</tt>-адреса предоставляют r/o доступ, <tt>ssh</tt> — r/w.<br />
* Web-интерфейс. Находится по адресу [http://git.altlinux.org/ git.altlinux.org], предоставляет навигацию по списку репозиториев и <tt>gitweb</tt> для индивидуальных репозиториев.<br />
<br />
ssh-доступ к <tt>git.alt</tt> выдаётся после [[Join|принятия]] в ALT Linux Team.<br />
<br />
<div id="access"></div><br />
== SSH-доступ ==<br />
<br />
<tt>git.alt</tt> доступен по SSH по адресу <tt>git.altlinux.org:222</tt>. Аккаунт для доступа — <tt>git_$USERNAME</tt>, где USERNAME — имя, присвоенное в процессе принятия в Team, с символами «-» заменёнными на «_».<br />
<br />
Пример <tt>~/.ssh/config</tt>:<br />
Host git.alt<br />
HostName git.altlinux.org<br />
Port 222<br />
User git_USERNAME<br />
<br />
Для работы [[fsi:SSHFirewall|через прокси]] и в других сложных условиях SSH также доступен по адресу <tt>git.altlinux.org:443</tt>.<br />
<br />
Для работы с <tt>git.alt</tt> необходимо настроить свой <tt>git</tt> — параметры <tt>user.name</tt>, <tt>user.email</tt>, <tt>user.signingkey</tt>:<br />
$ git config --global user.signingkey "<ID ключа GPG для подписи тэгов>"<br />
$ git config --global user.email "<ваш email, как мантейнера>"<br />
$ git config --global user.name "FirstName LastName"<br />
Например,<br />
$ git config --global user.signingkey 0xA26F54C8<br />
$ git config --global user.email dottedmag@altlinux.org<br />
$ git config --global user.name "Mikhail Gusarov"<br />
<br />
Список команд выдаётся при ssh-логине с командой <tt>help</tt>:<br />
<br />
$ ssh git.alt help<br />
Available commands:<br />
help<br />
git-receive-pack <directory><br />
git-upload-pack <directory><br />
charset <path to git repository> [<charset>]<br />
clone <path to git repository> [<path to directory>]<br />
find-package <pattern><br />
init-db <path to directory><br />
ls [<path to directory>]<br />
mv-db <path to source directory> <path to destination directory><br />
quota<br />
rm-db <path to git repository><br />
task {list|new|show|drop|add|run} ...<br />
build <path to gear repository> <tag name> [<binary package repository name>] [<project name>]<br />
acl {--help|<binary package repository name> ...}<br />
$<br />
<br />
Во всех командах суффикс директорий репозиториев <tt>.git</tt> опционален и может быть опущен. В выводе команд <tt>.git</tt> присутствует всегда.<br />
<br />
<!-- please don't remove -- there are links to #git etc --><br />
<div id="git"></div><br />
=== Управление git-репозиториями ===<br />
<br />
==== ls ====<br />
<br />
'''$ ssh git.alt ls [<directory>]'''<br />
<br />
Эта команда позволяет посмотреть содержимое различных директорий на <tt>git.alt</tt>:<br />
<br />
$ ssh git.alt ls /people/dottedmag/public<br />
total 24<br />
drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git<br />
...<br />
drwxr-sr-x 5 4096 Jul 7 18:03 wackoconvert.git<br />
$<br />
<br />
Без параметров — показывает содержимое <tt>/people/$USERNAME</tt>:<br />
<br />
$ ssh git.alt ls<br />
total 16<br />
drwxr-s--- 5 4096 May 30 21:27 etc<br />
drwxr-sr-x 14 4096 Aug 13 23:53 packages<br />
drwxr-s--x 2 4096 Feb 13 2007 private<br />
drwxr-sr-x 8 4096 Aug 13 23:57 public<br />
$<br />
<br />
От этой же директории отсчитываются относительные пути:<br />
<br />
$ ssh git.alt ls public<br />
total 24<br />
drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git<br />
...<br />
drwxr-sr-x 5 4096 Jul 7 18:03 wackoconvert.git<br />
$<br />
<br />
==== find-package ====<br />
<br />
'''$ ssh git.alt find-package <pattern>'''<br />
<br />
Эта команда позволяет искать репозитории по переданному шаблону. Единственный метасимвол, допустимый в шаблоне — <tt>*</tt>. Репозитории ищутся в директории <tt>packages</tt> каждого пользователя, поскольку предполагается, что <tt>[[gear]]</tt>-репозитории располагаются именно там.<br />
<br />
$ ssh git.alt find-package glibc*<br />
/people/avm/packages/glibc.git 1216320095<br />
...<br />
/people/peet/packages/glibc-kernheaders.git 1177084354<br />
/people/mike/packages/glibc-kvercheck.git 1160664813<br />
$ ssh git.alt find-package glibc<br />
/people/avm/packages/glibc.git 1216320095<br />
...<br />
/people/peet/packages/glibc.git 1177084600<br />
$<br />
<br />
Вторая колонка в выводе <tt>find-package</tt> — unixtime времени последнего обновления репозитория.<br />
<br />
==== clone ====<br />
<br />
'''$ ssh git.alt clone <path to git repository> [<destination directory>]'''<br />
<br />
Эта команда позволяет «склонировать», то есть создать в своей директории копию репозитория для начала работы над ним.<br />
<br />
Без второго аргумента — клонирует в директорию <tt>packages</tt>:<br />
<br />
$ ssh git.alt clone /people/ldv/glibc.git<br />
Initialized empty Git repository in /people/dottedmag/packages/glibc.git/<br />
$<br />
<br />
Вторым аргументом можно указать как директорию, в которую нужно поместить клон репозитория, так и название репозитория:<br />
<br />
$ ssh git.alt clone /people/ldv/glibc.git public<br />
Initialized empty Git repository in /people/dottedmag/public/glibc.git/<br />
$ ssh git.alt clone /people/ldv/glibc.git public/test<br />
Initialized empty Git repository in /people/dottedmag/public/test.git/<br />
$<br />
<br />
Можно также склонировать репозиторий, находящийся вне <tt>git.alt</tt>:<br />
<br />
$ ssh git.alt clone <nowiki>http://github.com/dottedmag/madshelf.git</nowiki> public<br />
Initialized empty Git repository in /people/dottedmag/packages/public.git/<br />
Getting alternates list for <nowiki>http://github.com/dottedmag/madshelf.git</nowiki><br />
...<br />
walk 03d18e21d85fa30fc3ac8d921eb391e2a7bb242a<br />
$<br />
<br />
==== init-db ====<br />
<br />
'''$ ssh git.alt init-db <path to directory>'''<br />
Позволяет создать новый git-репозиторий. По умолчанию репозиторий создаётся в директории <tt>packages</tt>:<br />
$ ssh git.alt init-db test<br />
Initialized empty Git repository in ./<br />
girar-init-db: /people/dottedmag/packages/test.git<br />
При указании пути создаёт репозиторий по указанному пути:<br />
$ ssh git.alt init-db public/test<br />
Initialized empty Git repository in ./<br />
girar-init-db: /people/dottedmag/public/test.git<br />
<br />
==== mv-db ====<br />
<br />
'''$ ssh git.alt mv-db <path to source directory> <path to destination directory>'''<br />
Позволяет перемещать и переименовывать свои репозитории. При указании только имени репозитория подразумевается директория <tt>packages</tt>.<br />
<br />
Перемещение packages/test.git в public/newname.git:<br />
$ ssh git.alt mv-db test public/newname<br />
$<br />
Перемещение public/newname.git в packages/test.git:<br />
$ ssh git.alt mv-db public/newname test<br />
$<br />
Переименовывание packages/test.git в packages/megatest.git:<br />
$ ssh git.alt mv-db test megatest<br />
$<br />
<br />
==== rm-db ====<br />
<br />
'''$ ssh git.alt rm-db <path to git repository>'''<br />
Позволяет удалять свои репозитории. При указании только имени репозитория подразумевается директория <tt>packages</tt>:<br />
$ ssh git.alt rm-db megatest # удаляет packages/megatest.git<br />
$ ssh git.alt rm-db public/test<br />
<br />
<div id="acl"></div><br />
=== Управление ACL пакетов ===<br />
<br />
''Смотри [[ACL]] для общей информации об ACL пакетов в Sisyphus.''<br />
<br />
Команда <tt>acl</tt> требует указания репозитория, над которым производится работа. На данный момент существует только репозиторий Sisyphus с меткой <tt>sisyphus</tt>.<br />
<br />
Если в командной строке указан только репозиторий, но не указана подкоманда, то список команд читается со стандартного ввода, по одной команде на строку, и выполняется тразакционно: ошибка в выполнении хотя бы одной команды отменяет действие всего набора команд:<br />
$ ssh git.alt acl sisyphus keyjnote<br />
girar-acl: Go ahead and type your commands<br />
'''keyjnote add peet'''<br />
'''keyjnote add raorn'''<br />
'''^D'''<br />
girar-acl: 2 command(s) queued<br />
$<br />
<br />
Все команды, меняющие состав группы или ACL пакета, могут производиться только ''лидером'' — первым в списке ACL пакета или в составе группы. Все такие операции выполняются асинхронно и результат их выполнения сообщается по email.<br />
<br />
==== acl show ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> show'''<br />
Показывает ACL указанного пакета<br />
<br />
$ ssh git.alt acl sisyphus bugzilla show<br />
bugzilla @nobody<br />
<br />
'''$ ssh git.alt acl <binary repository> @<group> show'''<br />
Показывает состав указанной группы майнтайнеров.<br />
<br />
$ ssh git.alt acl sisyhpus @python show<br />
@python ns ldv george akhavr bga lav swi at hiddenman sin mithraen kas<br />
<br />
==== acl check ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> check'''<br />
Проверяет ACL указанного пакета<br />
<br />
$ ssh git.alt acl sisyphus bugzilla check<br />
girar-check-perms: access to bugzilla ALLOWED for ldv: project is orphaned<br />
<br />
==== acl add/del ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> add|del <login>|@<group> ...<br />
Добавляет/удаляет указанных пользователей и группы в/из ACL указанного пакета.<br />
<br />
$ ssh git.alt acl sisyphus keyjnote add damir<br />
girar-acl: 1 command(s) queued<br />
$ ssh git.alt acl sisyphus keyjnote del damir<br />
girar-acl: 1 command(s) queued<br />
<br />
'''$ ssh git.alt acl <binary repository> @<group> add|del <login>|@<group> ...<br />
Добавляет/удаляет указанных пользователей и группы в/из указанной группы.<br />
<br />
$ ssh git.alt acl sisyphus ns add @python<br />
girar-acl: 1 command(s) queued<br />
$ ssh git.alt acl sisyphus ns del @python<br />
girar-acl: 1 command(s) queued<br />
<br />
==== acl replace ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package>|@<group> replace <login>|@<group> <login>|@<group>'''<br />
Заменяет указанную запись в ACL пакета или составе группы на вторую указанную.<br />
<br />
$ ssh git.alt acl sisyphus keyjnote replace dottedmag @python<br />
Заменяет в ACL пакета <tt>keyjnote</tt> запись <tt>dottedmag</tt> на <tt>@python</tt>.<br />
<br />
==== acl leader ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> leader <login>|@<group><br />
Устанавливает лидера пакета — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке ACL пакета до выполнения этой команды.<br />
<br />
$ ssh git.alt acl sisyphus keyjnote leader @python<br />
<br />
'''$ ssh git.alt acl <binary repository> @<group> leader <login>|@<group><br />
Устанавливает лидера группы — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке членов группы до выполнения этой команды.<br />
<br />
$ ssh git.alt acl sisyphus @python leader ns<br />
<br />
==== acl nmu ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> nmu add|del [<login> [<start date> [<end date>]]]'''<br />
Выдаёт/снимает разрешение на проведение [[NMU]] указанного пакета.<br />
<br />
Параметры:<br />
* '''login''' — аккаунт, которому даётся разрешение на NMU. '''*''' или отсутствие параметра означает «кому угодно»<br />
* '''start date''' — дата начала действия NMU, в формате unixtime. Отсутствие параметра означает «немедленно»<br />
* '''end date''' — дата окончания действия NMU, в формате unixtime. Отсутствие параметра означает «никогда».<br />
<br />
Удаление разрешения происходит по точному соответствию имени аккаунта, так что <tt>del *</tt> не приведёт к отмене всех NMU, выданных на пакет. С другой стороны, <tt>del user</tt> приведёт к отмене всех NMU, выданных данному пользователю.<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> nmu show'''<br />
Выдаёт список NMU для указанного пакета, в формате<br />
<package> <login> <start date> <end date><br />
<br />
0 в поле ''end date'' означает «без ограничения».<br />
<br />
<div id="build"></div><br />
=== Сборка пакетов ===<br />
<br />
Для сборки пакетов используется механизм ''заданий'' — пользователь указывает, какие [[gear]]-репозитории необходимо собрать одной транзакцией, создавая задание, после чего запускает его на выполнение. Задание выполняются асинхронно. После завершения задания пользователю приходит отчёт по e-mail (плюс, отчёты о сборке доступны на git.alt, см. ниже). Каждое задание предназначено для изменения только одного репозитория пакетов.<br />
<br />
==== task ====<br />
<br />
'''$ ssh git.alt task ls [--all]'''<br />
Показывает текущий список всех заданий пользователя с указанием их статуса и краткого содержания.<br /><br />
С указанием параметра <tt>--all</tt> показывает список заданий всех пользователей.<br />
'''$ ssh git.alt task show [<task_id>]'''<br />
Показывает содержимое указанного (по умолчанию последнего созданного) задания.<br />
'''$ ssh git.alt task new [<binary_repository_name>]'''<br />
Создаёт новое задание для сборки пакетов в указанный репозиторий пакетов (по умолчанию — Sisyphus).<br /><br />
Список репозиториев можно узнать с помощью <tt>task new --help</tt>.<br /><br />
Данная команда выводит идентификатор задания на stdout.<br />
'''$ ssh git.alt task add [<task_id>] repo <gear_repo> <gear_tag>'''<br />
Добавляет в задание пакет, который необходимо собрать.<br /><br />
Пакет определяется двумя обязательными характеристиками: путём к gear-репозиторию и именем git-тэга.<br />
'''$ ssh git.alt task add [<task_id>] copy <package> [<binary_repository_name>]'''<br />
Добавляет в задание имя пакета, который необходимо скопировать из другого репозитория пакетов (по умолчанию — Sisyphus).<br />
'''$ ssh git.alt task add [<task_id>] del <package>'''<br />
Добавляет в задание имя пакета, который необходимо удалить.<br />
'''$ ssh git.alt task delsub <task_id> <subtask_id>'''<br />
Удаляет из указанного задания подзадание с указанным номером.<br />
'''$ ssh git.alt task run [<task_id>]'''<br />
Отправляет на выполнение указанное (по умолчанию последнее созданное) задание.<br />
'''$ ssh git.alt task share [<task_id>] <status|enabled|disabled>'''<br />
Показывает или изменяет режим доступа к указанному (по умолчанию последнему созданному) заданию.<br /><br />
Задание с режимом доступа ''share enabled'' может быть дополнено другими пользователями с помощью команды <tt>task add</tt>.<br /><br />
По умолчанию задания создаются в режиме доступа ''share disabled''.<br />
'''$ ssh git.alt task approve <task_id> <subtask_id>'''<br />
Подтверждает сборку подзадания с указанным номером, входящего в состав указанного чужого задания.<br /><br />
Используется для разрешения сборки автором, не имеющим полномочий для обновления собираемого пакета (NMU).<br />
'''$ ssh git.alt task rm [<task_id>]'''<br />
Удаляет указанное (по умолчанию последнее созданное) задание.<br />
<br />
Пример:<br />
$ ssh git.alt task ls<br />
girar-task ls: no tasks for ldv<br />
$ ssh git.alt task new<br />
1234<br />
new task #1234: owner=ldv repo=sisyphus<br />
$ ssh git.alt task ls<br />
#1234 NEW sisyphus<br />
$ ssh git.alt task show<br />
id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc=<br />
$ ssh git.alt task add repo vitmp 1.0-alt4<br />
task #1234: added #1 build tag 1.0-alt4 from /people/ldv/packages/vitmp.git<br />
$ ssh git.alt task show<br />
id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc=<br />
1:dir=/people/ldv/packages/vitmp.git<br />
1:tag_name=1.0-alt4<br />
1:tag_id=11c24aa6683506efd89b174de8dbea2af1cebf84<br />
1:tag_author=Dmitry V. Levin (for packages) <ldv@altlinux.org><br />
1:userid=ldv<br />
$ ssh git.alt task run<br />
task #1234: queued, result will be emailed to ldv@altlinux.org<br />
$ ssh git.alt task ls<br />
#1234 AWAITING sisyphus vitmp.git=1.0-alt4<br />
через некоторое время вывод последней команды изменится на<br />
#1234 BUILDING [locked] sisyphus vitmp.git=1.0-alt4<br />
а ещё через некоторое время — на<br />
#1234 DONE sisyphus vitmp.git=1.0-alt4<br />
<br />
==== build ====<br />
<br />
'''$ ssh git.alt build [-b <binary_repository_name>] <gear_repo_path 1> <gear_tag_name 1> ...'''<br />
Эта команда создаёт задание по сборке указанных пакетов и отправляет его на выполнение,<br />
последовательно запуская <tt>task new</tt>, <tt>task add</tt> и <tt>task run</tt>.<br /><br />
Параметр ''binary repository name'' имеет тот же смысл, что и в команде <tt>task new</tt>.<br /><br />
Параметры ''gear repo path'' и ''gear tag name'' имеют тот же смысл, что и в команде <tt>task add</tt>.<br />
<br />
=== Вспомогательные команды ===<br />
<br />
==== charset ====<br />
<br />
'''$ ssh git.alt charset <path to git repository> [<charset>]'''<br />
<br />
Позволяет узнать или установить кодировку, используемую почтовым клиентом при отправке уведомлений, содержащих цитаты изменений файлов указанного git-репозитория:<br />
<br />
$ ssh git.alt charset packages/glibc<br />
utf-8<br />
$ ssh git.alt charset packages/glibc cp1252<br />
$ ssh git.alt charset packages/glibc<br />
cp1252<br />
$<br />
<br />
==== quota ====<br />
<br />
'''$ ssh git.alt quota'''<br />
<br />
Позволяет узнать квоту и занимаемое пользователем дисковое пространство.<br />
<br />
$ ssh git.alt quota<br />
Filesystem blocks quota limit grace files quota limit grace<br />
/dev/simfs 16932 977M 1465M 555 100k 150k <br />
$<br />
<br />
==== git-receive-pack, git-upload-pack ====<br />
<br />
Эти команды используются утилитами <tt>git push</tt>, <tt>git pull</tt> и подобными, и не предназначены для вызова пользователем.<br />
<br />
=== Клонирование и работа с репозиториями ===<br />
<br />
Работа с git-репозиториями, расположенными на <tt>git.alt</tt>, ничем не отличается от работы с другими git-репозиториями.<br />
<br />
URL-ы репозиториев на git.alt:<br />
; '''git''' (r/o)<br />
: <tt>git://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git</tt><br />
; '''rsync''' (r/o)<br />
: <tt>git.altlinux.org::people/$USER/(packages|public)/$PACKAGE.git</tt><br />
; '''http''' (r/o)<br />
: <tt><nowiki>http://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git</nowiki></tt><br />
; '''ssh''' (r/w)<br />
: <tt>ssh://git.altlinux.org/people/$USER/(etc|packages|public|private)/$PACKAGE.git</tt><br />
<br />
HTTP- и git-URL-ы репозиториев можно в любой момент узнать в web-интерфейсе <tt>git.alt</tt>.<br />
<br />
=== Web-интерфейс ===<br />
<br />
Располагается по адресу http://git.altlinux.org/<br />
<br />
Предоставляет навигацию по публичным репозиториям пользователей (директории <tt>/people/$USERNAME/{packages,public}</tt>) и <tt>gitweb</tt>-интерфейс к этим репозиториям.<br />
<br />
Кроме этого, в web-интерфейсе представлены репозитории <tt>/archive</tt>, списки <tt>/acl</tt> и файл <tt>people-packages-list</tt>, содержащий все репозитории из директорий <tt>/people/$USERNAME/packages</tt> и даты их последнего изменения (в unixtime).<br />
<br />
== Структура репозиториев ==<br />
<br />
<tt>git.alt</tt> содержит три дерева репозиториев:<br />
<br />
* репозитории <tt>/people/$USERNAME</tt> для каждого зарегистрированного пользователя<br />
* репозитории <tt>/gears</tt> с исходным кодом для пакетов Sisyphus, собранных с помощью <tt>git.alt</tt>.<br />
* репозитории <tt>/archive</tt> с исходным кодом для пакетов Sisyphus, прошедших [[incoming]].<br />
<br />
=== /people ===<br />
<br />
Каждому зарегистрированному на git.alt разработчику предоставляется место для git-репозиториев, начинающееся с <tt>/people/$USERNAME</tt>. Доступ на запись в эти директории даётся только владельцу. Структура для хранения репозиториев жёстко определена:<br />
<br />
==== /people/$USERNAME/etc ====<br />
<br />
Содержит репозитории <tt>packages.git</tt>, <tt>private.git</tt>, <tt>public.git</tt>, с помощью которых можно управлять [[#Почтовая подписка|почтовой подпиской]]. Эти репозитории доступны на чтение только владельцу.<br />
<br />
==== /people/$USERNAME/packages ====<br />
<br />
Директория предназначена для хранения gear-репозиториев для пакетов Сизифа. Публично доступна.<br />
<br />
git-репозитории в этой директории будут искаться при выполнении команды <tt>find-package</tt>, и эта директория будет использоваться по умолчанию в командах <tt>init-db</tt>, <tt>clone</tt>, <tt>build</tt>.<br />
<br />
==== /people/$USERNAME/private ====<br />
<br />
Директория предназначена для хранения приватных репозиториев, о существовании и содержании которых должно быть известно только самому разработчику.<br />
<br />
Для удобства работают прямые http-ссылки на файлы репозиториев, размещённых в этой директории.<br />
<br />
==== /people/$USERNAME/public ====<br />
<br />
Директория предназначен для хранения публичных git-репозиториев, не являющихся gear-репозиториями для пакетов Сизифа.<br />
<br />
<div id="gears"></div><br />
=== /gears ===<br />
<br />
В эту директорию помещаются git-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]]. Добавление исходного кода в репозиторий <tt>/gears</tt> происходит после успешной сборки пакета с помощью команд <tt>git.alt</tt> <tt>task</tt> или <tt>build</tt>.<br />
<br />
Каждый git-репозиторий в <tt>/gears</tt> назван по имени пакета с исходным кодом. Бранчи в нём называются по имени ветки, в которую собрался пакет (<tt>sisyphus</tt>, <tt>branch5.0</tt> и т.д). Тэги в репозитории соответствуют собранным версиям пакетов (<tt>1.0-alt1</tt>, <tt>1.0-alt0.M50.1</tt> и т.д.).<br />
<br />
=== /srpms ===<br />
<br />
В этой директории размещаются git-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]], собранных с помощью [[Incoming]].<br />
<br />
После первой сборки командами <tt>task</tt> или <tt>build</tt> <tt>git.alt</tt> репозиторий в <tt>/srpms</tt> замораживается.<br />
<br />
Поскольку git-репозитории <tt>/srpms</tt> создаются на основе <tt>src.rpm</tt>-пакетов, а сборка с помощью [[Incoming]] объявлена устаревшей, то использовать их стоит только из исторического интереса.<br />
<br />
<div id="email"></div><br />
<br />
== Почтовая подписка ==<br />
<br />
На <tt>git.alt</tt> реализовано два вида почтовой подписки на события:<br />
* Пользователь подписывается на события, происходящие в репозиториях <tt>public</tt> и <tt>packages</tt>.<br />
* Пользователь подписывает кого-то на события, происходящие в '''его''' репозиториях <tt>public</tt>, <tt>packages</tt> и <tt>private</tt>.<br />
<br />
Для подписки используются репозитории из каталога <tt>etc</tt>: <tt>packages.git</tt>, <tt>public.git</tt>, <tt>private.git</tt> в каталоге пользователя. Схема работы с подписками напоминает работу с <tt>CVSROOT</tt> из CVS: пользователь клонирует нужный репозиторий, коммитит изменения в него и push-ит обратно на сервер, после чего изменения вступают в силу.<br />
<br />
В каждом из трёх репозиториев находится два файла: <tt>email-subscription</tt> и <tt>email-distribution</tt> (точнее, в <tt>private.git</tt> — только <tt>email-distribution</tt>). <tt>git.alt</tt> использует бранч <tt>master</tt> и не обращает внимания на остальные бранчи в этих репозиториях.<br />
<br />
=== email-subscription ===<br />
<br />
Этот файл позволяет подписаться на события в публичных репозиториях <tt>git.alt</tt>. Формат файла — последовательность строк следующего вида:<br />
$USER $PACKAGE $REFTYPE $REFNAME<br />
где<br />
* $USER — имя пользователя <tt>git.alt</tt>,<br />
* $PACKAGE — имя пакета,<br />
* $REFTYPE — вид изменения: <tt>head</tt> — новые/удалённые коммиты, <tt>tag</tt> — новые/удалённые тэги (техническая подробность: второй компонент из изменяемой ссылки <tt>refs/*/*</tt>)<br />
<!-- или release (релизы для сборки пакетов. Пока что не работает. --><br />
* $REFNAME — имя изменения: имя бранча для коммитов, имя тэга для тэгов (техническая подробность: третий и последующие компоненты из изменяемой ссылки <tt>refs/*/*</tt>).<br />
Каждое из полей может быть полным именем или вайлдкардом <tt>*</tt>. Для имён пакетов также разрешён вайлдкард в конце имени (например, <tt>docs-*</tt>).<br />
<br />
==== Примеры ====<br />
<br />
Подписка на все события во всех репозиториях:<br />
* * * *<br />
Подписка на новые/удалённые тэги в репозитории /people/ldv/packages/glibc.git:<br />
ldv glibc tag *<br />
Действия для осуществления подписки:<br />
git clone git.alt:etc/packages.git<br />
cd packages<br />
echo 'ldv glibc tag *' >> email-subscription<br />
git commit -m "Subscribe to new tags in ldv's glibc repository" email-subscription<br />
git push<br />
<br />
=== email-distribution ===<br />
<br />
Этот файл позволяет подписать других пользователей <tt>git.alt</tt> на события в ваших репозиториях. Формат файла — последовательность строк вида:<br />
$PACKAGE $REFTYPE $REFNAME $MAILTO<br />
где<br />
* $PACKAGE, $REFTYPE, $REFNAME аналогичны параметрам из файла email-subscription<br />
* $MAILTO — разделённый запятыми список имён пользователей <tt>git.alt</tt> — получателей оповещения.<br />
Вайлдкарды в первых трёх полях допустимы так же, как и в email-subscription. Вайлдкарды в $MAILTO не допускаются.<br />
<br />
<br />
{{Category navigation|title=git.alt|category=git.alt|sortkey={{SUBPAGENAME}}}}<br />
<br />
[[Категория:Справочники]]<br />
<br />
[[en:git.alt reference]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=SerialLogin&diff=9639SerialLogin2009-02-26T15:12:29Z<p>EvgeniiTerechkov: Про перегрузку инита</p>
<hr />
<div>{{span|font-size: 180%|Как настроить вход на машину через последовательный порт (Serial Login)}}<br />
<br />
Для чего может понадобиться вход на Linux-машину через последовательный порт? Да мало ли для чего — например, если других способов связи нет, или для подключения к «безголовой» машине, конфигурация сети которой в общем случае неизвестна. В общем, бывает нужно.<br />
<br />
Напомню, что последовательные порты в Linux именуются в виде файлов {{path|/dev/ttyS*}} (на месте звёздочки может быть любой номер порта, начиная с нуля). Иногда, если используются адаптеры COM2USB, порты могут именоваться {{path|/dev/ttyUSB*}} (тоже начиная с нуля).<br />
<br />
Для настройки входа через последовательный порт вам надо выполнить два обязательных шага и, возможно, один необязательный:<br />
<br />
== Установка mgetty ==<br />
В ALT Linux вход по модемным линиям (здесь я их не рассматриваю) и последовательным портам обслуживает утилита '''mgetty'''. Для настройки входа вам нужно установить её. Сделайте это обычным методом (apt-get, aptitude, synaptic).<br />
<br />
== /etc/inittab ==<br />
Нужно поправить файл {{path|/etc/inittab}}, указать init-у запускать mgetty на нужных портах. Формат файла довольно прост и хорошо комментирован (в частности, есть пример и для mgetty). Подробности можно уточнить в inittab(5).<br />
<br />
Например, это может выглядеть так:<br />
<pre><br />
~ # grep -iE '^[^#].*mgetty' /etc/inittab<br />
T3:23:respawn:/sbin/mgetty -r -s 9600 -x 0 ttyS0<br />
T4:23:respawn:/sbin/mgetty -r -s 9600 -x 0 ttyS1<br />
</pre><br />
<br />
Эти параметры (с которыми init запустит mgetty для первых двух последовательных портов) означают, что что на портах /dev/ttyS[01] (mgetty сам умеет добавлять /dev/) ожидаются прямые (-r, то есть, с других компьютеров/терминалов, в противоположность модемным) соединения со скоростью 9600 бод (-s) и с уровнем отладочной информации равным нулю (-x). Изменения вступят в силу лишь после прочтения файла init-ом (в результате команды {{cmd|telinit q}} от суперпользователя или перезагрузки машины).<br />
<br />
Дополнительную краткую информацию по вызову mgetty можно почерпнуть из mgetty(8).<br />
<br />
== /etc/mgetty+sendfax/mgetty.config ==<br />
Это необязательный шаг. Всё поведение mgetty контролируется ключами командной строки, однако если вы захотите задать параметры в отдельном файле (и перенести туда все специфичные для портов параметры), то для этого есть файл {{path|/etc/mgetty+sendfax/mgetty.config}}. Сдесь вы можете задать как параметры, общие для всех портов, так и индивидуальные параметры линий. Подробности (а так же множество другой информации по последовательному входу) можно уточнить в полном руководстве — {{cmd|info mgetty}}.<br />
<br />
== Проверка ==<br />
Для проверки надо присоединить к только что настроенному порту кабель (COM2USB или DB-9 «мама-мама», для соединения с другим компьютером, либо другие кабеля, для другого оборудования), запустить терминальную программу ('''cu''', '''minicom''', '''cutecom'''), указать ей параметры соединения — порт (на машине откуда соединяемся) и скорость (указанную при запуске mgetty) и дать команду на соединение. В случае успеха на экран ничего не выводится — надо попробовать нажать несколько буквенно-цифовых (не функциональных) клавиш, чтобы mgetty распознал, что его зовут. Если всё хорошо — mgetty откликнется приглашением '''login:'''. Можно вводить имя пользователя и пароль, как обычно. Заметьте, что по умолчанию ALT Linux не пускает пользователя '''root''' через последовательные порты. Вы можете это изменить, поправив файл {{path|/etc/securetty}}.<br />
<br />
[[Категория:Admin]]</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:EvgeniiTerechkov&diff=7854Участник:EvgeniiTerechkov2008-12-26T17:36:31Z<p>EvgeniiTerechkov: Новая: Если хотите со мной связаться - пишете. В жаббер (обычно более оперативно) или в почту.</p>
<hr />
<div>Если хотите со мной связаться - пишете. В жаббер (обычно более оперативно) или в почту.</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Git.alt/%D0%A1%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA&diff=6439Git.alt/Справочник2008-11-22T07:14:36Z<p>EvgeniiTerechkov: /* acl add/del */ Поправил последствия копипаста</p>
<hr />
<div>[[Категория:Devel]]<br />
[[Категория:Sisyphus]]<br />
[[Категория:Справочники]]<br />
[[en:git.alt reference]]<br />
Эта страница документирует команды [[git.alt]], но не является [[Краткое руководство пользователя git.alt|кратким руководством]] или учебником по нему.<br />
<br />
__TOC__<br />
<br />
== Как воспользоваться <tt>git.alt</tt>? ==<br />
<br />
<tt>git.alt</tt> предоставляет несколько видов доступа:<br />
<br />
* SSH-доступ. Предоставляет несколько команд: для поиска репозиториев, их клонирования, создания, удаления, а также служебных.<br />
* <tt>ssh</tt>, <tt>git</tt>, <tt>rsync</tt>, <tt>http</tt> — доступ для непосредственной работы с репозиториями. <tt>git</tt>, <tt>rsync</tt> и <tt>http</tt>-адреса предоставляют r/o доступ, <tt>ssh</tt> — r/w.<br />
* Web-интерфейс. Находится по адресу http://git.altlinux.org/, предоставляет навигацию по списку репозиториев и <tt>gitweb</tt> для индивидуальных репозиториев.<br />
<br />
SSH-доступ к <tt>git.alt</tt> выдаётся после [[Join|принятия]] в ALT Linux Team.<br />
<br />
== SSH-доступ ==<br />
<br />
<tt>git.alt</tt> доступен по SSH по адресу <tt>git.altlinux.org:222</tt>. Аккаунт для доступа — <tt>git_$USERNAME</tt>, где USERNAME — имя, присвоенное в процессе принятия в Team, с символами «-» заменёнными на «_».<br />
<br />
Пример <tt>~/.ssh/config</tt>:<br />
Host git.alt<br />
HostName git.altlinux.org<br />
Port 222<br />
User git_USERNAME<br />
<br />
Для работы [[fsi:SSHFirewall|из-за прокси]] и в других сложных условиях SSH также доступен по адресу <tt>git.altlinux.org:443</tt>.<br />
<br />
Для работы с <tt>git.alt</tt> необходимо настроить свой <tt>git</tt> — параметры <tt>user.name</tt>, <tt>user.email</tt>, <tt>user.signingkey</tt>:<br />
$ git-config --global user.signingkey "<ID ключа GPG для подписи тэгов>"<br />
$ git-config --global user.email "<ваш email, как мантейнера>"<br />
$ git-config --global user.name "FirstName LastName"<br />
Например,<br />
$ git-config --global user.signingkey 0xA26F54C8<br />
$ git-config --global user.email dottedmag@altlinux.org<br />
$ git-config --global user.name "Mikhail Gusarov"<br />
<br />
Список команд выдаётся при ssh-логине без команды или с командой <tt>help</tt>:<br />
<br />
$ ssh git.alt help<br />
Available commands:<br />
help<br />
git-receive-pack <directory><br />
git-upload-pack <directory><br />
charset <path to git repository> [<charset>]<br />
clone <path to git repository> [<path to directory>]<br />
find-package <pattern><br />
init-db <path to directory><br />
ls [<path to directory>]<br />
mv-db <path to source directory> <path to destination directory><br />
quota<br />
rm-db <path to git repository><br />
task {list|new|show|drop|add|run} ...<br />
build <path to gear repository> <tag name> [<binary package repository name>] [<project name>]<br />
acl {--help|<binary package repository name> ...}<br />
$<br />
<br />
Во всех командах суффикс директорий репозиториев <tt>.git</tt> опционален и может быть опущен. В выводе команд <tt>.git</tt> присутствует всегда.<br />
<br />
=== Управление git-репозиториями ===<br />
<br />
==== ls ====<br />
<br />
'''$ ssh git.alt ls [<directory>]'''<br />
<br />
Эта команда позволяет посмотреть содержимое различных директорий на <tt>git.alt</tt>:<br />
<br />
$ ssh git.alt ls /people/dottedmag/public<br />
total 24<br />
drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git<br />
...<br />
drwxr-sr-x 5 4096 Jul 7 18:03 wackoconvert.git<br />
$<br />
<br />
Без параметров — показывает содержимое <tt>/people/$USERNAME</tt>:<br />
<br />
$ ssh git.alt ls<br />
total 16<br />
drwxr-s--- 5 4096 May 30 21:27 etc<br />
drwxr-sr-x 14 4096 Aug 13 23:53 packages<br />
drwxr-s--x 2 4096 Feb 13 2007 private<br />
drwxr-sr-x 8 4096 Aug 13 23:57 public<br />
$<br />
<br />
От этой же директории отсчитываются относительные пути:<br />
<br />
$ ssh git.alt ls public<br />
total 24<br />
drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git<br />
...<br />
drwxr-sr-x 5 4096 Jul 7 18:03 wackoconvert.git<br />
$<br />
<br />
==== find-package ====<br />
<br />
'''$ ssh git.alt find-package <pattern>'''<br />
<br />
Эта команда позволяет искать репозитории по переданному шаблону. Единственный метасимвол, допустимый в шаблоне — <tt>*</tt>. Репозитории ищутся в директории <tt>packages</tt> каждого пользователя, поскольку предполагается, что <tt>[[gear]]</tt>-репозитории располагаются именно там.<br />
<br />
$ ssh git.alt find-package glibc*<br />
/people/avm/packages/glibc.git 1216320095<br />
...<br />
/people/peet/packages/glibc-kernheaders.git 1177084354<br />
/people/mike/packages/glibc-kvercheck.git 1160664813<br />
$ ssh git.alt find-package glibc<br />
/people/avm/packages/glibc.git 1216320095<br />
...<br />
/people/peet/packages/glibc.git 1177084600<br />
$<br />
<br />
Вторая колонка в выводе <tt>find-package</tt> — unixtime времени последнего обновления репозитория.<br />
<br />
==== clone ====<br />
<br />
'''$ ssh git.alt clone <path to git repository> [<destination directory>]'''<br />
<br />
Эта команда позволяет «склонировать», то есть создать в своей директории копию репозитория для начала работы над ним.<br />
<br />
Без второго аргумента — клонирует в директорию <tt>packages</tt>:<br />
<br />
$ ssh git.alt clone /people/ldv/glibc.git<br />
Initialized empty Git repository in /people/dottedmag/packages/glibc.git/<br />
$<br />
<br />
Вторым аргументом можно указать как директорию, в которую нужно поместить клон репозитория, так и название репозитория:<br />
<br />
$ ssh git.alt clone /people/ldv/glibc.git public<br />
Initialized empty Git repository in /people/dottedmag/public/glibc.git/<br />
$ ssh git.alt clone /people/ldv/glibc.git public/test<br />
Initialized empty Git repository in /people/dottedmag/public/test.git/<br />
$<br />
<br />
Можно также склонировать репозиторий, находящийся вне <tt>git.alt</tt>:<br />
<br />
$ ssh git.alt clone <nowiki>http://github.com/dottedmag/madshelf.git</nowiki> public<br />
Initialized empty Git repository in /people/dottedmag/packages/public.git/<br />
Getting alternates list for <nowiki>http://github.com/dottedmag/madshelf.git</nowiki><br />
...<br />
walk 03d18e21d85fa30fc3ac8d921eb391e2a7bb242a<br />
$<br />
<br />
==== init-db ====<br />
<br />
'''$ ssh git.alt init-db <path to directory>'''<br />
Позволяет создать новый git-репозиторий. По умолчанию репозиторий создаётся в директории <tt>packages</tt>:<br />
$ ssh git.alt init-db test<br />
Initialized empty Git repository in ./<br />
girar-init-db: /people/dottedmag/packages/test.git<br />
При указании пути создаёт репозиторий по указанному пути:<br />
$ ssh git.alt init-db public/test<br />
Initialized empty Git repository in ./<br />
girar-init-db: /people/dottedmag/public/test.git<br />
<br />
==== mv-db ====<br />
<br />
'''$ ssh git.alt mv-db <path to source directory> <path to destination directory>'''<br />
Позволяет перемещать и переименовывать свои репозитории. При указании только имени репозитория подразумевается директория <tt>packages</tt>.<br />
<br />
Перемещение packages/test.git в public/newname.git:<br />
$ ssh git.alt mv-db test public/newname<br />
$<br />
Перемещение public/newname.git в packages/test.git:<br />
$ ssh git.alt mv-db public/newname test<br />
$<br />
Переименовывание packages/test.git в packages/megatest.git:<br />
$ ssh git.alt mv-db test megatest<br />
$<br />
<br />
==== rm-db ====<br />
<br />
'''$ ssh git.alt rm-db <path to git repository>'''<br />
Позволяет удалять свои репозитории. При указании только имени репозитория подразумевается директория <tt>packages</tt>:<br />
$ ssh git.alt rm-db megatest # удаляет packages/megatest.git<br />
$ ssh git.alt rm-db public/test<br />
<br />
=== Управление ACL пакетов ===<br />
<br />
''Смотри [[ACL]] для общей информации об ACL пакетов в Sisyphus.''<br />
<br />
Команда <tt>acl</tt> требует указания репозитория, над которым производится работа. На данный момент существует только репозиторий Sisyphus с меткой <tt>sisyphus</tt>.<br />
<br />
Если в командной строке указан только репозиторий, но не указана подкоманда, то список команд читается со стандартного ввода, по одной команде на строку, и выполняется тразакционно: ошибка в выполнении хотя бы одной команды отменяет действие всего набора команд:<br />
$ ssh git.alt acl sisyphus keyjnote<br />
girar-acl: Go ahead and type your commands<br />
'''keyjnote add peet'''<br />
'''keyjnote add raorn'''<br />
'''^D'''<br />
girar-acl: 2 command(s) queued<br />
$<br />
<br />
Все команды, меняющие состав группы или ACL пакета, могут производиться только ''лидером'' — первым в списке ACL пакета или в составе группы. Все такие операции выполняются асинхронно и результат их выполнения сообщается по email.<br />
<br />
==== acl show ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> show'''<br />
Показывает ACL указанного пакета<br />
<br />
$ ssh git.alt acl sisyphus bugzilla show<br />
bugzilla @nobody<br />
<br />
'''$ ssh git.alt acl <binary repository> @<group> show'''<br />
Показывает состав указанной группы майнтайнеров.<br />
<br />
$ ssh git.alt acl sisyhpus @python show<br />
@python ns ldv george akhavr bga lav swi at hiddenman sin mithraen kas<br />
<br />
==== acl add/del ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> add|del <login>|@<group> ...<br />
Добавляет/удаляет указанных пользователей и группы в/из ACL указанного пакета.<br />
<br />
$ ssh git.alt acl sisyphus keyjnote add damir<br />
girar-acl: 1 command(s) queued<br />
$ ssh git.alt acl sisyphus keyjnote del damir<br />
girar-acl: 1 command(s) queued<br />
<br />
'''$ ssh git.alt acl <binary repository> @<group> add|del <login>|@<group> ...<br />
Добавляет/удаляет указанных пользователей и группы в/из указанной группы.<br />
<br />
$ ssh git.alt acl sisyphus ns add @python<br />
girar-acl: 1 command(s) queued<br />
$ ssh git.alt acl sisyphus ns del @python<br />
girar-acl: 1 command(s) queued<br />
<br />
==== acl replace ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package>|@<group> replace <login>|@<group> <login>|@<group>'''<br />
Заменяет укзаанную запись в ACL пакета или составе группы на вторую указанную.<br />
<br />
$ ssh git.alt acl sisyphus keyjnote replace dottedmag @python<br />
Заменяет в ACL пакета <tt>keyjnote</tt> запись <tt>dottedmag</tt> на <tt>@python</tt>.<br />
<br />
==== acl leader ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> leader <login>|@<group><br />
Устанавливает лидера пакета — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке ACL пакета до выполнения этой команды.<br />
<br />
$ ssh git.alt acl sisyphus keyjnote leader @python<br />
<br />
'''$ ssh git.alt acl <binary repository> @<group> leader <login>|@<group><br />
Устанавливает лидера группы — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке членов группы до выполнения этой команды.<br />
<br />
$ ssh git.alt acl sisyphus @python leader ns<br />
<br />
==== acl nmu ====<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> nmu add|del [<login> [<start date> [<end date>]]]'''<br />
Выдаёт/снимает разрешение на проведение [[NMU]] указанного пакета.<br />
<br />
Параметры:<br />
* '''login''' — аккаунт, которому даётся разрешение на NMU. '''*''' или отсутствие параметра означает «кому угодно»<br />
* '''start date''' — дата начала действия NMU, в формате unixtime. Отсутствие параметра означает «немедленно»<br />
* '''end date''' — дата окончания действия NMU, в формате unixtmie. Отсутствие параметра означает «никогда».<br />
<br />
Удаление разрешения происходит по точному соответствию имени аккаунта, так что <tt>del *</tt> не приведёт к отмене всех NMU, выданных на пакет. С другой стороны, <tt>del user</tt> приведёт к отмене всех NMU, выданных данному пользователю.<br />
<br />
'''$ ssh git.alt acl <binary repository> <package> nmu show'''<br />
Выдаёт список NMU для указанного пакета, в формате<br />
<package> <login> <start date> <end date><br />
<br />
0 в поле ''end date'' означает «без ограничения».<br />
<br />
=== Сборка пакетов из [[gear]] ===<br />
<br />
Для сборки пакетов используется механизм ''задач'' — пользователь указывает, какие [[gear]]-репозитории необходимо собрать одной транзакцией, создавая задачу, после чего запускает её на выполнение. Задачи выполняются асинхронно. После завершения задачи пользователю приходит отчёт по e-mail.<br />
<br />
==== task ====<br />
<br />
'''$ ssh git.alt task list'''<br />
Показывает текущий набор ещё не запущенных задач пользователя.<br />
'''$ ssh git.alt task new [<binary repository>]'''<br />
Создаёт новую задачу для сборки пакетов в указанный репозиторий (по умолчанию - Sisyphus). Данная команда выдаёт идентификатор задачи на stdout.<br />
'''$ ssh git.alt task show <id>'''<br />
Показывает содержимое указанной задачи.<br />
'''$ ssh git.alt task drop <id>'''<br />
Удаляет указанную задачу.<br />
'''$ ssh git.alt task add [<id>] <gear repo path> <tag name> [<project name>]'''<br />
Добавляет в задачу (указанную аргументом или последнюю созданную) пакет, который необходимо собрать. Пакет указывается путём к gear-репозиторию и именем git-тэга.<br />
<br />
Пример:<br />
$ ssh git.alt task list<br />
$ ssh git.alt task new<br />
1227033465<br />
$ ssh git.alt task list<br />
1227033465<br />
$ ssh git.alt task show 1227033465<br />
user dottedmag<br />
repo sisyphus<br />
$ ssh git.alt task add keyjnote 0.10.2-alt2<br />
girar-check-perms: allowed: project leader<br />
$ ssh git.alt task show 1227033465<br />
user dottedmag <br />
repo sisyphus<br />
package keyjnote /people/dottedmag/packages/keyjnote.git 0.10.2-alt2 628b5199c0c0d7640181f2bf7c2e65d4bb3bfa2d sisyphus<br />
$ ssh git.alt task run 1227033465<br />
Queued #1227033465<br />
$<br />
<br />
Необязательный параметр ''project name'' используется для указания имени создаваемого <tt>src.rpm</tt>-файла, в том случае, если оно не совпадает с именем директории gear-репозитория.<br />
<br />
==== build ====<br />
<br />
'''$ ssh git.alt build <gear repo path> <tag name> [<binary repository>] [<project name>]'''<br />
Эта команда создаёт задачу по сборке указанного пакета и запускает её на выполнение. Параметры ''binary repository'' и ''project name'' имеют тот же смысл, что и в командах <tt>task new</tt> и <tt>task add</tt> соответственно.<br />
<br />
=== Вспомогательные команды ===<br />
<br />
==== charset ====<br />
<br />
'''$ ssh git.alt charset <path to git repository> [<charset>]'''<br />
<br />
Позволяет узнать или установить кодировку, используемую почтовым клиентом при отправке уведомлений, содержащих цитаты изменений файлов указанного git-репозитория:<br />
<br />
$ ssh git.alt charset packages/glibc<br />
utf-8<br />
$ ssh git.alt charset packages/glibc cp1252<br />
$ ssh git.alt charset packages/glibc<br />
cp1252<br />
$<br />
<br />
==== quota ====<br />
<br />
'''$ ssh git.alt quota'''<br />
<br />
Позволяет узнать квоту и занимаемое пользователем дисковое пространство.<br />
<br />
$ ssh git.alt quota<br />
Filesystem blocks quota limit grace files quota limit grace<br />
/dev/simfs 16932 977M 1465M 555 100k 150k <br />
$<br />
<br />
==== git-receive-pack, git-upload-pack ====<br />
<br />
Эти команды используются утилитами <tt>git-push</tt>, <tt>git-pull</tt> и подобными и не предназначены для вызова пользователем.<br />
<br />
=== Клонирование и работа с репозиториями ===<br />
<br />
Работа с git-репозиториями, расположенными на <tt>git.alt</tt>, ничем не отличается от работы с другими git-репозиториями.<br />
<br />
URL-ы репозиториев на git.alt:<br />
; '''git''' (r/o)<br />
: <tt>git://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git</tt><br />
; '''rsync''' (r/o)<br />
: <tt>git.altlinux.org::people/$USER/(packages|public)/$PACKAGE.git</tt><br />
; '''http''' (r/o)<br />
: <tt><nowiki>http://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git</nowiki></tt><br />
; '''ssh''' (r/w)<br />
: <tt>ssh://git.altlinux.org/people/$USER/(etc|packages|public|private)/$PACKAGE.git</tt><br />
<br />
HTTP- и git-URL-ы репозиториев можно в любой момент узнать в web-интерфейсе <tt>git.alt</tt>.<br />
<br />
=== Web-интерфейс ===<br />
<br />
Располагается по адресу http://git.altlinux.org/<br />
<br />
Предоставляет навигацию по публичным репозиториям пользователей (директории <tt>/people/$USERNAME/{packages,public}</tt>) и <tt>gitweb</tt>-интерфейс к этим репозиториям.<br />
<br />
Кроме этого, в web-интерфейсе представлены репозитории <tt>/archive</tt>, списки <tt>/acl</tt> и файл <tt>people-packages-list</tt>, содержащий все репозитории из директорий <tt>/people/$USERNAME/packages</tt> и даты их последнего изменения (в unixtime).<br />
<br />
== Структура репозиториев ==<br />
<br />
<tt>git.alt</tt> содержит два дерева репозиториев:<br />
<br />
* репозитории <tt>/people/$USERNAME</tt> для каждого зарегистрированного пользователя<br />
* репозитории <tt>/archive</tt> для пакетов Sisyphus<br />
<br />
=== /people ===<br />
<br />
Каждому зарегистрированному на git.alt разработчику предоставляется место для git-репозиториев, начинающееся с <tt>/people/$USERNAME</tt>. Доступ на запись в эти директории даётся только владельцу. Структура для хранения репозиториев жёстко определена:<br />
<br />
==== /people/$USERNAME/etc ====<br />
<br />
Содержит репозитории <tt>packages.git</tt>, <tt>private.git</tt>, <tt>public.git</tt>, с помощью которых можно управлять [[#Почтовая подписка|почтовой подпиской]]. Эти репозитории доступны на чтение только владельцу.<br />
<br />
==== /people/$USERNAME/packages ====<br />
<br />
Директория предназначена для хранения gear-репозиториев для пакетов Сизифа. Публично доступна.<br />
<br />
git-репозитории в этой директории будут искаться при выполнении команды <tt>find-package</tt>, и эта директория будет использоваться по умолчанию в командах <tt>init-db</tt>, <tt>clone</tt>, <tt>build</tt>.<br />
<br />
==== /people/$USERNAME/private ====<br />
<br />
Директория предназначена для хранения приватных репозиториев, о существовании и содержании которых должно быть известно только самому разработчику.<br />
<br />
Для удобства работают прямые http-ссылки на файлы репозиториев, размещённых в этой директории.<br />
<br />
==== /people/$USERNAME/public ====<br />
<br />
Директория предназначен для хранения публичных git-репозиториев, не являющихся gear-репозиториями для пакетов Сизифа.<br />
<br />
=== /archive ===<br />
<br />
В этой директории размещаются gear-репозитории пакетов Sisyphus.<br />
<br />
Репозиторий для каждого пакета создаётся с помощью утилиты <tt>gear-srpmimport</tt> на основе прошедших [[incoming]] <tt>src.rpm</tt>-пакетов, а не на основе <tt>gear</tt>-репозитория, из которых были собраны <tt>src.rpm</tt>, поэтому репозиторий /archive следует использовать для разработки только в том случае, когда <tt>gear</tt>-репозиторий для пакета отсутствует.<br />
<br />
== Почтовая подписка ==<br />
<br />
На <tt>git.alt</tt> реализовано два вида почтовой подписки на события:<br />
* Пользователь подписывается на события, происходящие в репозиториях <tt>public</tt> и <tt>packages</tt>.<br />
* Пользователь подписывает кого-то на события, происходящие в '''его''' репозиториях <tt>public</tt>, <tt>packages</tt> и <tt>private</tt>.<br />
<br />
Для подписки используются репозитории из директории <tt>etc</tt>: <tt>packages.git</tt>, <tt>public.git</tt>, <tt>private.git</tt>. Схема работы с подписками напоминает работу с <tt>CVSROOT</tt> из CVS: пользователь клонирует нужный репозиторий, коммитит изменения в него и push-ит обратно на сервер, после чего изменения вступают в силу.<br />
<br />
В каждом из трёх репозиториев находится два файла: <tt>email-subscription</tt> и <tt>email-distribution</tt> (точнее, в <tt>private.git</tt> - только <tt>email-distribution</tt>). <tt>git.alt</tt> использует бранч <tt>master</tt> и не обращает внимания на остальные бранчи в этих репозиториях.<br />
<br />
=== email-subscription ===<br />
<br />
Этот файл позволяет подписаться на события в публичных репозиториях <tt>git.alt</tt>. Формат файла - последовательность строк следующего вида:<br />
$USER $PACKAGE $REFTYPE $REFNAME<br />
где<br />
* $USER - имя пользователя <tt>git.alt</tt>,<br />
* $PACKAGE - имя пакета,<br />
* $REFTYPE - вид изменения: <tt>head</tt> - новые/удалённые коммиты, <tt>tag</tt> - новые/удалённые тэги (техническая подробность: второй компонент из изменяемой ссылки <tt>refs/*/*</tt>)<br />
<!-- или release (релизы для сборки пакетов. Пока что не работает. --><br />
* $REFNAME - имя изменения: имя бранча для коммитов, имя тэга для тэгов (техническая подробность: третий и последующие компоненты из изменяемой ссылки <tt>refs/*/*</tt>).<br />
Каждое из полей может быть полным именем или вайлдкардом <tt>*</tt>. Для имён пакетов также разрешён вайлдкард в конце имени (например, <tt>docs-*</tt>).<br />
<br />
==== Примеры ====<br />
<br />
Подписка на все события во всех репозиториях:<br />
* * * *<br />
Подписка на новые/удалённые тэги в репозитории /people/ldv/packages/glibc.git:<br />
ldv glibc tag *<br />
<br />
=== email-distribution ===<br />
<br />
Этот файл позволяет подписать других пользователей <tt>git.alt</tt> на события в ваших репозиториях. Формат файла - последовтельность строк вида:<br />
$PACKAGE $REFTYPE $REFNAME $MAILTO<br />
где<br />
* $PACKAGE, $REFTYPE, $REFNAME аналогичны параметрам из файла email-subscription<br />
* $MAILTO - разделённый запятыми список имён пользователей <tt>git.alt</tt> - получателей оповещения.<br />
Вайлдкарды в первых трёх полях допустимы так же, как и в email-subscription. Вайлдкарды в $MAILTO не допускаются.</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=Repocop/RepairMiniHOWTO&diff=6001Repocop/RepairMiniHOWTO2008-11-16T06:59:56Z<p>EvgeniiTerechkov: typos fixed</p>
<hr />
<div>[[Категория:Sisyphus]]<br />
[[Категория:Devel]]<br />
<br />
= Исправляем Репокопом пакеты за 5 минут. Краткое руководство. =<br />
__TOC__<br />
<br />
== Предисловие. ==<br />
<br />
Для исправления пакетов вам понадобится <br />
<br />
* локальное зеркало со свежим сизифом (Пусть это <tt>/var/ftp/pub/Linux/ALT/Sisyphus</tt>).<br />
* в сизифе должны быть repocop >= 0.07-alt21 и repocop-unittest >= 0.14.<br />
* Свежая [http://repocop.altlinux.org/pub/repocop/data/repocop-data-current.tar.gz база repocop] <div style="display: inline; color: red;">(более 100 Mb)</div>.<br />
* скрипт repocop-tools-ls-rpmbuild-bs-environment (есть в repocop >= 0.07-alt20 а также [http://repocop.altlinux.org/pub/repocop/scripts/repocop-tools-ls-rpmbuild-bs-environment здесь].<br />
<br />
== Знакомимся с предлагаемыми патчами ==<br />
<br />
Ищем свои папки на <br />
[http://repocop.altlinux.org/pub/repocop/reports/diff/by-acl/ http://repocop.altlinux.org/pub/repocop/reports/diff/by-acl/]<br />
и знакомимся с предложенными патчами.<br />
<br />
== Создаем песочницу с repocop ==<br />
Скачиваем скрипт и базу repocop<br />
cd ~<br />
wget -с http://repocop.altlinux.org/pub/repocop/scripts/repocop-tools-ls-rpmbuild-bs-environment<br />
chmod 755 ~/repocop-tools-ls-rpmbuild-bs-environment<br />
wget -c http://repocop.altlinux.org/pub/repocop/data/repocop-data-current.tar.gz<br />
<br />
Создаем песочницу<br />
hsh --initroot-only <опции hasher для вашего Сизифа><br />
<br />
копируем туда базу repocop<br />
cp repocop-data-current.tar.gz </path/to/your/hasher>/chroot/tmp/<br />
<br />
и разворачиваем ее внутри песочницы в <code>~/.repocop</code>:<br />
hsh-run tar xzf /tmp/repocop-data-current.tar.gz<br />
<br />
Устанавливаем в песочницу repocop<br />
hsh-install repocop-tools repocop-unittest<br />
и все пакеты, необходимые для нормального выполнения произвольного <code>rpmbuild -bs</code> :<br />
hsh-install `~/repocop-tools-ls-rpmbuild-bs-environment -c </path/to/your/hasher>/chroot/usr/src/.repocop`<br />
<br />
Еще внутри песочницы нужно дать доступ к свежему Сизифу. Создаем точку монтирования<br />
hsh-run mkdir /usr/src/Sisyphus<br />
и монтируем туда Сизиф:<br />
sudo mount --bind /var/ftp/pub/Linux/ALT/Sisyphus </path/to/your/hasher>/chroot/usr/src/Sisyphus<br />
<br />
правим в песочнице /usr/src/.rpmmacros либо копируем в песочницу ~/.rpmmacros<br />
<br />
песочница к запуску репокопа готова.<br />
<br />
== Запускаем repocop ==<br />
<br />
hsh-shell <br />
cd ~<br />
repocop-fix-srpm --include-packager='viy,emacs,java' \<br />
--packager='Igor Vlasenko <viy@altlinux.ru>' \<br />
--outdir=OUT --acl-file /usr/src/Sisyphus/files/list/list.src.classic \<br />
/usr/src/Sisyphus/files/noarch/RPMS /usr/src/Sisyphus/files/x86_64/RPMS /usr/src/Sisyphus/files/SRPMS<br />
<br />
Вместо viy,emacs,java укажите ваш ник и любимые группы, в которые вы входите.<br />
<br />
Заметим, что здесь нужно указывать <tt>/usr/src/Sisyphus/files/x86_64/RPMS</tt>, а не<br />
<tt>/usr/src/Sisyphus/files/i586/RPMS</tt>, поскольку в загруженной с [http://repocop.altlinux.org repocop.altlinux.org] базе данных <br />
есть только такие записи.<br />
<br />
После окончания работы генератора в папке <tt>OUT</tt> будут исправленные srpm'ки.<br />
<br />
Выходим, сразу отмонтируем Sisyphus, чтобы его не потерло при попытке следующей пересборки<br />
sudo umount </path/to/your/hasher>/chroot/usr/src/Sisyphus<br />
и копируем полученные src.rpm из песочницы.<br />
<br />
Смотрим, собираем, заливаем в incoming.<br />
<br />
== Enjoy! ==</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=%D0%A3%D0%BF%D0%B0%D0%BA%D0%BE%D0%B2%D0%BA%D0%B0_WM&diff=4519Упаковка WM2008-10-12T12:39:54Z<p>EvgeniiTerechkov: Оставлять свой позывные здесь не принято</p>
<hr />
<div>[[Категория:Devel]]<br />
{{Викифицировать}}<br />
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/УпаковкаWM}}<br />
<br />
== Упаковка оконных менеджеров (WM) ==<br />
<br />
=== Интеграция с менеджером сессий (*dm) ===<br />
<br />
Каждый менеджер сессий имеет свой конфигурационный файл, в котором перечислены все установленные оконные менеджеры. При запуске он читает их из своего конфигурационного файла и отображает пользователю. Для того, чтобы облегчить труд майнтейнеров оконных менеджеров, в ALT Linux был создан и используется скрипт, который автоматически добавляет/удаляет запись об оконном менеджере в конфигурационные файлы менеджеров сессий (поддерживаются KDM, GDM и WDM). Этот скрипт находится в <tt>/usr/sbin</tt> и называется '''update_wms'''. Для того, чтобы его вызвать, нужно в spec-файл добавить следующую запись:<br />
<br />
<pre>%post<br />
%update_wms<br />
<br />
%postun<br />
%clean_wms</pre><br />
<br />
Таким образом мы обеспечим вызов скрипта update_wms после установки пакета, чтобы добавить запись о новом менеджере окон, и после удаления пакета из системы, чтобы удалить запись о новом WM.<br />
<br />
Вся информация о свежеустановленном оконном менеджере должна находиться в файле <tt>/etc/X11/wmsession.d/YX</tt>, где 'Y' — двухзначный приоритет оконного менеджера (числа от 0 до 9 должны предваряться нулём), 'X' — название оконного менеджера. Пример: <tt>/etc/X11/wmsession.d/04IceWM</tt><br />
<br />
Формат файла с информацией о WM следующий:<br />
<br />
<pre>NAME=имя<br />
Название менеджера окон<br />
ICON=путь<br />
Путь к иконке, используемой для отображения этого WM<br />
DESC=описание<br />
Небольшое описание этого оконного менеджера, которое поможет сомневающемуся пользователю<br />
EXEC=путь<br />
Путь к исполняемому файлу, вызываемому менеджером сессий<br />
SCRIPT:<br />
exec путь<br />
Этот параметр нужен для совместимости</pre><br />
<br />
Таким образом, чтобы информация о новом оконном менеджере стала известна скрипту update_wms, мы должны добавить в наш spec-файл следующие строчки (пример для Fluxbox):<br />
<br />
<pre>%install<br />
...<br />
mkdir -p %buildroot%_sysconfdir/X11/wmsession.d<br />
cat >"%buildroot%_sysconfdir/X11/wmsession.d/07%name" <<__EOF__<br />
NAME=Fluxbox<br />
ICON=%iconsdir/%name.xpm<br />
DESC=Light and fast window manager<br />
EXEC=%bindir/%name<br />
SCRIPT:<br />
exec %bindir/%name<br />
__EOF__<br />
...<br />
%files<br />
%config %_sysconfdir/X11/wmsession.d/*</pre><br />
: <br />
Этот файл необязательно создавать в spec-файле. Можно создать его отдельно и добавить в спек только следующие строчки:<br />
<br />
<pre>SourceN: %name.wmsession<br />
...<br />
%install<br />
install -pD -m 644 %SOURCEN %buildroot%_sysconfdir/X11/wmsession.d/07%name<br />
...<br />
%files<br />
%config %_sysconfdir/X11/wmsession.d/*</pre><br />
<br />
=== Поиск иконок для меню ===<br />
<br />
<div style="display: inline; color: red;">Этот раздел выделен из [[IconPaths|policy]] и всё ещё местами ссылается на него.</div><br />
<br />
==== Порядок поиска пиктограмм ====<br />
<br />
Из вышесказанного следует, что правильно настроенный оконный менеджер<br />
должен искать пиктограммы в следующем порядке:<br />
<br />
если он поддерживает SVG, то сначала в<br />
/usr/share/icons/<theme>/scalable/apps.<br />
и в /usr/share/icons/hicolor/scalable/apps,<br />
<br />
если он поддерживает темы, то затем в<br />
/usr/share/icons/<theme>/<SIZExSIZE>/apps.<br />
<br />
Затем в любом случае смотрит<br />
/usr/share/icons/hicolor/<SIZExSIZE>/apps,<br />
где по выбору <SIZExSIZE> это одно из 16х16, 32х32 и 48х48 по выбору.<br />
<br />
Если оконный менеджер поддерживает масштабирование иконок, то затем<br />
смотрит в /usr/share/icons/<theme>/48х48/apps, и в<br />
/usr/share/icons/hicolor/48х48/apps (минимально гарантированная<br />
пиктограмма).<br />
<br />
Если оконный менеджер поддерживает масштабирование иконок, то<br />
дополнительно смотрим в /usr/share/icons/ и в /usr/share/pixmaps<br />
для совместимости с пакетами, которые бросают пиктограммы куда попало.<br />
&gt; /usr/share/icons - это старое стандартное положение иконок в ALT &gt; /usr/share/pixmaps - чисто GNOME &gt; Добавить можно обе. <br />
<br />
<div style="display: inline; color: red;">Замечание:</div> Вышеуказанный алгоритм --- некоторое приближение и упрощение для<br />
настройки оконных менеджеров, не поддерживающих freedesktop menu, в условиях [[AltLinux|AltLinux]].<br />
подробный алгоритм выписан на<br />
[http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html]<br />
<br />
==== Где прописывать пути ====<br />
<br />
Есть 2 возможности: список путей в оконном менеджере<br />
(если в нем есть такая возможность) и список путей в<br />
соответствующем методе для menu-methods (для оконных менеджеров,<br />
не поддерживающих напрямую freedesktop menu).<br />
<br />
Разберем это на примере [[IceWM|IceWM]].<br />
[[IceWM|IceWM]] поддерживает список путей в оконном менеджере,<br />
поэтому пути прописываем в параметре [[IconPath|IconPath]] конфигурации.<br />
<br />
[[IceWM|IceWM]] не поддерживает напрямую freedesktop menu,<br />
но функцию findicon можно взять попроще:<br />
<br />
function findicon($filename, $defaulticon)= \<br />
ifeqelse($filename, , $defaulticon, replace(replace($filename, ".xpm",), &quot;.png&quot;,))<br />
<br />
Если бы IceWM не поддерживал список путей, то их пришлось бы вбивать<br />
в findicon наподобие следующего (размер пиктограмм 16x16):<br />
<br />
function findicon($filename, $defaulticon)= \<br />
ifeqelse($filename, , $defaulticon, \<br />
:: ifelsefile($filename, $filename, \<br />
:: ifelsefile(«/usr/share/icons/hicolor/16x16/apps/» $filename, «/usr/share/icons/default.kde/16x16/apps/» $filename, \<br />
:: ifelsefile(«/usr/share/icons/hicolor/48x48/apps/» $filename, «/usr/share/icons/default.kde/32x32/apps/» $filename, \<br />
:: ifelsefile(«/usr/share/icons/hicolor/32x32/apps/» $filename, «/usr/share/icons/hicolor/16x16/apps/» $filename, \<br />
:: ifelsefile(«/usr/share/icons/slick/16x16/apps/» $filename,<br />
:: «/usr/share/icons/slick/16x16/apps/» $filename, \<br />
:: ifelsefile(«/usr/share/icons/mini/» $filename, «/usr/share/icons/mini/» $filename, \<br />
:: ifelsefile(«/usr/share/pixmaps/» $filename, «/usr/share/pixmaps/» $filename, \<br />
$defaulticon))))))))\</div>EvgeniiTerechkovhttps://www.altlinux.org/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%B0%D1%82%D1%87%D0%B5%D0%B9_%D0%B2_%D1%8F%D0%B4%D1%80%D0%BE&diff=4349Добавление патчей в ядро2008-10-06T16:50:23Z<p>EvgeniiTerechkov: Many and many typos fixed</p>
<hr />
<div>[[Категория:Devel]]<br />
[[Категория:Sisyphus]]<br />
[[Категория:Kernel]]<br />
<br />
''Эту статить надо слегка довести, и добавить ссылок''<br />
== Введение ==<br />
Эта статья описывает то, как добавить патчи к нашим ядрам и вообще рассказывает о git репозитории с ядром. <br />
Для начала стоит понять зачем в это лезть. Цели могут быть разные:<br />
* просто интересно. <br />
* есть функциональность, которую хотелось добавить, а в наших ядрах её нет.<br />
* расширение поддержки железа. Есть железяка, она не работает, но есть пач и возможность проверить.<br />
<br />
Почему этого не стоит делать:<br />
* Задача сложная, если не очень нужно, не забивайте себе голову.<br />
<br />
Чего не стоит делать:<br />
* Плодить разные flavour. Лучше добавить к имеющимся.<br />
* Делать только для себя. Если вы добавили пач, делающий что то полезное, стоит его выложить в сизиф. Оно может ещё кому-то пригодиться.<br />
<br />
Что нам нужно:<br />
* знание [[git]]. Хотя бы начальные. Вся разработка ядра ведётся в git, и его здесь ни как не обойти.<br />
* Знание сборочной системы [[gear]]<br />
* Доступ к репозитарию.<br />
* Достаточно мощная машина. Ядро может собираться долго(около получаса) в зависимости от железа, и в процессе сборки потребовать до 1Gb под временные файлы. Будьте готовы что этот процесс съест много ресурсов. <br />
* Доступ к git.alt. git репозитарий с ядром может занимать до 300Mb будьте готовы хотя бы раз скачать его полностью.<br />
<br />
== Разбираемся с бранчами ==<br />
Для начала нам нужен git репозитарий с ядром.<br />
для этого мы его клоним, например,<br />
git clone git://git.altlinux.org/people/silicium/packages/kernel-image-2.6.25.git<br />
Теперь заходим в kernel-image-2.6.25 и видим ванильное ядро. Дело в том, что git cкопировал только ветку master. Посмотреть остальные ветки можно с помощью команды<br />
git branch -a<br />
Оправившись от шока, вызванного обилием бранчей, разберёмся зачем каждый из них нужен.<br />
При ближайшем рассмотрении все бранчи можно разделить на<br />
* feat-*<br />
* fix-*<br />
* kernel-image*<br />
* kernel-source*<br />
* остальные<br />
Расскажем о них по порядку.<br />
<br />
====kernel-image-*====<br />
Основные бранчи - это бранчи kernel-image-*, именно из них собираются ядра. Эти бранчи соответствуют flavour'ам, например, пакет kernel-image-std-def собирается из одноименного бранча. Остальные - std-pae, std-ll, std-srv являются его производными и в данный момент нам не интересны. Для начала получим себе копию этого бранча<br />
git checkout -b kernel-image-std-def origin/kernel-image-std-def<br />
теперь, посмотрев в полученную директорию, мы увидим<br />
файлы <tt>kernel-image.spec</tt>, <tt>.gear/</tt>, <tt>modules.build</tt>, <tt>subflavours</tt> и исходники ядра.<br />
Spec-файл и директория .gear/ выполняют обычную роль.<br />
Файл <tt>modules.build</tt> - это список модулей для скриптов автоматической<br />
сборки модулей, туда добавляются все модули, которые надо пересобрать после обновления ядра.<br />
Файл <tt>subflavours</tt> - это список subflavour'ов, которые надо обновить при обновлении основного subflavour. Например, мы обновляем и тестируем <tt>std-def</tt>, а потом эти изменения специальным скриптом затаскиваются в остальные subflavour.<br />
<br />
====kernel-source====<br />
- это специальный бранч из которого собирается пакет <tt>kernel-source-''версия''</tt>.<br />
Этот пакет всегда содержит исходники ванильного ядра, и используется для сборки всех ядер<br />
своей версии. Важно, что в этом пакете содержится, например, 2.6.25, а не 2.6.25.17.<br />
Перед сборкой <tt>gear</tt> делает ''diff'' между тегами <tt>v2.6.''текущая верся ядра''</tt> (например, <tt>v2.6.25</tt>)<br />
и бранчем <tt>kernel-image-''flavour''</tt>. Этот ''diff'' кладется в SRPM,<br />
а при сборке вытягивается <tt>kernel-source-''версия''</tt> и на него накладывается<br />
этот ''diff''. Таким образом, kernel-source имеет смысл трогать, только если вы пытаетесь собрать новую версию ядра.<br />
<br />
====fix и feat====<br />
- это бранчи с патчами. Они "растут" из ванильного ядра (можно базовой, вроде <tt>v2.6.25</tt>,<br />
можно самой свежей ванильной) и содержат патчи, добавляющие (feat) какую-то возможность или<br />
устраняющие какую нибудь ошибку (fix).<br />
<br />
Далее, их названия имеют структуру <tt>{fix,feat}-''подсистема''-''суть''</tt>.<br />
Например, <tt>fix-fs-security</tt> устраняет уязвимости в файловых системах или VFS,<br />
а <tt>feat-drivers-net-atl1e</tt> добавляет драйвер для сетевой карточки atl1e.<br />
<br />
В общем случае:<br />
* в один бранч можно класть несколько патчей. <br />
* Разные вещи лучше держать в отдельных бранчах<br />
* Не стоит делать бранчи на основе <tt>kernel-image-std-def</tt>. Это потом вызывает массу проблем.<br />
* Если есть какие то фиксы, необходимые для мерджа или исправляющие возникающую проблему, то их стоит класть в этот бранч.<br />
<br />
Про названия, примеры:<br />
* добавить новую wifi карточку надо в бранч <tt>feat-drivers-net-wireless-''карточка''</tt><br />
* исправить проблему с поддержкой процессоров - в бранч <tt>fix-arch-cpu-''проц''</tt><br />
''Добавить примеров''<br />
<br />
== Добавление патчей ==<br />
Собственно последовательность необходимая для добавление пачей.<br />
Для начала выберем имя брача, и для удобства назовём его $branch. $vversion - это текущая версия ванильного ядра. Создаём бранч:<br />
git checkout -b $branch v$vversion<br />
Например<br />
git checkout -b feat-driver-net-atl1e v2.6.25<br />
<br />
Теперь приложим патч. Его можно либо приложить и закомитить. Тоесть:<br />
patch -p$n < $patch<br />
find -name "*.orig"|xargs rm -f<br />
git add .<br />
git commit -a<br />
<br />
В git commit стоит написать описание, собтвенно что этот патч делает.<br />
Ещё можно воспользоваться командой git am. <br />
<br />
Вышеописанное действие надо повторять, применив все необходимые патчи.<br />
<br />
Далее пробуем добавить наши патчи в исходные коды ядра.<br />
git checkout kernel-image-std-def<br />
git merge $branch<br />
<br />
После второй команды у нас могут возникнуть конфликты. Если они возникли их можно исправлять следующим итерационным алгоритмом.<br />
git status<br />
Увидили конфликтные файлы, выбрали один<br />
$EDITOR $file<br />
Ищем там строки >>>> , ====, <<<< и устраняем конфликты. Так же можно воспользоваться <tt>git mergetool</tt>.<br />
<br />
Затем делаем <br />
git add $file<br />
И повторяем с каждым файлом<br />
затем делаем<br />
git commit -a<br />
Собственно смерджили.<br />
Если патч трогает фалы KConfig стоит обновить конфиги.<br />
<br />
== Сборка и публикация ==<br />
Собрать ядро можно, также как и любой пакет, при помощи gear, только помните что пакет большой, собирается он долго, и при этом активно потребляет место.<br />
<br />
После сборки иногда имеет смысл собрать модули, об это можно почитать [[Сборка модулей ядра|здесь]]. Только собственно сборка происходит командой <br />
./buildmodules --hasher --hsh-workdir=/home/silicium/hasher -k std-def<br />
Тоесть имя модуля не указывается. И нужна ссылка kernel на git репозитарий с ядром. Поскольку имя модуля не указано этот скрипт пойдёт в git репозитарий, найдет там бранч kernel-modules-std-def и в нём файл modules.build и соберёт все модули для этого ядра.<br />
Собрав ядро и модули, можно приступать к тестированию. После тестирования стоит выложить результат работы в git.<br />
для этого при помощи<br />
ssh git.alt clone /people/silicium/packages/kernel-image-2.6.25<br />
Потом идём в директорию с ядром и добавляем(для удобства) remote. git.alt отвечает нам $url<br />
git remote add public ssh://git.alt/$url<br />
git push --all public<br />
Собственно после этого ядро все наши изменения заливаются на git.alt<br />
<br />
== Критерии добавления патчей в ядро std ==<br />
Хороший патч должен:<br />
* Быть полезным<br />
* Быть переносимым (хотя бы работать на x86_64 и i586)<br />
* Желательно быть отключаемым при загрузке или собираться модулем<br />
<br />
и не должен:<br />
* Менять работу базовых систем ядра<br />
* Мешать другим патчам<br />
* Что либо портить.</div>EvgeniiTerechkov