https://www.altlinux.org/api.php?action=feedcontributions&user=217.15.195.17&feedformat=atom
ALT Linux Wiki - Вклад [ru]
2024-03-28T08:43:14Z
Вклад
MediaWiki 1.38.2
https://www.altlinux.org/index.php?title=%D0%A2%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%8F_%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B8_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BE%D0%B2_RPM&diff=63224
Технология сборки пакетов RPM
2022-10-13T07:27:10Z
<p>217.15.195.17: /* Непосредственная сборка пакета */</p>
<hr />
<div><br />
<br />
{{Тимовец| ruslandh | Автор статьи }}<br />
<br />
== Классическая сборка пакетов rpm ==<br />
<br />
Классическая сборка пакета '''rpm''' состоит из следующих этапов :<br />
<br />
Во многом эта статья повторяет статью [[Сборка_пакета_с_нуля]], и возможно со временем иx надо обЪединить<br />
<br />
=== Нахождение исходного текста пакета ===<br />
<br />
Обычно мы находим исходный текст программы. Обычно исходный текст программы можно получить на официальном сайте программы.<br />
<br />
Это может быть готовый архив в виде tar, упакованный каким-нибудь компрессором, типа gzip, bzip и т.п..<br />
Также, это может быть репозиторий git, cvs, меркурий и т.п.<br />
<br />
В любом случае, мы получаем каталог с текстом программы и инструкцией, как можно программу собрать.<br />
<br />
Отдельным источником можно назвать пакет src.rpm или deb-src из другого дистрибутива.<br />
В этом случае можно "подсмотреть" как собирают этот пакеты другие.<br />
<br />
На этом этапе надо понять как в принципе собирается данный пакет.<br />
<br />
=== Написание инструкции сборки пакета ===<br />
<br />
Хорошая статья, как писать spec файл [[Spec | Руководство по написанию спек файла для rpm]] И ещё одна : [[Общие_правила_написания_спек_файлов_в_ALT_Linux]]<br />
<br />
<br />
На втором этапе, зная алгоритм сборки пакета, мы записываем алгоритм в виде '''spec'''-файла.<br />
<br />
Сборку пакета из исходников можно разделить на следующие основные этапы :<br />
<br />
* Распаковка исходного текста пакета и наложение патчей на него (например, исправляющие makefile пакета, чтобы он собирался не куда-нибудь в '''/opt''', а каталог предназначенный для сборки пакета).<br />
(секция '''%prep''')<br />
<br />
* Компиляция и линковка программ пакета (секция '''%build''')<br />
<br />
* Размещение программ в каталог, который будет упаковываться в rpm (секция '''%install''')<br />
<br />
* Написание скриптов нестандартных действий, которые выполняться при установке и удалении пакета (секции '''%post''' и '''%postust''')<br />
<br />
* Сама упаковка пакета и проверка его "правильности" (верификация пакета).<br />
<br />
Для тренировки сборки пакета, советую попробовать взять готовый пакет [https://git.altlinux.org/gears/h/hello.git], готовый src.rpm можно взять из репозитория, Например из Сизифа <br />
(ссылка скоро может устареть,в случае смены версии пакета) [http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/files/SRPMS/hello-2.10-alt1.1.src.rpm]<br />
<br />
=== Непосредственная сборка пакета ===<br />
<br />
Полезная ссылка для начинающего [[Сборка_пакетов_(etersoft-build-utils) | Краткая инструкция по сборке пакетов с помощью etersoft-build-utils ]] <br />
<br />
Кстати, для генерации основы spec-файла, установите пакет [https://packages.altlinux.org/ru/p10/srpms/genspec/ | genspec] , запустите скрипт '''gensprec''' и ответьте на вопросы. А скрипт из пакета [https://packages.altlinux.org/ru/sisyphus/srpms/github2spec/ | github2spec] умеет создавать полный gear репозиторий для сборки пакета.<br />
<br />
После того, как вы написали спек и подготовили исходники, можно переходить непосредственно к сборке пакета.<br />
<br />
Это лучше делать внутри хэшера, так как установка кучи необходимых для сборки программ, во первых грозит безопасности вашей операционной системы, а во вторых, засоряет её ненужными вам в дальнейшем пакетами.<br />
<br />
Каждому этапу сборки можно привести опцию rpm, которая это выполняет:<br />
<br />
* '''Распаковка исходника (секция %prep)''':<br />
<br />
'''rpmbuild -bp имя_спек_файла.spe'''c<br />
<br />
* '''Компиляция и линковка программ (сборка) пакета (секция %build)'''<br />
<br />
'''rpm -bc имя_спек_файла.spec'''<br />
<br />
или<br />
<br />
'''rpm -bc --short-circuit имя_спек_файла.spec'''<br />
<br />
разница состоит в том, что если запустить с ключом -bc, то rpm заново повторит распаковку пакета , а потом уже начнёт компиляцию. Если вы собираете пакет первый раз,по шагам, то вы могли внести в исходный текст пакета исправления, которые можно потом оформить в патчи, то распаковка исходников заново уничтожит ваши исправления.<br />
<br />
* '''Установка пакета в заданный каталог (%install)'''<br />
<br />
'''rpm -bi --short-circuit имя_спек_файла.spec'''<br />
<br />
* '''Создание непосредственно самого пакета rpm (и src.rpm)'''<br />
<br />
'''rpm -ba --short-circuit имя_спек_файла.spec'''<br />
<br />
* '''Упаковка src.rpm пакета'''<br />
<br />
'''rpm -bs - имя_спек_файла.spec'''<br />
<br />
Для ключа '''bs''' не требуется параметр '''--short-circuit''' , так как он непосредственно упаковывает ваши исходники и патчи в src.rpm, не выполняя действий по распаковке, компиляции и установке пакета.<br />
<br />
=== Пример классической сборки пакета ===<br />
<br />
Для всех примеров мы будем использовать пакет hello. Он есть и в репозитории и в git.altlinux.org [https://git.altlinux.org/gears/h/hello.git https://git.altlinux.org/gears/h/hello.git] <br />
<br />
Готовый src.rpm мохно взять их сорцов Сизифа [http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/files/SRPMS/hello-2.10-alt1.1.src.rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/files/SRPMS/hello-2.10-alt1.1.src.rpm] - ссылка может устареть с выходом новой версии пакета, поэтому текущую версию пакета, всегда можно найти здесь : [https://packages.altlinux.org/ru/sisyphus/srpms/hello/rpms/ https://packages.altlinux.org/ru/sisyphus/srpms/hello/rpms/ ] <br />
<br />
Допустим, мы скачали '''hello-2.10-alt1.1.src.rpm''' , от имени пользователя устанавливаем его от имени пользователя:<br />
<br />
$ '''rpm -ihv путь_до_каталога_с_файлом/hello-2.10-alt1.1.src.rpm<br />
'''<br />
В результате в каталоге пользователя ~/RPM/SPEC/<ref>в '''.rpmmacros''' прописаны стандартные для ALT пути:<br />
<br />
%_topdir %homedir/RPM<br />
<br />
%_tmppath %homedir/tmp<br />
<br />
</ref> появвляется файл '''hello.spec''', а в '''~/RPM/SOURCE''' файл '''hello-2.10.tar.gz'''<br />
<br />
Теперь зайдем в каталог '''~/RPM/SPEC'''/ и изучим содержание файла spec:<br />
<br />
Шапка пакета - его описание, лицензия, откуда можно скачать исходник, или домашняя страница проекта, параметр '''BuildRequires''' указывает какой "нестандартный" пакет требуется для сборки:<br />
<br />
<source lang=txt><br />
Name: hello<br />
Version: 2.10<br />
Release: alt1.1<br />
<br />
Summary: GNU hello, THE greeting printing program<br />
Group: Development/C<br />
License: GPLv3+<br />
<br />
Url: ftp://ftp.gnu.org/gnu/hello/<br />
<br />
Source: %name-%version.tar.gz<br />
# explicitly added texinfo for info files<br />
BuildRequires: texinfo<br />
<br />
%description<br />
The GNU `hello' program produces a familiar, friendly greeting. It<br />
allows nonprogrammers to use a classic computer science tool which<br />
would otherwise be unavailable to them. Because it is protected by the<br />
GNU General Public License, users are free to share and change it.<br />
</source><br />
<br />
Описание распаковки исходников и наложение патчей (Этап '''rpmbuild -bp'''):<br />
<source lang=txt><br />
%prep<br />
%setup -a0<br />
</source><br />
Распаковывается первый исходник (Source - hello-2.10.targz) в каталог:<br />
<br />
'''~/RPM/BUILD/hello-2.10'''<br />
<br />
<br />
<br />
Этап построения пакета (этап '''rpm -bc --short-circuit'''), выполняются команды <br />
<br />
'''autoreconf''', '''configure''', '''make''' с параметрами по-умолчанию для сборки пакетов '''rpm''' : <br />
<br />
<source lang=txt><br />
%build<br />
%autoreconf<br />
%configure<br />
%make_build<br />
</source><br />
<br />
Этап перемещения пакетов в каталог упаковки ('''rpm -bi --short-circuit'''), выполняются команды <br />
<br />
make install и поиск файлов перевода на различные языки:<br />
<br />
<source lang=txt><br />
%install<br />
%makeinstall<br />
%find_lang %name<br />
</source><br />
<br />
Перечень файлов, которые должны войти в пакет (этап '''rpm -ba --short-circuit'''):<br />
<source lang=txt><br />
%files -f %name.lang<br />
%doc AUTHORS ChangeLog ChangeLog.O NEWS README THANKS TODO<br />
%doc %name-%version<br />
%_bindir/*<br />
%_infodir/*<br />
%_mandir/man?/*<br />
</source><br />
<br />
Перечень людей пересобиравших пакет и изменения в пакете:<br />
<source lang=txt><br />
%changelog<br />
* Thu Dec 03 2015 Igor Vlasenko <viy@altlinux.ru> 2.10-alt1.1<br />
- NMU: added BR: texinfo<br />
<br />
......<br />
<br />
* Thu Oct 23 2003 Andrey Rahmatullin <wrar@altlinux.ru> 2.1.1-alt1<br />
- initial build<br />
<br />
<br />
</source><br />
<br />
Расшифровку макросов входящих в spec файл, можно получить выдав команду<ref>нужно установить пакет '''rpm-utils'''</ref> :<br />
<br />
$'''rpm -bE hello.spec'''<br />
<br />
Теперь попробуем собрать пакет hello в вашем текущем бренче, даём команду:<br />
<br />
$ '''rpm -ba hello.spec'''<br />
<br />
Скорей всего в вам выскочит сообщение, что для сборки пакета, нужно установить пакет texinfo, для этого вам надо установить пакет texinfo<br />
<br />
# '''apt-get install texinfo'''<br />
<br />
Это просто для одного недостающего пакета, сложнее для установки "кучи" необходимых для сборки пакетов.<br />
<br />
Для этого можно применить интересный приём :<br />
<br />
* Собираем пакет src.rpm (если его у вас нет, или вы добавили в spec свои патчи) :<br />
<br />
$ '''rpm -bs --nodeps hello.spec'''<ref>Дальше для простоты, я не буду указывать путь до файла, подразумевая, что вы предварительно перешли в каталог с файлом</ref> <br />
<br />
результат сборки вы увидите в ~/RPM/SRPMS/<br />
<br />
Далее настраиваем свой конфиг apt, что-бы он умел ставить пакеты, необходимые для сборки пакета указываем, где лежат пакеты src.rpm.<br />
<br />
Например, у меня локальное зеркало Сизифа с источниками установки прописаны в файле <br />
<br />
'''/etc/apt/sources.list.d/10-local.list''' c следующим содержанием:<br />
<br />
<source lang=txt><br />
# local (ALT Linux)<br />
<br />
rpm [p10] file:/mnt/Arhiv_ext/Branch-p10/ x86_64 classic gostcrypto<br />
rpm [p10] file:/mnt/Arhiv_ext/Branch-p10/ noarch classic<br />
rpm [p10] file:/mnt/Arhiv_ext/Branch-p10/ x86_64-i586 classic<br />
rpm-src [p10] file:/mnt/Arhiv_ext/Branch-p10/ x86_64 classic<br />
rpm-src [p10] file:/mnt/Arhiv_ext/Branch-p10/ noarch classic<br />
<br />
</source><br />
<br />
=== Установка пакетов, необходимых для сборки ===<br />
<br />
Тогда можно установить пакеты, необходимые для сборки пакета hello, одной из команд :<br />
<br />
$ '''rpmgp -i hello.src.rpm''' (требуется установить etersoft-build-utils )<br />
<br />
# '''apt-get build-dep hello.src.rpm''' (сейчас не работает) <ref>смотри {{altbug|}}</ref><br />
<br />
== Сборка внутри хэшера ==<br />
<br />
Описанный выше способ сборки пакета, как уже описано выше, имеет один существенный недостаток - в живую систему приходится <br />
<br />
устанавливать пакеты, не нужные в обычной жизни, например для сборки пакета hello, требуется пакет texinfo.<br />
<br />
Для сборки внутри хэшера, надо установить и настроить пакет [[hasher]], кратко смотри [[Hasher/Краткое_руководство | Hasher быстрый старт]], [[Hasher/FAQ | Hasher Faq ]].<br />
<br />
=== Классическое использование хэшера ===<br />
<br />
Классическое использование хэшера, это запуск его командой:<br />
<br />
$'''hsh путь/имя.src.rpm<br />
<br />
Возьмём для примера наш hello...src.rpm<br />
<br />
Для начала настроим работу хэшера <br />
<br />
* установим hasher <br />
<br />
# apt-get install hasher <ref># - это не комментарий, а знак что для выполнения команды apt-get нужно получить права [[root |root]] </ref><br />
<br />
* добавим аккаунты псевдопользователей для работы с хэшером:<br />
<br />
# hasher-useradd имя_вашего_пользователя<br />
<br />
* создадим окружение для работы хэшера:<br />
<br />
В домашнем каталоге пользователя создаём каталог, имя которого начинается с точки:<br />
<br />
$ cd <ref> $ - это знак, что команду cd надо выполнять вашим обычным пользователем </ref><br />
<br />
$ mkdir .hasher<br />
<br />
$ cd .hasher<br />
<br />
$ > config<br />
<br />
$ mcedit config<br />
<br />
В файле ~.hasher/config прописываются значения опций пользователя по-умолчанию. Эти опции можно изменить, указав их <br />
непосредственнр в самой команде вызова хэшера, например:<br />
<br />
<source lang=text><br />
<br />
def_repo=/home/$USER/hasher-repo<br />
<br />
install -d /tmp/private/$HOME/hasher<br />
<br />
ln -fs /tmp/private/$HOME/hasher /home/$HOME/hasher<br />
<br />
known_mountpoints=/dev/pts<br />
<br />
lock_nowait=1<br />
<br />
apt-config=$HOME/apt/apt.conf.s64<br />
<br />
if [ ! `uname -m` = x86_64 ]; then def_target=i586; fi<br />
<br />
</source><br />
<br />
Создаём файл ~/apt/apt.conf.s64 такого содержания :<br />
<br />
<source lang=text><br />
Dir::Etc::main "/dev/null";<br />
Dir::Etc::parts "/var/empty";<br />
Dir::Etc::SourceParts "/var/empty";<br />
Dir::Etc::sourcelist "/home/$USER/apt/sources.list.s64";<br />
<br />
RPM::Ignore { "vim-plugin-vimruby"; };<br />
</source><br />
<br />
И файл apt/sources.list.s64, например такого содержания:<br />
<br />
<source lang=text><br />
rpm [p10] file:/mnt/Arhiv/Branch-p10/ x86_64 classic gostcrypto<br />
rpm [p10] file:/mnt/Arhiv/Branch-p10/ x86_64-i586 classic<br />
rpm [p10] file:/mnt/Arhiv/Branch-p10/ noarch classic<br />
</source><br />
<br />
Здесь /mnt/Arhiv/Branch-p10/ - путь для локального репозитория p10<br />
<br />
Создаем символьную ссылку на расположение хэшера (например так):<br />
<br />
ln -fs /tmp/private/$USER/hasher /home/$USER/hasher<br />
<br />
И теперь запускаем саму сборку в хэшере, заходим в каталог с файлом и даём команду:<br />
<br />
hsh hello-2.10-alt1.1.src.rpm<br />
<br />
В результате этой команды внутри хэшера соберётся пакет hello-2.10-alt1.1.x86_64.rpm, который мы увидим (при приведённом выше конфиге) <br />
в ~/hasher_repo<br />
<br />
В качестве примера приведу команду сбора 32 разрядного приложения в хэшере на 64 - битной машине:<br />
<br />
<br />
$ setarch i586 hsh -v --apt-config=$HOME/apt/apt.conf.s32 $HOME/hasher<br />
<br />
<br />
apt/apt.conf.s32 - описание 32 битного репозитория<br />
<br />
=== Использование хэшера как изолированной среды сборки ===<br />
<br />
То есть для сборки пакета hello, со своими патчами, мы можем собрать свою версию src.rpm командой<br />
<br />
$ '''rpm -bs hello.spec'''<br />
<br />
И дальше собираем свой вариант hello:<br />
<br />
$ '''hsh hello-2.10-alt1.1.src.rpm'''<br />
<br />
Но гораздо интереснее, использовать хэшер на этапе изучения пакета.<br />
Устанавливаем "чистый" хэшер:<br />
<br />
$ '''hsh --initroot --pkg-build-list=+mc,rpm-utils''' <br />
<br />
Кладём в hasher/in нужные исходники, заходим внутрь хэшера:<br />
<br />
$ '''hsh-shell --mount=/dev/pts shell=mc'''<br />
<br />
Теперь копируем эти файлы в /usr/src/RPM/BUILD хэшера, и начинаем экспериментировать со сборкой пакета.<br />
<br />
Расположив спек в /src/RPM/SPECS, а исходники в /src/RPM/SOURCE , можно внутри хэшера собирать пакеты "классическим" способом.<br />
<br />
Для установки пакета внутрь пакета, нужно выйти из хэшера:<br />
<br />
$ '''exit'''<br />
<br />
и дать команду:<br />
<br />
$ '''hsh-install имя_пакета'''<br />
<br />
== Сборка с использованием инструментов работы с git репозиториями ==<br />
<br />
[[Git]] репозиторий, это удобное место для хранения исходного кода пакетов.<br />
Для работы с ними и для сборки из них '''rpm''' существует пакет [[gear]].<br />
<br />
Для примера рассмотрим сборку пакета hello из git репозитория [https://git.altlinux.org/gears/h/hello.git https://git.altlinux.org/gears/h/hello.git]<br />
<br />
Для начала склонируем git репозиторий в то место, где вы будите хранить свои рабочие исходники.<br />
Например:<br />
<br />
<source lang=bash><br />
$ mkdir My_Repo (не обязательно)<br />
$ cd My_Repo <br />
$ git clone https://git.altlinux.org/gears/h/hello.git<br />
</source><br />
<br />
Заходим в каталог hello и изучаем его.<br />
<br />
<source lang=text><br />
$ cd hello<br />
<br />
$ ls -al<br />
<br />
итого 24<br />
drwxr-xr-x 5 writer writer 4096 мая 15 19:58 .<br />
drwxr-xr-x 32 writer writer 4096 мая 15 19:58 ..<br />
drwxr-xr-x 2 writer writer 4096 мая 15 19:58 .gear<br />
drwxr-xr-x 8 writer writer 4096 мая 15 19:58 .git<br />
drwxr-xr-x 11 writer writer 4096 мая 15 19:58 hello<br />
-rw-r--r-- 1 writer writer 1680 мая 15 19:58 hello.spec<br />
</source><br />
<br />
<source lang=bash> <br />
$ cd .gear<br />
$ cat rules <br />
tar.gz: hello<br />
</source><br />
<br />
Правило tar.gz: hello , указывает, что каталог hello упаковывается в hello.tar.gz<br />
<br />
Установим пакет gear.<br />
<br />
# apt-get install gear<br />
<br />
И дадим команду из каталога hello:<br />
<br />
$ gear-hsh <br />
<br />
И у нас в хэшере собирается пакет (для 64 битной архитектуры) hello-2.10-alt1.1.x86_64.rpm<br />
<br />
== Ссылки ==<br />
Полезные ссылки:<br />
* [[Сборка_пакета_с_нуля]]<br />
* [[О_стратегии_сборки_RPM_пакетов]]<br />
* [[Spec | Руководство по написанию спек файла для rpm]]<br />
* [[Сборка_пакетов_(etersoft-build-utils) | Краткая инструкция по сборке пакетов с помощью etersoft-build-utils ]]<br />
* [[Краткое_руководство_по_сборке_с_gear]]<br />
* [[RPMMacrosDescription | Макросы RPM]]<br />
* [[git]]<br />
* [[gear]]<br />
* [[hasher]]<br />
<br />
{{Category navigation|title=devel|category=devel|sortkey={{SUBPAGENAME}}}}<br />
<br />
[[Категория:devel]][[Категория: Неоконченные страницы]][[Категория:RPM_spec]][[Категория:RPM]]</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Unmets_Creation_Policy&diff=63158
Unmets Creation Policy
2022-10-11T11:56:36Z
<p>217.15.195.17: /* Требования к пакетам, прячущим unmets */</p>
<hr />
<div>{{Policy|since_branch=5.0|responsible=Игорь Власенко}}<br />
<br />
=== Срок действия полиси. ===<br />
Данное полиси временное, устареет при появлении полноценных "карманов".<br />
<br />
=== Вводная часть ===<br />
<br />
Unmets (unmet dependencies) -- зависимости пакета, которые <br />
не могут быть разрешены в существующем репозитарии.<br />
<br />
В Сизифе не рекомендуется создавать unmet dependencies.<br />
Рекомендуется переводить транзакциями репозитарий <br />
с одного устойчивого состояния в другое.<br />
К сожалению, пока (до появления надлежащей реализации карманов?) <br />
некоторые транзакции и workflows сборочницей не поддерживаются.<br />
В частности, не поддерживаются транзакции, включающие в себя несколько версий<br />
одного и того же пакета (bootstrap-сборка).<br />
Получается противоречие: сборочница не позволяет создать unmets,<br />
в то время как для того, чтобы обновить пакет, unmets необходимо создать.<br />
<br />
Это противоречие можно обойти, спрятав unmets под ковер: <br />
создав пакет-заглушку, который обманывает сборочную систему, <br />
фиктивно предоставляя отсутствующие Provides:.<br />
Однако наличие таких пакетов в Сизифе создает другие проблемы,<br />
устранение которых является целью данного полиси.<br />
<br />
=== Требования к пакетам, прячущим unmets ===<br />
<br />
Реальные пакеты не должны иметь фиктивных (закрывающих unmets) Provides.<br />
Фиктивные Provides необходимо выделять в отдельный исходный пакет.<br />
<br />
Название пакета должно иметь вид unmet-dependency-<пакет, породивший unments>.<br />
<br />
Обоснование: легкая фильтрация таких пакетов.<br />
<br />
Рекомендуется ставить в пакете AutoReqProv: noauto,<br />
все фиктивные Provides: прописывать вручную.<br />
<pre><br />
AutoReqProv: noauto<br />
</pre><br />
<br />
Обоснование: во избежание.<br />
<br />
=== Требования к сборочной системе ===<br />
<br />
желательно иметь возможность принудительное удалять пакеты,<br />
несмотря на возникающие unmets.<br />
<br />
В крайнем случае, при удалении пакета вида unment-dependency-*<br />
проверка на возникающие unmets не должна проводиться.</div>
217.15.195.17
https://www.altlinux.org/index.php?title=%D0%9E_%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%B5%D0%B3%D0%B8%D0%B8_%D1%81%D0%B1%D0%BE%D1%80%D0%BA%D0%B8_RPM_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%BE%D0%B2&diff=63126
О стратегии сборки RPM пакетов
2022-10-10T15:32:35Z
<p>217.15.195.17: Опечатка в названии символической ссылки</p>
<hr />
<div>== Цель ==<br />
<br />
Цель - введение в стратегии сборки RPM пакета "с нуля" при помощи [[Hasher|Hasher]].<br />
<br />
== Общие слова ==<br />
<br />
Данная статья является дополнением, в чём-то перепевом, статьи Андрея Черепанова - [[Сборка_пакета_с_нуля|Сборка пакета с нуля]]. Но по цели и духу эта статья иная. На мой личный взгляд: малополезно описывать сборку какого-то конкретного пакета. Интересен набор практик и подходов к сборке. Я здесь хочу привести возможный способ работы с системой, хочу подчеркнуть особенности, в сравнении с иными материалами о RPM упаковках. Хочу обратить внимание на наиболее тяжёлые составляющие. Не ставлю целью: написать исчерпывающую, пошаговую инструкцию. Выбор и обработка исходного кода-примера неслучайны. Это демонстрация реально возможных отклонений от привычных дилетантам "./configure && make && make install".<br />
<br />
Попробую организовать изложение так, что для применения будет возможен прямой copy-paste в командную строку на чистой инсталляции операционной системы (например, в виртуальной машине). В т.ч. с этим и с удобством отладки связанно применение shell переменных в тексте. Раз начав работать, работайте в одном конкретном окне терминала, или нужно будет сделать для каждого терминала повторный 'export' для использованных переменных. В ALT Linux семейства P6 команды в терминал нужно копировать и выполнять по одной - тройной щёлк левой кнопкой мышки по строке в тексте, щёлк средней кнопкой в терминал, и Enter. Не занимался исследованиями отчего тут это так можно напороться на свойства параллелизации...<br />
<br />
В целом, текст ориентирован на требования коллектива ALT Linux к пакетам, собираемым для официального репозитория. Но есть сознательные отклонения. Останутся они, или кто уделит время их вычистке - мне всё равно.<br />
<br />
Части, касающиеся подписывания электронным ключом собираемого пакета, можно пропустить или выпустить из текста. Полные пояснения будут даны не ко всем упоминаемым командам и действиям.<br />
<br />
Ниже будет использовано абстрактное имя человека Not Shure, имя пользователя notshure, абстрактные адреса. Подразумевается, надо подставить своё имя вместо имени парня Not Shure и т.п. Подразумевается, что работа идёт от имени этого пользователя.<br />
<br />
Сборка описывалась и проверялась для семейства ALT Linux P6, с репозиториями пакетов для P6, для i586 архитектуры.<br />
<br />
С точки зрения эргономики, удобно экспериментировать в VirtualBox (использовался 4.1.18 из внешних для ALT Linux источников). Там удобно делать snapshot'ы прямо с запущенной системы, он работает на бывшем, на момент написания, в доступе процессоре. Ключевые точки "на траектории" изменения/настройки системы: конфигурация Hasher, первый запуск Hasher. В виртуальной машине был установлен OpenSSH server, запущен. После чего все действия на виртуалке выполнялись в эмуляторе терминала на машине хозяине, через SSH подключение. Впрочем, виртуальная машина необязательна. Ниже описанное применимо и без неё.<br />
<br />
== Настройка среды ==<br />
<br />
Необходимое в первую очередь ПО устанавливается по команде:<br />
<source lang=bash>apt-get install build-environment gear</source><br />
<br />
=== Выбор GPG ключа ===<br />
<br />
Иногда, в качестве удостоверения личности используют GPG. Если GPG ключа нет, то можно создать его. Как - см. [[Работа_с_ключами_разработчика|<br />
Работа с ключами разработчика]].<br />
<br />
Идентификатор ключа для Not Shure, скорее всего, можно увидеть, дав в терминале команду:<br />
<source lang=bash>keyId="$( gpg --list-keys | grep -B 1 'Not Shure' | grep "^pub[[:space:]]" )" ; keyId="${keyId#*/}" ; echo "${keyId%%[[:space:]]*}"</source><br />
<br />
Или его можно найти в выводе команды (обр. внимание на строку "sec ..."):<br />
<source lang=bash>gpg --list-secret-keys</source><br />
<br />
Для моего ключа идентификатор 835560D9.<br />
<br />
Кроме идентификатора понадобится отпечаток ключа. Отпечаток для ключа '835560D9' доступен по команде:<br />
<source lang=bash>LANG=C gpg --fingerprint 835560D9 | grep 'fingerprint =' | tr -d ' ' | cut -d= -f2</source><br />
<br />
Для моего ключа отпечаток '1B40E49FD40245D0472E4C5FD9528003835560D9'. <br />
<br />
Идентификатор и отпечаток понадобятся позже.<br />
<br />
=== Настройка GIT общая ===<br />
<br />
Настройте имя, адрес, идентификатор ключа для создаваемых вновь GIT репозиториев:<br />
<source lang=bash>git config --global user.name 'Not Shure'<br />
git config --global user.email 'notshure@localhost'<br />
git config --global user.signingkey '835560D9'</source><br />
<br />
=== Окружение RPM ===<br />
<br />
Создайте файл ~/.rpmmacros<br />
<source lang=bash><br />
echo "%packager Not Shure <notshure@localhost>" >> ~/.rpmmacros<br />
echo "%_gpg_name 1B40E49FD40245D0472E4C5FD9528003835560D9" >> ~/.rpmmacros<br />
</source><br />
<br />
Визуально проверьте файл на соответствие ожидаемому:<br />
<source lang=bash>cat ~/.rpmmacros</source><br />
<br />
=== Окружение Hasher ===<br />
<br />
Создайте двух служебных пользователей для сборочницы-песочницы (среды сборки Hasher): <br />
<source lang=bash>su -</source><br />
Сразу за тем:<br />
<source lang=bash><br />
hasher-useradd notshure<br />
exit<br />
</source><br />
<br />
Имя 'notshure' это имя существующего пользователя на машине, где будет развёрнута сборочная среда. От этого имени будет вестись(инициироваться) сборка пакетов. После регистрации надо войти-выйти, т.к. было добавление в группу... Для новичков - проще перезагрузиться.<br />
<br />
Момент регистрации пользователя и т.п. в Hasher тонки. Не советую ошибаться, а то придётся полопатить код Hasher'а и Интернет.<br />
<br />
Есть возможность внести настройки Hasher в специальный файл '~/.hasher/config'.<br />
Откройте файл на редактирование:<br />
<source lang=bash>mkdir -p ~/.hasher/<br />
nohup medit ~/.hasher/config 1>/dev/null 2>/dev/null &</source><br />
Вставьте туда содержимое:<br />
<source lang=text><br />
USER=notshure<br />
#workdir="/tmp/.private/notshure/"<br />
#target=i586<br />
packager="`rpm --eval %packager`"<br />
#apt_config="$HOME/.hasher/apt.conf"<br />
known_mountpoints=/proc<br />
mount=/proc<br />
</source><br />
<br />
Сохраните файл.<br />
<br />
Однако, ниже будет применена стратегия использования многих песочниц со своими отдельными настройками, вместо одной с "обычным" файлом настроек. Файл с настройками здесь создаётся только ради демонстрации его существования - чтоб был в мыслях, о оптимальных способах организации своей работы.<br />
<br />
Добавьте разрешение на создание файловой системы /proc внутри песочницы:<br />
<source lang=bash>su -<br />
</source><br />
<br />
Сразу затем:<br />
<source lang=bash><br />
nohup medit /etc/hasher-priv/system 1>/dev/null 2>/dev/null &<br />
exit<br />
</source><br />
<br />
В файл '/etc/hasher-priv/system', открывшийся в редакторе, добавьте отдельную строку:<br />
<source lang=text>allowed_mountpoints=/proc<br />
</source><br />
<br />
Если нужно, добавьте туда др. точки монтирования.<br />
<br />
== Подготовка репозитория Git ==<br />
<br />
=== Создание репозитория ===<br />
<br />
Создайте каталог, где будет находиться репозиторий с программой, создайте сам репозиторий:<br />
<source lang=bash><br />
mkdir ~/hello-git # Каталог-корень GIT репозитория.<br />
cd ~/hello-git<br />
git init<br />
</source><br />
<br />
Далее, если не оговорено иного (в т.ч. через cd и т.п.) и нет ошибки, предполагается, что команды отдаются внутри каталога '~/hello-git'.<br />
<br />
=== Создание веток ===<br />
<br />
Совсем необязательно, но удобно, когда оригинальный программный код расположен в отдельной ветке репозитория. Тогда код, в который вносятся изменения, файлы необходимые для сборки RPM пакета располагаются в своих, отдельных ветках. Если в этом нет нужды, то всё касающееся веток, дополнительных к 'master', можно пропускать, избирательно.<br />
<br />
Например, можно сделать вот такие ветки:<br />
* master - здесь будут находится служебные файлы, используемые при сборке RPM пакета: Spec файлы, файлы Gear (.gear/, и прочее). Программный код может быть, а может и не быть в этой ветке. По выбору собирающего пакет.<br />
* upstream - оригинальный, авторский, распакованный программный код, как он был предоставлен. Этот код будет хранится в этой ветке неизменным.<br />
* devel - ветка, в которую будет скопирован авторский код. Если потребуется вносить изменения в программу, то изменения будут внесены именно в этой ветке.<br />
<br />
=== Наполнение репозитория ===<br />
<br />
Создайте необходимые ветки и заготовки файлов:<br />
<source lang=bash><br />
mkdir ~/hello-git/hello # Каталог под исходный код программы.<br />
mkdir ~/hello-git/.gear<br />
touch ~/hello-git/.gear/rules<br />
touch ~/hello-git/hello.spec<br />
git add ~/hello-git/.gear/rules ~/hello-git/hello.spec<br />
git commit -a -m "Initial."<br />
git branch upstream<br />
git branch devel<br />
</source><br />
<br />
Можно проверить, что получилось:<br />
<source lang=bash><br />
git branch<br />
git status<br />
</source><br />
<br />
GIT сообщает, что текущая(активная) ветка 'master' (помечена '*' в выводе первой команды), что в отслеживаемых файлах нет изменений (вторая команда; она же - тоже указано имя текущей ветки).<br />
<br />
== Написание .gear/rules ==<br />
<br />
Забегая вперёд, создайте правило для Gear:<br />
<source lang=bash><br />
echo "tar.gz: targetTag:hello" > .gear/rules<br />
git commit -m "Gear rules inserted." .gear/rules<br />
</source><br />
<br />
Здесь 'targetTag' - некое, пока ещё "волшебное", имя. Это имя будет символизировать какой код, из какой ветки Вы хотите собрать и упаковать в RPM. Есть рекомендации составлять это имя из версии программы и номера сборки. Например: 0.0.1-alt4. Т.е. 0.0.1 - версия программы, alt4 - четвёртая сборка этой версии для ALT Linux. Я здесь выбираю это имя равным 'targetTag'.<br />
<br />
'hello' - это имя каталога, в котором будет находиться программный код внутри репозитория. Оно соответствует имени собираемого пакета. Код из этого каталога будет собран и упакован в пакеты.<br />
<br />
== Импорт исходного кода ==<br />
<br />
=== Простой способ ===<br />
Есть разные способы. Простейший: скопировать программный код в один из каталогов в репозитории.<br />
<br />
Откройте для редактирования файл '~/hello-git/hello/hello.c':<br />
<source lang=bash><br />
nohup medit ~/hello-git/hello/hello.c 1>/dev/null 2>/dev/null &<br />
</source><br />
<br />
Внесите в файл содержимое и сохраните:<br />
<source lang=c><br />
#include <stdio.h><br />
<br />
int main (void) {<br />
printf("Hello.\n");<br />
return 0;<br />
}<br />
</source><br />
<br />
Это и будет исходный код программы. Внесите в GIT репозиторий каталог с исходным кодом:<br />
<source lang=bash><br />
git add ~/hello-git/hello/<br />
git commit -m "Original source code is imported." ~/hello-git/hello/<br />
</source><br />
<br />
=== Импорт из src.rpm ===<br />
<br />
...<br />
<br />
== Написание спека ==<br />
<br />
На мой взгляд, в Spec две тяжёлые для создания составляющие: 1) определение зависимостей и 2) определение файлов - результата компиляции - которые нужно будет инсталлировать когда-либо. Стандарты есть, но в общем случае всё бывает ооочень по разному.<br />
<br />
В Spec файле потребуется указать группу, к которой нужно отнести собираемый пакет. Список групп в файле '/usr/lib/rpm/GROUPS'. Например, сейчас там есть группа 'Development/Other'.<br />
<br />
=== Поиск зависимостей ===<br />
<br />
Поиск - занятие творческое. Панацеи нет. Сначала нужно посмотреть, что пишут авторы у себя на сайте, в файлах, приложенных к исходному коду. Это сформирует примерный список нужного.<br />
<br />
Теперь можно использовать поиск в репозитории дистрибутива. Это команды:<br />
<source lang=bash><br />
apt-cache search искомое-сочетание1 искомое-сочетание2<br />
apt-cache show имя-существующего-пакета<br />
</source><br />
<br />
Найденные зависимости должны быть внесены в Spec файл.<br />
<br />
После этого можно пытаться собрать пакет, переходить к следующим разделам этой статьи. Но! Часто бывает - не все зависимости были найдены сборщиком пакета. Тогда, позже надо будет вернуться к редактированию Spec файла. При сборке пакета, в отчётах о ошибках будут упоминаться имена конкретных недостающих файлов. Нужно искать пакеты в которых есть эти файлы. Решать какие из этих пакетов перечислить в Spec файле.<br />
<br />
Один из способов поиска - творчески применять выше перечисленные утилиты apt-*. Один из более эффективных способов - смотреть в индексных файлах 'contents_index' репозитория. В этих файлах на отдельных строках приведено соответствие полного имени файла из пакета и имени этого пакета.<br />
<br />
Пример расположения этих файлов:<br />
<source lang=text><br />
repo-address/repo-name-architecture/base/contents_index<br />
/altair/ALT/Sisyphus/noarch/base/contents_index<br />
/altair/ALT/p6/noarch/base/contents_index<br />
</source><br />
<br />
* 'repo-address', '/altair/ALT/*/' и т.п. это адреса репозитория, описанные в файле '/etc/***/apt.conf'.<br />
* 'repo-name-architecture', 'noarch' - архитектура пакетов в репозитории.<br />
* 'base' - имя каталога с искомым файлом.<br />
<br />
Репозиториев, обычно, несколько. Индексных файлов будет несколько. Некоторые из файлов размером в сотни Мб.<br />
<br />
Искать удобно так:<br />
* сложить все файлы в один каталог под именами вроде contents_index_имя-архитектура-репозитория<br />
* выполнять в этом каталоге команду:<br />
<br />
<source lang=bash>grep -r искомая-часть-имени .<br />
</source><br />
<br />
Можно написать скрипт поиска...<br />
<br />
А иногда в дистрибутивах (в репозиториях) бывают доступны специальные, "из коробки" готовые к использованию утилиты для поиска соответствий короткого имени файла и имени пакета. Например, утилита 'apt-file'.<br />
<br />
Если зависимость всё равно не находится, то далее можно разбирать скрипты конфигурации и т.п. Смотреть, что именно ищется конфигураторами кода, пытаться понять, что именно в своём дистрибутиве соответствует найденному в конфигураторах, прорабатывать это.<br />
<br />
Возможно, что проще, иногда правильнее, собрать из оригинального кода дополнительные, отдельные пакеты с недостающими зависимостями. Но не всегда. Панацеи нет.<br />
<br />
Есть иной и относительно успешный выход: взять зависимость в виде готового RPM пакета из другого дистрибутива. Например, скопировать из Fedora-Project и т.п. Возможно взять исходный код нужной версии собираемого пакета (*.src.rpm файлы) не авторский, а проработанный кем-то для Fedora-Project. И изначально собирать уже его. IMHO это снижает уровень поддержки пакета, но даёт быстро и дёшево некий результат.<br />
<br />
=== Секция инсталляции ===<br />
<br />
При использовании утилиты 'install' можно не указывать конечного владельца и группу для инсталлируемого файла. Т.е. вместо<br />
<source lang=bash><br />
install -m755 -o root -g root targetFile %{buildroot}%{_bindir}<br />
</source><br />
может быть использовано<br />
<source lang=bash><br />
install -m755 targetFile %{buildroot}%{_bindir}<br />
</source><br />
<br />
См. об особенностях Hasher.<br />
<br />
=== О макросах ===<br />
<br />
Если нужно узнать какие макросы есть в системе, можно заглянуть в файлы:<br />
<source lang=text><br />
/etc/skel/.rpmmacros<br />
/etc/skel.ru_RU.CP1251/.rpmmacros<br />
/etc/skel.ru_RU.KOI8-R/.rpmmacros<br />
/home/${USER}/.rpmmacros<br />
/usr/lib/rpm/*<br />
/etc/rpm/*<br />
</source><br />
<br />
Во что разворачивается макрос '%make_install' можно увидеть так:<br />
<source lang=bash><br />
rpm --eval %make_install<br />
</source><br />
<br />
Система сборки пакета раскрывает макросы в Spec файле, даже если они находятся внутри комментария. Если нужно "выключить" макрос, то делается это аналогично выключению спец.символов в других системах - удвоением, повторением спец.знака '%':<br />
<source lang=bash># экранированный макрос %%configure<br />
</source><br />
<br />
=== Конкретный пример Spec файла ===<br />
<br />
Откройте Spec файл для редактирования:<br />
<source lang=bash>nohup medit ~/hello-git/hello.spec 1>/dev/null 2>/dev/null &<br />
</source><br />
<br />
Внесите туда содержимое:<br />
<source lang=text><br />
%define namePackager Not Shure<br />
%define addressPackager notshure@localhost<br />
%define dateFormated Wed Oct 10 2012<br />
<br />
Name: hello<br />
Version: 1.3<br />
Release: alt1<br />
<br />
Summary: The hello programm<br />
License: GPLv3<br />
Group: Development/Other<br />
<br />
Url: http://mit.edu<br />
Source: %{name}-%{version}.tar.gz<br />
Packager: %{namePackager} <%{addressPackager}><br />
<br />
# Fake dependency. Used as example of syntax, etc.<br />
BuildPreReq: /proc<br />
<br />
BuildRequires: gcc<br />
BuildArch: i586<br />
<br />
%description<br />
Hello, I love you,<br />
Won't you tell me your name?<br />
Hello, I love you,<br />
Let me jump in your game.<br />
<br />
%prep<br />
%setup<br />
<br />
%build<br />
<br />
%define dirBuild %{_topdir}/BUILD/%{name}-%{version}<br />
%define dirBin %{dirBuild}/%{name}-%{version}<br />
mkdir -p %{dirBin}<br />
gcc "%{dirBuild}/hello.c" -o "%{dirBin}/hello.out"<br />
<br />
%install<br />
install -D -m755 "%{dirBin}/hello.out" %{buildroot}%{_bindir}/hello.out<br />
rm -rf %{dirBin}<br />
<br />
%files<br />
%{_bindir}/*<br />
<br />
%doc hello.c<br />
<br />
%changelog<br />
* %{dateFormated} %{namePackager} <%{addressPackager}> %{version}-%{release}<br />
- Initial build for ALT Linux Sisyphus<br />
</source><br />
<br />
В Spec файле нужно убирать пробелы в начале строк (см. о ошибке 'gear: .gear/rules line 1: Empty @version@ "" specified').<br />
<br />
Внесите изменения в репозиторий:<br />
<source lang=bash>git commit -m "Spec file modified." ~/hello-git/hello.spec<br />
</source><br />
<br />
== Сборка в Hasher ==<br />
<br />
В процессе сборки пакета, на диске будет существовать два важных и очень разных каталога. 1) - каталог с GIT репозиторием, 2) - каталог с песочницей Hasher, в которой будут работать утилиты, собирающие пакет.<br />
<br />
=== Немного ещё слов о GIT ===<br />
<br />
GIT репозиторий хранит в себе историю изменения кода. Каждый коммит в репозиторий имеет свой идентификатор - SHA1 хэш, соответствует внесению каких-либо изменений. Можно сказать: каждый коммит соответствует какому-либо состоянию кода в той или иной ветке. Для сборки можно выбрать любое конкретное состояние кода, из любой ветки, указав сборочным утилитам нужный идентификатор коммита. Т.е. можно собирать пакет из кода какой-либо неактуальной и старой версии, всё ещё хранимой как история в репозитории. Или из кода хранимого в ветке, соседней по отношению к содержащей Spec файл. При этом можно оставаться в ветке, где кроме Spec файла и правил Gear ничего нет.<br />
<br />
=== Подготовка репозитория ===<br />
<br />
Сборка будет осуществляться из ветки репозитория, содержащей Spec файл, Gear правила - т.е. из 'master'. Переключитесь на эту ветку:<br />
<source lang=bash>git checkout master<br />
</source><br />
<br />
Перед сборкой нужно определить какое именно состояние кода, из истории в репозитории, нужно собирать - нужно выбрать какой-либо идентификатор коммита. Смотрите вывод команды:<br />
<source lang=bash>git log<br />
</source><br />
<br />
Иногда в разборе истории помощь могут оказать разнообразные визуализаторы истории. Например, утилита gitk.<br />
<br />
<br />
Например, пусть нужный коммит имеет SHA1 хэш равный '086aded4d6144aa8ffa45f52b21abff02ad8e669'. Пометьте этот коммит тегом 'targetTag', обновите теги Gear, внесите сделанные изменения в репозиторий:<br />
<source lang=bash>export tagSHA1Sum=086aded4d6144aa8ffa45f52b21abff02ad8e669<br />
</source><br />
<br />
Затем:<br />
<source lang=bash>git tag --force -u 835560D9 -m "Build target tag updated." targetTag ${tagSHA1Sum}<br />
</source><br />
<br />
И теперь:<br />
<source lang=bash>gear-update-tag --all<br />
git commit -a -m "GIT and Gear tags updated."<br />
</source><br />
<br />
Здесь идентификатор '835560D9' надо заменить на идентификатор Вашего PGP ключа.<br />
<br />
Свяжите текущее состояние ветки 'master' c выбранным для сборки состоянием кода (нужны имя ветки... и хэш ранее выбранного коммита):<br />
<source lang=bash>git merge -s ours ${tagSHA1Sum}<br />
</source><br />
<br />
Теперь, при запуске сборки, система будет собирать и упаковывать состояние кода, помеченное тегом 'targetTag'. См. ранее о правилах Gear.<br />
<br />
=== Подготовка песочницы ===<br />
<br />
Можно собирать пакет в каталоге-песочнице, создаваемом по умолчанию. Удобнее иметь несколько разных каталогов - несколько разных песочниц. Под разные архитектуры, под разные пакеты и разные версии.<br />
<br />
Пускай путь к каталогу с песочницей будет "${pathToSandbox}". Структура каталогов, файлы в песочнице будут следующими, например:<br />
<source lang=text><br />
"${pathToSandbox}" (файлы apt.conf, compile, priorities, sources.list)<br />
|-hasher <br />
|---repo<br />
|-----SRPMS.hasher<br />
|-----i586<br />
|-------RPMS.hasher<br />
|-tmp<br />
</source><br />
<br />
В каталоге "${pathToSandbox}" будут храниться файлы, создаваемые в т.ч. по инициативе пользователя, автоматикой он не контролируется. Каталог "${pathToSandbox}/hasher" - это песочница, в ней будут работать роботы.<br />
<br />
Создайте песочницу, откройте для редактирования файлы с конфигурациями, заполните файлы по образцам:<br />
<source lang=bash><br />
export pathToSandbox="${HOME}/hsh-sandboxes/p6-hello-i586"<br />
mkdir -p "${pathToSandbox}"<br />
mkdir -p "${pathToSandbox}/hasher"<br />
mkdir -p "${pathToSandbox}/tmp"<br />
pushd . > /dev/null<br />
cd "${pathToSandbox}"<br />
touch apt.conf compile priorities sources.list<br />
chmod +x compile<br />
nohup medit apt.conf compile priorities sources.list 1>/dev/null 2>/dev/null &<br />
popd > /dev/null<br />
</source><br />
<br />
Содержимое файлов см. ниже в приложении. Имя каталога с песочницей в файлах замените на реальное, т.е. менять внутри файлов '/directorySandbox' на вывод команды:<br />
<source lang=bash>echo "${pathToSandbox}"<br />
</source><br />
<br />
Если в каталоги вида '/directorySandbox/hasher/repo/i586/RPMS.hasher' скопировать какие-либо RPM пакеты, сборочные утилиты могут использовать эти пакеты. Например, в этот каталог можно добавлять пакеты-зависимости отсутствующие в доступных репозиториях. Эти пакеты зависимости будут использованы при сборке (установлены внутри песочницы). Есть алгоритм выбора пакетов-зависимостей из репозиториев. Обычно (Всегда? А apt.*?) выбирается пакет с наибольшей версией.<br />
<br />
При установке программ из репозитория в сети, в Интернете, устанавливаемые пакеты сначала скачиваются в кеш на диске, устанавливаются из кеша, некоторое время хранятся в кеше. На базе кеша можно создавать собственные репозитории на диске. Можно настроить кеш на "хранить вечно, хранить всё", использовать в своих целях. См. литературу по APT менеджеру пакетов и RPM репозиториям.<br />
<br />
=== Сборка ===<br />
<br />
Конструирование песочницы занимает ощутимое время. Для экономии времени можно использовать такую стратегию: сгенерировать песочницу один раз, при первой попытке сборки; в последующих попытках использовать уже готовую песочницу; GIT репозиторий не засорять пробными версиями Spec файла и т.п., используя параметр '--commit'.<br />
<br />
Команды сборки выполняются в корневом каталоге GIT репозитория, активная ветка GIT репозитория - содержащая Spec файл и Gear правила.<br />
<br />
Первичные команды для создания песочницы и сборки:<br />
<source lang=bash><br />
ln -s "${pathToSandbox}/compile" compile-p6-i586<br />
./compile-p6-i586 --clean-all<br />
./compile-p6-i586 --build<br />
</source><br />
<br />
Последующие попытки сборки выполняйте командой:<br />
<source lang=bash>./compile-p6-i586 --rebuild<br />
</source><br />
<br />
Эти команды - усложнения, к сильнее использующим центральный конфигурационный файл:<br />
<source lang=bash><br />
#hsh --cleanup-only ${pathToSandbox}/hasher<br />
#gear --verbose --commit --hasher -- hsh --verbose --lazy-cleanup --mountpoints=/proc --apt-config="${pathToSandbox}/apt.conf" ${pathToSandbox}/hasher<br />
#gear --verbose --commit --hasher -- hsh-rebuild --verbose --mountpoints=/proc ${pathToSandbox}/hasher<br />
</source><br />
<br />
Полную очистку через 'hsh --cleanup-only' делать совершенно необязательно. Более подробно про команды см. в приложении - внизу страницы, "Файл compile для песочницы."<br />
<br />
Если необходимо получать логи сборки в текстовых файлах, то используйте команду:<br />
<source lang=bash><br />
timestamp=$( date '+%Y-%m-%d-%H%M-%S' ) ; gear ... -- hsh ... 2>./error-${timestamp}.log 1>./build-${timestamp}.log ; unset timestamp<br />
</source><br />
<br />
Многоточия надо заменить на необходимое, см. выше. (Неужели нет иного способа логгировать в файл или иную сущность, удобную для поиска в логе? При необходимости исследований для больших объёмов кода это нужно.)<br />
<br />
Обратите внимание, что использован файл конфигурации apt.conf, несовпадающий с указанным в конфигурационном файле Hasher. Это может быть удобно в случае многих песочниц.<br />
<br />
При успешном окончании сборки будут выведены, в числе других, сообщения о том, куда и какие созданные RPM пакеты были скопированы.<br />
<br />
Замечание: при работе сборщика имеет место ошибка:<br />
<source lang=text><br />
rpmdb: /home/notshure/tmp: No such file or directory<br />
rpmdb: unable to create temporary backing file<br />
</source><br />
<br />
Нужно устранить, проанализировать возможные для сборщика аргументы командной строки. Ошибка не критична для получения упакованных в RPM объектов.<br />
<br />
Замечание: нельзя исключать, что можно было указывать внешний, отдельный конфигурационный файл. Тогда скрипт 'compile' сокращается/упрощается очень значительно.<br />
<br />
=== Исследование результатов сборки ===<br />
<br />
Если сборка неудачна, может потребоваться исследовать файлы и т.п. внутри песочницы. Для входа в песочницу используйте команды:<br />
<source lang=bash>hsh-shell ${pathToSandbox}/hasher<br />
</source><br />
Или:<br />
<source lang=bash><br />
hsh-shell --rooter ${pathToSandbox}/hasher<br />
</source><br />
<br />
Вторая команда позволяет получить root привилегии внутри песочницы.<br />
<br />
Без дополнительных телодвижений нельзя одновременно войти в песочницу и осуществлять какие-то ещё операции Hasher. Однако, запущенное "параллельное" действие не прерывается, а ждёт окончания других операций.<br />
<br />
Список инструментов внутри песочницы краток. Имена пакетов с недостающими необходимыми инструментами можно добавить как зависимости сборки в Spec файле - пакеты будут установлены в песочницу. Так же, можно использовать команду 'hsh-install' для доустановки пакетов вручную, находясь снаружи песочницы.<br />
<br />
Для корректной работы некоторых программ в песочнице необходимо иметь смонтированными внутри песочницы некоторые файловые системы. Например, /proc для Java инструментов.<br />
<br />
Сборочные утилиты производят ряд проверок файлов, получаемых при сборке, упаковываемых в пакет. При необходимости исследований некоторые проверки можно отключить. Одно из средств выключения - макросы в Spec файле:<br />
<source lang=text><br />
%set_verify_elf_method no<br />
</source><br />
<br />
Ещё - можно заглянуть в файлы '/usr/lib/rpm/noarch-linux/macros', '/usr/lib/rpm/brp.d/064-verify_elf.brp', '/usr/lib/rpm/verify-elf'.<br />
<br />
Можно отключать проверки через аргументы в командной строке для Hasher. Например, вот такой аргумент '--no-sisyphus-check=bindir,subdirs,summary'.<br />
<br />
=== Применение [[Buildreq|Buildreq]] ===<br />
<br />
См. профильные статьи этой Wiki. Мне не сложилось использовать. По мнению авторитетных специалистов: эвристики ошибаются меньше/реже чем человек. /* Не ссылаюсь на имена. */<br />
<br />
== Отправка в git.alt ==<br />
<br />
Процедура, описанная в соответствующих статьях в этой Wiki, вполне не вызвала вопросов.<br />
<br />
== Приложения ==<br />
<br />
=== Файл apt.conf для песочницы ===<br />
<source lang=text><br />
Dir::Etc::main "/dev/null";<br />
Dir::Etc::parts "/var/empty";<br />
Dir::Etc::sourcelist "/directorySandbox/sources.list";<br />
Dir::Etc::pkgpriorities "/directorySandbox/priorities";<br />
Dir::Etc::sourceparts "/var/empty";<br />
APT::Cache-Limit "67108864";<br />
</source><br />
<br />
=== Файл priorities для песочницы ===<br />
<source lang=text><br />
Important:<br />
basesystem<br />
altlinux-release-p6<br />
Required:<br />
apt<br />
</source><br />
<br />
=== Файл sources.list для песочницы ===<br />
В разных окружениях этот файл может быть разным. См. '/etc/apt/sources.list' как пример. См. 'man sources.list', можно скопировать из '/etc/apt/sources.list.d/alt.list':<br />
<source lang=text><br />
rpm [p6] http://ftp.altlinux.org/pub/distributions/ALTLinux/p6/branch i586 classic<br />
rpm [p6] http://ftp.altlinux.org/pub/distributions/ALTLinux/p6/branch noarch classic<br />
</source><br />
<br />
Или другой вариант ниже использует существующие локально на диске репозитории:<br />
<source lang=text><br />
rpm file:/altair/ALT/Sisyphus i586 classic<br />
rpm file:/altair/ALT/Sisyphus noarch classic<br />
</source><br />
<br />
=== Файл compile для песочницы ===<br />
<br />
Файл 'compile' является скриптом-обёрткой для запуска описанных в статье команд сборки (в т.ч. с указанием архитектуры и т.д.). В каталоге с GIT репозиторием можно создать символическую ссылку на такой файл. Можно создать разноимённые ссылки на файлы-обёртки в разных песочницах и запускать их по мере надобности, не покидая каталог репозитория, без необходимости работы с полными именами файла, из-за местоположения скрипта в другом каталоге.<br />
<br />
<source lang=bash><br />
#!/bin/bash<br />
#<br />
# Alex Vesev @ ALT Linux, 2012-10-05<br />
#<br />
##<br />
<br />
declare -r maintainerName="Not Shure"<br />
declare -r maintainerMail="not.shure@localhost"<br />
<br />
declare -r dirSandBoxTop="${HOME}/hsh-sandboxes/p6-hello-i586"<br />
declare -r dirSandBoxHasher="${dirSandBoxTop}/hasher"<br />
declare -r optDirRepoHasher="--repo=\"${dirSandBoxTop}/repo/...\"" # XXX - применение не реализовано.<br />
<br />
declare -r archTarget="i586"<br />
<br />
declare -r argNoCheck="--no-sisyphus-check"<br />
<br />
function showDoc {<br />
cat "${0}"<br />
}<br />
<br />
[ "${#}" == 0 ] \<br />
&& showDoc \<br />
&& exit 1<br />
<br />
cliArgument="${1}"<br />
cliOptionName="${cliArgument%%=*}"<br />
cliOptionName="${cliOptionName#--}"<br />
cliOptionValue="${cliArgument#*=}"<br />
<br />
case "${cliOptionName}" in<br />
shell|sh)<br />
hsh-shell --mountpoints="/proc" "${dirSandBoxHasher}"<br />
;;<br />
build|bu)<br />
gear \<br />
--verbose \<br />
--commit \<br />
--hasher \<br />
-- ${archTarget} \<br />
hsh \<br />
--verbose \<br />
--nprocs=2 \<br />
--packager="${maintainerName} <${maintainerMail}>" \<br />
${argNoCheck} \<br />
--target=${archTarget} \<br />
--lazy-cleanup \<br />
--mountpoints="/proc,/dev/pts,/sys" \<br />
--apt-config="${dirSandBoxTop}/apt.conf" \<br />
"${dirSandBoxHasher}"<br />
;;<br />
rebuild|reb|rebu)<br />
gear \<br />
--verbose \<br />
--commit \<br />
--hasher \<br />
-- ${archTarget} \<br />
hsh-rebuild \<br />
--verbose \<br />
${argNoCheck} \<br />
--target=${archTarget} \<br />
--mountpoints="/proc,/dev/pts,/sys" \<br />
"${dirSandBoxHasher}"<br />
;;<br />
install|ins)<br />
shift 1<br />
hsh-install "${dirSandBoxHasher}" "${@}"<br />
;;<br />
clean-all)<br />
hsh --cleanup-only "${dirSandBoxHasher}"<br />
;;<br />
esac<br />
</source><br />
== Ссылки ==<br />
<br />
* [[Краткое руководство по сборке пакета]]<br />
* Лекция Георгия Курячего "Демонстрация сборки пакета" (видео, ogv): [http://esyr.name/video/uneex/uneex_09_12_16.ogv ]<br />
{{Category navigation|title=Сборка пакетов|category=Сборка пакетов|sortkey={{SUBPAGENAME}}}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=%D0%90%D0%BB%D1%8C%D1%82_%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B0%D1%8F_%D0%A1%D1%82%D0%B0%D0%BD%D1%86%D0%B8%D1%8F_%D0%9A_10&diff=62288
Альт Рабочая Станция К 10
2022-08-26T13:47:51Z
<p>217.15.195.17: /* Сроки поддержки */</p>
<hr />
<div>{{stub}}<br />
<br />
== Альт Рабочая станция К ==<br />
<br />
'''Альт Рабочая станция К''' — дистрибутив, разработанный [https://www.basealt.ru ООО «Базальт СПО»] на [[Десятая платформа|Деcятой платформе]].<br />
<br />
== Возможности ==<br />
<br />
Альт Рабочая станция К представляет собой решение для организации<br />
рабочих мест конечных пользователей и подходит для применения как<br />
в офисной среде, так и дома.<br />
Дистрибутив может использоваться в инфраструктуре Active Directory (аутентификация в домене, доступ к файловым ресурсам и ресурсам печати) и гетерогенной сети под управлением [[Альт_Сервер_10|Альт Сервер]].<br />
Систему можно использовать для решения широкого круга задач:<br />
* работы в сети интернет: в браузере, с электронной почтой, для обмена мгновенными сообщениями;<br />
* создания и редактирования текстов, электронных таблиц, презентаций;<br />
* работы с видео и звуковыми файлами, сложной графикой и анимацией;<br />
* использования аппаратного ускорения 3D и OpenCL с фирменными драйверами видеокарт NVIDIA;<br />
<br />
=== Основные новшества в 10.0 ===<br />
<br />
Обновлено:<br />
* Ядро: 5.15<br />
* KDE: Plasma 5.23, Gear 21.12, Frameworks 5.92<br />
Добавлено:<br />
* Отечественные корневые сертификаты шифрования.<br />
* Локальная двухфакторная аутентификация по аппаратным токенам(Рутокен, JaCarta, ESMART).<br />
* Переход на ядро 5.15 для поддержки современного оборудования.<br />
* Безопасное обновление системы:<br />
** При появлении обновлений предлагается перезагрузка, при которой происходит обновление системы.<br />
** Вместо apt-indicator используется plasma5-discover-packagekit.<br />
* Для Flatpak по умолчанию подключен репозиторий flathub.<br />
* В Discover поддержка SNAP-приложений (https://snapcraft.io).<br />
* Графический редактор GIMP заменён на Krita.<br />
* Видеопроигрыватель SMplayer заменён на Haruna.<br />
* Улучшена поддержка планшетных компьютеров.<br />
* Возможность делать снимки экрана при установке.<br />
* Меню сетевой установки при загрузке с установочного носителя в EFI<br />
* Поддержка процессоров Intel Alder Lake (поколение 12).<br />
* "Бесшовная" загрузка системы (не видны системные сообщения).<br />
* kernel-modules-bcmwl исключён из дистрибутива, т.к. устарел (bug#41620).<br />
* Различные полезные утилиты: glxinfo, vulkan-tools, clinfo и другие.<br />
* Больше драйверов принтеров(OKI, Brother и др.).<br />
* Больше драйверов сканеров (Epson и др.).<br />
Исправлено:<br />
* Зависание графической подсистемы X11 при изменении имени узла.<br />
Примечания:<br />
* Установочный образ больше не умещается на DVD-5.<br />
* Безопасное обновление пока не работает с репозиториями на сетевых файловых системах.<br />
* В VirtualBox, если не запускается установщик, живая или установленная система, необходимо в настройках VB вместо VMSVGA установить графический контроллер VBoxSVGA без 3D.<br />
<br />
== Сроки поддержки ==<br />
<div style="border-left:3px solid #2590B7;border-right:3px solid #2590B7;padding:7px;margin-top: 7px;margin-bottom: 7px;background-color:#E0EEF3;">В части обновлений по безопасности (если иное не предусмотрено условиями поставки):<br />
* '''31 декабря 2024 года''' для дистрибутива Альт Рабочая станция К 10, но не ранее полугода с момента выпуска новой версии (11).</div><br />
<br />
=== Версии программного обеспечения на день релиза ===<br />
<br />
==== 10.0 ====<br />
* Графическая среда KDE: Plasma 5.23, Gear 21.12, Frameworks 5.92.<br />
* Ядро Linux 5.15.<br />
<!--<br />
* Драйверы NVIDIA ...<br />
* Mesa ...<br />
* xorg-server ...<br />
* LibreOffice ...<br />
* Среда запуска win32-приложений WINE ...<br />
--><br />
* Qt 5.15.<br />
<br />
== Дата выпуска ==<br />
<!--<br />
* __ месяца 20__ года — выпуск __<br />
* __ месяца 20__ года — выпуск __<br />
* __ месяца 20__ года — выпуск __<br />
--><br />
<br />
== Скачать образы ==<br />
<br />
Все дистрибутивы доступны для загрузки и использования без ограничений для физических лиц. Для юридических лиц необходимо приобретение лицензии. [https://www.basealt.ru/products/alt-workstation/license/ Лицензионный договор на операционную систему Альт Рабочая станция].<br />
<br />
Все образы являются гибридными, то есть пригодны для записи как на DVD-диски, так и на USB-флеш-диски. <br />
Запись на USB-флеш диски осуществляется утилитой dd (на весь диск целиком, а не на раздел, то есть, например, не на /dev/sdc1, а на '''/dev/sdc''') в соответствии с [[Write|инструкцией по записи образов.]]<br />
<br />
{{Attention|UNetbootin и UltraISO вместо простой записи гибридного образа ALT Linux на флеш-накопитель портят загрузку, поэтому использование этих программ для записи образов '''не рекомендуется'''.}}<br />
'''Системные требования'''<br />
{|class="standard"<br />
|-<br />
!Дистрибутив<br />
!Минимальный размер ОЗУ<br />
!Рекомендуемый размер ОЗУ<br />
!Место на жёстком диске<br />
|-<br />
|Альт Рабочая станция К 10||1 ГБ||от 4 ГБ||от 32 ГБ<br />
|}<br />
* [https://ru.wikipedia.org/wiki/X86-64 x86_64] — 64-разрядный процессор Intel или AMD;<br />
* Видеокарта с 3D-ускорением: NVIDIA GeForce >= 8100(поддержка NVIDIA Optimus), Intel (кроме i8xx, Poulsbo), AMD/ATI. Рекомендуется NVIDIA >= GeForce GTX 750.<br />
<br />
{{ISO<br />
|iso=https://mirror.yandex.ru/altlinux/p10/images/kworkstation/alt-kworkstation-10-install-x86_64.iso<br />
|name=Альт Рабочая станция К 10.0 (x86_64 установка)<br />
|size=5.8<br />
|md5sum=https://mirror.yandex.ru/altlinux/p10/images/kworkstation/MD5SUM<br />
}}<br />
{{ISO<br />
|iso=https://mirror.yandex.ru/altlinux/p10/images/kworkstation/alt-kworkstation-10-live-x86_64.iso<br />
|name=Альт Рабочая станция К 10.0 (x86_64 живая система)<br />
|size=4<br />
|md5sum=https://mirror.yandex.ru/altlinux/p10/images/kworkstation/MD5SUM<br />
}}<br />
<br />
== Известные ошибки ==<br />
<br />
<br />
== Снимки экрана ==<br />
<br />
<!--<br />
<gallery perrow="4"><br />
Image:Name.png|Название<br />
Image:Name.png|Название<br />
Image:Name.png|Название<br />
</gallery><br />
--><br />
<br />
== См. также ==<br />
<br />
<br />
<br />
[[Категория:Дистрибутивы]]<br />
[[Категория:Десятая платформа]]<br />
[[Категория:Releases/100]]</div>
217.15.195.17
https://www.altlinux.org/index.php?title=%D0%90%D0%BB%D1%8C%D1%82_%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B0%D1%8F_%D0%A1%D1%82%D0%B0%D0%BD%D1%86%D0%B8%D1%8F_%D0%9A_10&diff=61967
Альт Рабочая Станция К 10
2022-07-27T11:22:54Z
<p>217.15.195.17: /* Сроки поддержки */</p>
<hr />
<div>{{stub}}<br />
<br />
== Альт Рабочая станция К ==<br />
<br />
'''Альт Рабочая станция К''' — дистрибутив, разработанный [https://www.basealt.ru ООО «Базальт СПО»] на [[Десятая платформа|Деcятой платформе]].<br />
<br />
== Возможности ==<br />
<br />
Альт Рабочая станция К представляет собой решение для организации<br />
рабочих мест конечных пользователей и подходит для применения как<br />
в офисной среде, так и дома.<br />
Дистрибутив может использоваться в инфраструктуре Active Directory (аутентификация в домене, доступ к файловым ресурсам и ресурсам печати) и гетерогенной сети под управлением [[Альт_Сервер_10|Альт Сервер]].<br />
Систему можно использовать для решения широкого круга задач:<br />
* работы в сети интернет: в браузере, с электронной почтой, для обмена мгновенными сообщениями;<br />
* создания и редактирования текстов, электронных таблиц, презентаций;<br />
* работы с видео и звуковыми файлами, сложной графикой и анимацией;<br />
* использования аппаратного ускорения 3D и OpenCL с фирменными драйверами видеокарт NVIDIA;<br />
<br />
=== Основные новшества в 10.0 ===<br />
<br />
Обновлено:<br />
* Ядро: 5.15<br />
* KDE: Plasma 5.23, Gear 21.12, Frameworks 5.92<br />
Добавлено:<br />
* Отечественные корневые сертификаты шифрования.<br />
* Локальная двухфакторная аутентификация по аппаратным токенам(Рутокен, JaCarta, ESMART).<br />
* Переход на ядро 5.15 для поддержки современного оборудования.<br />
* Безопасное обновление системы:<br />
** При появлении обновлений предлагается перезагрузка, при которой происходит обновление системы.<br />
** Вместо apt-indicator используется plasma5-discover-packagekit.<br />
* Для Flatpak по умолчанию подключен репозиторий flathub.<br />
* В Discover поддержка SNAP-приложений (https://snapcraft.io).<br />
* Графический редактор GIMP заменён на Krita.<br />
* Видеопроигрыватель SMplayer заменён на Haruna.<br />
* Улучшена поддержка планшетных компьютеров.<br />
* Возможность делать снимки экрана при установке.<br />
* Меню сетевой установки при загрузке с установочного носителя в EFI<br />
* Поддержка процессоров Intel Alder Lake (поколение 12).<br />
* "Бесшовная" загрузка системы (не видны системные сообщения).<br />
* kernel-modules-bcmwl исключён из дистрибутива, т.к. устарел (bug#41620).<br />
* Различные полезные утилиты: glxinfo, vulkan-tools, clinfo и другие.<br />
* Больше драйверов принтеров(OKI, Brother и др.).<br />
* Больше драйверов сканеров (Epson и др.).<br />
Исправлено:<br />
* Зависание графической подсистемы X11 при изменении имени узла.<br />
Примечания:<br />
* Установочный образ больше не умещается на DVD-5.<br />
* Безопасное обновление пока не работает с репозиториями на сетевых файловых системах.<br />
* В VirtualBox, если не запускается установщик, живая или установленная система, необходимо в настройках VB вместо VMSVGA установить графический контроллер VBoxSVGA без 3D.<br />
<br />
== Сроки поддержки ==<br />
<div style="border-left:3px solid #2590B7;border-right:3px solid #2590B7;padding:7px;margin-top: 7px;margin-bottom: 7px;background-color:#E0EEF3;">В части обновлений по безопасности (если иное не предусмотрено условиями поставки):<br />
* '''31 декабря 2024 года''' для дистрибутива Альт Рабочая станция К 10.0, но не ранее полугода с момента выпуска новой версии (11.0).</div><br />
<br />
=== Версии программного обеспечения на день релиза ===<br />
<br />
==== 10.0 ====<br />
* Графическая среда KDE: Plasma 5.23, Gear 21.12, Frameworks 5.92.<br />
* Ядро Linux 5.15.<br />
<!--<br />
* Драйверы NVIDIA ...<br />
* Mesa ...<br />
* xorg-server ...<br />
* LibreOffice ...<br />
* Среда запуска win32-приложений WINE ...<br />
--><br />
* Qt 5.15.<br />
<br />
== Дата выпуска ==<br />
<!--<br />
* __ месяца 20__ года — выпуск __<br />
* __ месяца 20__ года — выпуск __<br />
* __ месяца 20__ года — выпуск __<br />
--><br />
<br />
== Скачать образы ==<br />
<br />
Все дистрибутивы доступны для загрузки и использования без ограничений для физических лиц. Для юридических лиц необходимо приобретение лицензии. [https://www.basealt.ru/products/alt-workstation/license/ Лицензионный договор на операционную систему Альт Рабочая станция].<br />
<br />
Все образы являются гибридными, то есть пригодны для записи как на DVD-диски, так и на USB-флеш-диски. <br />
Запись на USB-флеш диски осуществляется утилитой dd (на весь диск целиком, а не на раздел, то есть, например, не на /dev/sdc1, а на '''/dev/sdc''') в соответствии с [[Write|инструкцией по записи образов.]]<br />
<br />
{{Attention|UNetbootin и UltraISO вместо простой записи гибридного образа ALT Linux на флеш-накопитель портят загрузку, поэтому использование этих программ для записи образов '''не рекомендуется'''.}}<br />
'''Системные требования'''<br />
{|class="standard"<br />
|-<br />
!Дистрибутив<br />
!Минимальный размер ОЗУ<br />
!Рекомендуемый размер ОЗУ<br />
!Место на жёстком диске<br />
|-<br />
|Альт Рабочая станция К 10||1 ГБ||от 4 ГБ||от 32 ГБ<br />
|}<br />
* [https://ru.wikipedia.org/wiki/X86-64 x86_64] — 64-разрядный процессор Intel или AMD;<br />
* Видеокарта с 3D-ускорением: NVIDIA GeForce >= 8100(поддержка NVIDIA Optimus), Intel (кроме i8xx, Poulsbo), AMD/ATI. Рекомендуется NVIDIA >= GeForce GTX 750.<br />
<br />
{{ISO<br />
|iso=https://mirror.yandex.ru/altlinux/p10/images/kworkstation/alt-kworkstation-10-install-x86_64.iso<br />
|name=Альт Рабочая станция К 10.0 (x86_64 установка)<br />
|size=5.8<br />
|md5sum=https://mirror.yandex.ru/altlinux/p10/images/kworkstation/MD5SUM<br />
}}<br />
{{ISO<br />
|iso=https://mirror.yandex.ru/altlinux/p10/images/kworkstation/alt-kworkstation-10-live-x86_64.iso<br />
|name=Альт Рабочая станция К 10.0 (x86_64 живая система)<br />
|size=4<br />
|md5sum=https://mirror.yandex.ru/altlinux/p10/images/kworkstation/MD5SUM<br />
}}<br />
<br />
== Известные ошибки ==<br />
<br />
<br />
== Снимки экрана ==<br />
<br />
<!--<br />
<gallery perrow="4"><br />
Image:Name.png|Название<br />
Image:Name.png|Название<br />
Image:Name.png|Название<br />
</gallery><br />
--><br />
<br />
== См. также ==<br />
<br />
<br />
<br />
[[Категория:Дистрибутивы]]<br />
[[Категория:Десятая платформа]]<br />
[[Категория:Releases/100]]</div>
217.15.195.17
https://www.altlinux.org/index.php?title=%D0%90%D0%BB%D1%8C%D1%82_%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B0%D1%8F_%D0%A1%D1%82%D0%B0%D0%BD%D1%86%D0%B8%D1%8F_%D0%9A_10&diff=61753
Альт Рабочая Станция К 10
2022-07-15T07:41:31Z
<p>217.15.195.17: /* Основные новшества в 10.0 */</p>
<hr />
<div>{{stub}}<br />
<br />
== Альт Рабочая станция К ==<br />
<br />
'''Альт Рабочая станция К''' — дистрибутив, разработанный [https://www.basealt.ru ООО «Базальт СПО»] на [[Десятая платформа|Деcятой платформе]].<br />
<br />
== Возможности ==<br />
<br />
Альт Рабочая станция К представляет собой решение для организации<br />
рабочих мест конечных пользователей и подходит для применения как<br />
в офисной среде, так и дома.<br />
Дистрибутив может использоваться в инфраструктуре Active Directory (аутентификация в домене, доступ к файловым ресурсам и ресурсам печати) и гетерогенной сети под управлением [[Альт_Сервер_10|Альт Сервер]].<br />
Систему можно использовать для решения широкого круга задач:<br />
* работы в сети интернет: в браузере, с электронной почтой, для обмена мгновенными сообщениями;<br />
* создания и редактирования текстов, электронных таблиц, презентаций;<br />
* работы с видео и звуковыми файлами, сложной графикой и анимацией;<br />
* использования аппаратного ускорения 3D и OpenCL с фирменными драйверами видеокарт NVIDIA;<br />
<br />
=== Основные новшества в 10.0 ===<br />
<br />
Обновлено:<br />
* Ядро: 5.15<br />
* KDE: Plasma 5.23, Gear 21.12, Frameworks 5.92<br />
Добавлено:<br />
* Отечественные корневые сертификаты шифрования.<br />
* Локальная двухфакторная аутентификация по аппаратным токенам(Рутокен, JaCarta, ESMART).<br />
* Переход на ядро 5.15 для поддержки современного оборудования.<br />
* Безопасное обновление системы:<br />
** При появлении обновлений предлагается перезагрузка, при которой происходит обновление системы.<br />
** Вместо apt-indicator используется plasma5-discover-packagekit.<br />
* Для Flatpak по умолчанию подключен репозиторий flathub.<br />
* В Discover поддержка SNAP-приложений (https://snapcraft.io).<br />
* Графический редактор GIMP заменён на Krita.<br />
* Видеопроигрыватель SMplayer заменён на Haruna.<br />
* Улучшена поддержка планшетных компьютеров.<br />
* Возможность делать снимки экрана при установке.<br />
* Меню сетевой установки при загрузке с установочного носителя в EFI<br />
* Поддержка процессоров Intel Alder Lake (поколение 12).<br />
* "Бесшовная" загрузка системы (не видны системные сообщения).<br />
* kernel-modules-bcmwl исключён из дистрибутива, т.к. устарел (bug#41620).<br />
* Различные полезные утилиты: glxinfo, vulkan-tools, clinfo и другие.<br />
* Больше драйверов принтеров(OKI, Brother и др.).<br />
* Больше драйверов сканеров (Epson и др.).<br />
Исправлено:<br />
* Зависание графической подсистемы X11 при изменении имени узла.<br />
Примечания:<br />
* Установочный образ больше не умещается на DVD-5.<br />
* Безопасное обновление пока не работает с репозиториями на сетевых файловых системах.<br />
* В VirtualBox, если не запускается установщик, живая или установленная система, необходимо в настройках VB вместо VMSVGA установить графический контроллер VBoxSVGA без 3D.<br />
<br />
== Сроки поддержки ==<br />
<div style="border-left:3px solid #2590B7;border-right:3px solid #2590B7;padding:7px;margin-top: 7px;margin-bottom: 7px;background-color:#E0EEF3;">В части обновлений по безопасности (если иное не предусмотрено условиями поставки):<br />
* '''__ месяца 202_ года''' для дистрибутива Альт Рабочая станция К 10.0, но не ранее полугода с момента выпуска новой версии (11.0).</div><br />
<br />
=== Версии программного обеспечения на день релиза ===<br />
<br />
==== 10.0 ====<br />
* Графическая среда KDE: Plasma 5.23, Gear 21.12, Frameworks 5.92.<br />
* Ядро Linux 5.15.<br />
<!--<br />
* Драйверы NVIDIA ...<br />
* Mesa ...<br />
* xorg-server ...<br />
* LibreOffice ...<br />
* Среда запуска win32-приложений WINE ...<br />
--><br />
* Qt 5.15.<br />
<br />
== Дата выпуска ==<br />
<!--<br />
* __ месяца 20__ года — выпуск __<br />
* __ месяца 20__ года — выпуск __<br />
* __ месяца 20__ года — выпуск __<br />
--><br />
<br />
== Скачать образы ==<br />
<br />
Все дистрибутивы доступны для загрузки и использования без ограничений для физических лиц. Для юридических лиц необходимо приобретение лицензии. [https://www.basealt.ru/products/alt-workstation/license/ Лицензионный договор на операционную систему Альт Рабочая станция].<br />
<br />
Все образы являются гибридными, то есть пригодны для записи как на DVD-диски, так и на USB-флеш-диски. <br />
Запись на USB-флеш диски осуществляется утилитой dd (на весь диск целиком, а не на раздел, то есть, например, не на /dev/sdc1, а на '''/dev/sdc''') в соответствии с [[Write|инструкцией по записи образов.]]<br />
<br />
{{Attention|UNetbootin и UltraISO вместо простой записи гибридного образа ALT Linux на флеш-накопитель портят загрузку, поэтому использование этих программ для записи образов '''не рекомендуется'''.}}<br />
'''Системные требования'''<br />
{|class="standard"<br />
|-<br />
!Дистрибутив<br />
!Минимальный размер ОЗУ<br />
!Рекомендуемый размер ОЗУ<br />
!Место на жёстком диске<br />
|-<br />
|Альт Рабочая станция К 10||1 ГБ||от 4 ГБ||от 32 ГБ<br />
|}<br />
* [https://ru.wikipedia.org/wiki/X86-64 x86_64] — 64-разрядный процессор Intel или AMD;<br />
* Видеокарта с 3D-ускорением: NVIDIA GeForce >= 8100(поддержка NVIDIA Optimus), Intel (кроме i8xx, Poulsbo), AMD/ATI. Рекомендуется NVIDIA >= GeForce GTX 750.<br />
<br />
{{ISO<br />
|iso=https://mirror.yandex.ru/altlinux/p10/images/kworkstation/alt-kworkstation-10-install-x86_64.iso<br />
|name=Альт Рабочая станция К 10.0 (x86_64 установка)<br />
|size=5.8<br />
|md5sum=https://mirror.yandex.ru/altlinux/p10/images/kworkstation/MD5SUM<br />
}}<br />
{{ISO<br />
|iso=https://mirror.yandex.ru/altlinux/p10/images/kworkstation/alt-kworkstation-10-live-x86_64.iso<br />
|name=Альт Рабочая станция К 10.0 (x86_64 живая система)<br />
|size=4<br />
|md5sum=https://mirror.yandex.ru/altlinux/p10/images/kworkstation/MD5SUM<br />
}}<br />
<br />
== Известные ошибки ==<br />
<br />
<br />
== Снимки экрана ==<br />
<br />
<!--<br />
<gallery perrow="4"><br />
Image:Name.png|Название<br />
Image:Name.png|Название<br />
Image:Name.png|Название<br />
</gallery><br />
--><br />
<br />
== См. также ==<br />
<br />
<br />
<br />
[[Категория:Дистрибутивы]]<br />
[[Категория:Десятая платформа]]<br />
[[Категория:Releases/100]]</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Upstream&diff=61632
Upstream
2022-07-06T13:13:43Z
<p>217.15.195.17: /* ныне */</p>
<hr />
<div>= Проекты, в разработке которых ALT Linux Team принимает участие =<br />
<br />
== совместно с Openwall ==<br />
* [http://docs.altlinux.org/manpages/tcb.5.html tcb]<br />
* [[control]]<br />
* [http://www.openwall.com/passwdqc/ passwdqc]<br />
* [[pam_mktemp]]<br />
<br />
== ныне ==<br />
По состоянию на 2021 год:<br />
* [https://sourceware.org/git/?p=glibc.git&a=search&h=HEAD&st=author&s=altlinux glibc] ([http://ftp.altlinux.org/pub/people/ldv/projects.html ldv@], glebfm@)<br />
* [https://cgit.freedesktop.org/NetworkManager/NetworkManager/log/?qt=author&q=altlinux NetworkManager] (sem@; с 2008)<br />
* [https://git.samba.org/?p=samba.git&a=search&st=author&s=altlinux samba] (ab@, php-coder@, sin@)<br />
* [https://github.com/strace/strace/graphs/contributors strace] (ldv@, lineprinter@)<br />
* [https://git.kernel.org/cgit/linux/kernel/git/legion/kbd.git/log/?qt=author&q=altlinux kbd] (legion@)<br />
* [https://github.com/linux-pam/linux-pam/graphs/contributors linux-pam] (ldv@)<br />
* [https://github.com/rpm-software-management/rpm/graphs/contributors rpm] (glebfm@, legion@, kas@, at@)<br />
* [http://git.etersoft.ru/projects/?p=haspd.git haspd] (lav@, akv@)<br />
* [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?qt=author&q=altlinux linux] (vt@, ldv@, glebfm@, lineprinter@, nickel@, gkot@, vseleznv@, sem@, vitty@, boyarsh@, sbolshakov@, vsu@, [https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c9e2fbd909c20b165b2b9ffb59f8b674cf0a55b0 led@])<br />
* [http://bugzilla.altlinux.org/37739 sane] (nickel@)<br />
* [http://hg.mozilla.org/mozilla-unified/log?rev=altlinux mozilla] (legion@, cas@, mike@) <!-- тж. http://hg.mozilla.org/comm-central/rev/5c130de114a632f12bd2da7d029ce1548007ee89 --><br />
* [https://invent.kde.org/explore/projects/ KDE Plasma, Gear, Frameworks] (mcpain@, ptrnine@)<br />
<br />
=== свои ===<br />
* [[etcnet]] (pilot@, sbolshakov@, ...)<br />
* [[gear]] (ldv@, ...)<br />
* [[girar]] (ldv@, ...)<br />
* [[girar_builder]] (at@, ldv@, glebfm@)<br />
* [[hasher]] (ldv@, ...)<br />
* [[mkimage]] (legion@, ...)<br />
* [[repocop]] (viy@)<br />
* [[libshell]] (legion@)<br />
* [[alterator]] (inger@, ...)<br />
* [[installer]] (inger@, ...)<br />
* [[make-initrd]] (legion@, ...)<br />
* [https://sourceforge.net/projects/o-security/ osec] (inger@, legion@)<br />
* [http://git.altlinux.org/gears/a/apt-indicator.git apt-indicator] (inger@, zerg@)<br />
* [http://git.altlinux.org/gears/k/korinf.git korinf] (lav@, dkr@, baraka@)<br />
* [http://git.altlinux.org/gears/e/eepm.git eepm] (lav@, danil@)<br />
* [http://git.altlinux.org/gears/q/qa-robot.git qa-robot] (at@, ldv@, glebfm@, viy@)<br />
* [http://git.altlinux.org/gears/s/sisyphus_check.git sisyphus_check] (ldv@, at@, legion@, vitty@, imz@)<br />
* [http://git.altlinux.org/gears/g/guile-evms.git guile-evms] (sbolshakov@, imz@, mike@, shrek@)<br />
* [http://git.altlinux.org/people/slazav/packages/imgdiff.git imgdiff] (slazav@)<br />
* [http://git.altlinux.org/people/viy/packages/gear-cronbuild.git gear-cronbuild], [http://git.altlinux.org/people/viy/packages/gear-uupdate.git gear-uupdate], [http://git.altlinux.org/srpms/g/girar-nmu.git girar-nmu] (viy@)<br />
* [http://search.cpan.org/dist/HTML-Template-Pro/lib/HTML/Template/Pro.pm htmltmplpro] (viy@)<br />
* [http://git.altlinux.org/gears/g/gpupdate.git gpupdate] (nir@)<br />
<br />
== ранее ==<br />
* RSBAC (inger@)<br />
* [http://alternatives.sourceforge.net/ alternatives] (inger@)<br />
* wdm (voins@)<br />
* WindowMaker (voins@, raorn@)<br />
* [http://git.savannah.gnu.org/gitweb/?p=coreutils.git&a=search&h=HEAD&st=author&s=altlinux coreutils] (ldv@, raorn@)<br />
* [http://rpm5.org/cvs/search?s=altlinux&c=1&f=1 rpm5] (ldv@, at@)<br />
* [http://apt-rpm.org/scm/?p=apt.git&a=search&h=HEAD&st=author&s=altlinux apt-rpm] (at@, avm@, php-coder@)<br />
* [https://code.launchpad.net/~freenx-team/freenx-server/teambzr freenx-server] (boris@)<br />
* [http://maxima.sourceforge.net/ Maxima] (vvzhy@)<br />
* [http://git.savannah.gnu.org/cgit/gcl.git/log/?qt=author&q=vvzhy GCL] (vvzhy@)<br />
* [https://sourceforge.net/projects/kguitar/ kguitar] (greycat@)<br />
* altlinuxhyph (nidd@) ''применяется в LibreOffice до сих пор''<br />
<br />
=== свои ===<br />
* [http://homeros.altlinux.org/ homeros] и [http://luwrain.org/ luwrain] (msp@)<br />
* [http://repo.or.cz/katrin.git katrin] и [http://repo.or.cz/katrin-web.git katrin-web] (zver@, php-coder@, azol@, vvk@)<br />
* [http://git.altlinux.org/gears/v/vargus-viewer.git vargus] (prividen@)<ref>см. тж. [http://git.etersoft.ru/projects/other/vargus-viewer.git vargus-viewer]</ref><br />
* [http://git.altlinux.org/gears/l/ldap-user-tools.git ldap-user-tools] (inger@, barabashka@, boyarsh@, cas@)<br />
* [https://github.com/piastry/libnss-role/graphs/contributors libnss_role] (piastry@, sin@)<br />
* [http://git.altlinux.org/gears/l/libutempter.git libutempter] (ldv@)<br />
* [http://git.altlinux.org/gears/c/cpufreq-simple.git cpufreq-simple] (sem@, mike@)<br />
* [http://git.altlinux.org/gears/c/chrooted.git chrooted] (ldv@)<br />
* [http://git.altlinux.org/gears/s/slocate.git slocate] (ldv@, at@)<br />
* [http://git.altlinux.org/gears/s/setproctitle.git setproctitle] (ldv@)<br />
* [http://ndk-xx.sourceforge.net/ ncurses-xx, ndk-xx] (inger@)<br />
* [http://cdbxx.sourceforge.net/ cdbxx] (inger@)<br />
* [http://gtkballs.antex.ru/ gtkballs], [http://metromap.antex.ru/ metromap] (dfo@)<br />
* [http://oscada.org/ru/ openscada] (rom_as@)<br />
* [http://git.altlinux.org/gears/y/yabeda.git yabeda] (thresh@)<br />
* [[biarch|arepo]] [http://git.altlinux.org/gears/a/arepo.git v1] (vitty@)<br />
* [http://git.altlinux.org/gears/r/rpmrebuild-arepo.git v2] (led@, vitty@, ldv@, glebfm@)<br />
* [http://git.altlinux.org/people/ldv/packages/beehive.git beehive] (ldv@, at@)<br />
* [http://git.altlinux.org/gears/s/srpmcmp.git srpmcmp] (at@, ldv@)<br />
* [http://git.altlinux.org/gears/s/stmpclean.git stmpclean] (ldv@)<br />
* [http://git.altlinux.org/gears/w/wm-select.git wm-select] (ldv@)<br />
<br />
= Поддержка e2k =<br />
{{main|Эльбрус/upstream}}<br />
= Переводы =<br />
Среди команды много кто в разные годы принимал или принимает участие в апстримных переводах -- включая aen@, avp@, cas@, fattie@, mike@; с 2018 года к этой деятельности [http://0x1.tv/20180928B подключился] отдел переводчиков в Обнинске.<br />
<br />
= Ссылки =<br />
* [https://www.openhub.net/p/altlinux/enlistments Open Hub]<br />
* [http://web.archive.org/web/20050309033502/http://www.altlinux.ru/index.php?module=intproj www.altlinux.ru/index.php?module=intproj] образца 2005 года<br />
* [[features]]<br />
<references /><br />
<br />
[[Категория:Devel]]<br />
[[Категория:Историческое]]</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Mkimage-profiles&diff=61391
Mkimage-profiles
2022-06-16T11:49:30Z
<p>217.15.195.17: /* Примеры использования */</p>
<hr />
<div>[[File:M-p.png|274x174px|right]]<br />
{{DISPLAYTITLE:mkimage-profiles}}<br />
__TOC__<br />
= Суть =<br />
{{pkg|mkimage-profiles}}, или ''m-p'' — система управления конфигурацией [[starterkits|семейств]] [[releases|дистрибутивов]] свободного программного обеспечения из репозиториев ALT для различных платформ.<br />
<br />
Входит в [[Starterkits/builder|стартеркит builder]] в готовом к употреблению виде.<br />
{| style="border:1px solid #AAA; background:#F9F9F9; width:100px; margin: 0 0 1em 1em; padding:.2em; text-align:left; float: right;" class=noprint<br />
|-<br />
|[[Image:Information.svg|32x32px|center]]<br />
|-<br />
| '''[[Mkimage/Profiles/m-p/examples|1.&nbsp;git&nbsp;clone<br />2.&nbsp;make<br />3.&nbsp;...<sup>*</sup>]]'''<br />
|}<br />
= Цель =<br />
Создание дистрибутивных образов<ref>iso, img, tar...</ref> на нашей [[branches|пакетной]] [[sisyphus|базе]].<br />
<br />
Отличие от [[Mkimage/Profiles/Desktop|предыдущего поколения]]<ref>...а также от большинства известных аналогов</ref> — возможность простого и управляемого наследования конфигурации при её создании из существующих «строительных блоков».<br />
{{main|Mkimage/history|l1=история}}<br />
= Средства =<br />
Языки реализации — <tt>make</tt> и <tt>shell</tt>, как и в [[mkimage]]. Для внесения изменений может потребоваться заметный опыт администрирования и базовый — разработки.<br />
<br />
: ''Документация книжкой: '''[http://nightly.altlinux.org/docs/mkimage-profiles.html HTML]'''/'''[http://nightly.altlinux.org/docs/mkimage-profiles.pdf PDF]'''''<br />
<br />
= Свойства =<br />
* двухуровневость:<br />
** сам метапрофиль объёмный и сложный, но выгодней для долгосрочной разработки<br />
** сгенерированный дистрибутивный профиль легче прочитать и поправить одноразово<br />
* наследственность на уровне особенностей (features) и образов в целом<br />
* прозрачность и диагностируемость формирования конфигурации (distcfg.mk)<br />
* документированность<br />
{{main|mkimage-profiles/howto|l1=howto}}<br />
<br />
= '''[[Mkimage/Profiles/m-p/examples|Примеры использования]]''' =<br />
# '''выполняем начальные инструкции по [http://git.altlinux.org/people/mike/packages/?p=mkimage-profiles.git;a=blob;f=QUICKSTART;hb=HEAD документации], затем не забываем сделать [https://www.altlinux.org/Hasher/%D0%A0%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE#%D0%9C%D0%BE%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_/proc Монтирование/proc ]'''<br />
# '''{{cmd|git clone git://git.altlinux.org/gears/m/mkimage-profiles.git}}'''<br />
# '''{{cmd|cd mkimage-profiles}}'''<br />
# '''{{cmd|make help}}'''<br />
# '''{{cmd|make regular-rescue.iso}}'''<br />
{{main|Mkimage/Profiles/m-p/examples|l1=примеры}}<br />
<br />
= [[Mkimage/Profiles/m-p/design|Решения при дизайне]] =<br />
Конфигурация образа — тоже объект ''сборки''.<br />
{{main|Mkimage/Profiles/m-p/design|l1=дизайн}}<br />
= [[Mkimage/Profiles/m-p/style|Пожелания к коллегам]] =<br />
Давайте стараться [http://lib.ru/MEMUARY/ERSHOW_W/zapiski_ezdowogo_psa.txt делать ''красиво''].<br />
{{main|Mkimage/Profiles/m-p/style|l1=стиль}}<br />
= [[Mkimage/Profiles/m-p/objects|Объекты воздействия]] =<br />
Образ, субпрофиль, фича и список пакетов. Перед правкой профиля ознакомьтесь с ними.<br />
{{main|Mkimage/Profiles/m-p/objects|l1=объекты}}<br />
= [[Mkimage/Profiles/m-p/news|Состояние]] =<br />
[http://git.altlinux.org/people/antohami/packages/?p=mkimage-profiles.git Стабильная ветка]; см. тж.:<br />
* [https://www.openhub.net/p/mkimage-profiles анализ кода на openhub],<br />
* [http://0x1.tv/Категория:Михаил_Шигорин доклады]:<br />
** [http://lvee.org/ru/reports/LVEE_2012_11?id=268 LVEE 2012],<br />
** [http://lvee.org/ru/abstracts/63 LVEE 2013W],<br />
** [http://lvee.org/ru/abstracts/87 LVEE 2013],<br />
** [http://lvee.org/uploads/image_upload/file/364/shigorin-lvee2014-rescue.pdf LVEE 2014] (PDF про [[rescue]]),<br />
** [https://docviewer.yandex.ru/?url=ya-serp%3A%2F%2Fftp.altlinux.org%2Fpub%2Fpeople%2Fmike%2Fdoc%2Fconference%2Fprotva-shigorin-mkimage-profiles.pdf&name=protva-shigorin-mkimage-profiles.pdf&c=561cffa935c3 Обнинск].<br />
<br />
Осень 2020: разрабатывается ветка 1.4.x; [[Mkimage/Profiles/m-p/news|регулярно]] публикуется метапрофиль ([http://git.altlinux.org/people/mike/packages/?p=mkimage-profiles.git git], [http://packages.altlinux.org/mkimage-profiles rpm]), при помощи которого можно собрать сразу несколько '''дистрибутивов''', '''шаблонов виртуальных окружений''', '''образов виртуальной машины''' для i586/[[ports/x8664|x86_64]], [[ports/aarch64|aarch64]]/[[ports/arm|armh]], [[ports/mipsel|mipsel]], [[ports/e2k|e2k]], ppc64el, [[ports/riscv64|riscv64]]. Из всего этого налажены '''[[Regular|регулярные сборки]]''' и '''[[Starterkits|стартеркиты]]''', среди прочего.<br />
<br />
Работаем без спешки, как для себя. Метабаг — [https://bugzilla.altlinux.org/show_bug.cgi?id=26300 #26300].<br />
{{main|Mkimage/Profiles/m-p/news|l1=новости}}<br />
[[Категория:Mkimage]]<br />
{{Category navigation|title=mkimage-profiles|category=mkimage-profiles|sortkey=*}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Kernelnotes&diff=60580
Kernelnotes
2022-05-12T13:50:03Z
<p>217.15.195.17: /* Собрираем пакет kernel-source-2.6.23-1.0.0-alt1.noarch.rpm */</p>
<hr />
<div>{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/kernelnotes}}<br />
{{Crap}}<br />
'''Внимание!'''<br />
<br />
Использование своего ядра с дистрибутивами ALT Linux не поддерживается как техподдержкой ООО «Альт Линукс», так и силами сообщества. Созданные в багтрекере ошибки, относящиеся к самосборным ядрам, вероятнее всего, будут закрыты как NOTABUG.<br />
<br />
Эта страница не описывает, как собирать ядра с kernel.org, но как собирать ядра из репозиториев ALT Linux.<br />
<br />
См. тж. [[Kernel/build for dummies]].<br />
<br />
== Последняя информация о том, как правильно собирать ядро ==<br />
<br />
Последняя информация о том, как правильно собирать ядро, находится в пакете kernel-build-tools в файле README.ru.koi8; его посмотреть можно в [http://git.altlinux.org/gears/k/kernel-build-tools.git?p=kernel-build-tools.git git-репозитории пакета], например, тут (ссылка со временем устареет): [http://git.altlinux.org/gears/k/kernel-build-tools.git?p=kernel-build-tools.git;a=blob;f=README.ru.koi8;h=6d842c7c3536c33fc0e6b558db4e712441adbb61;hb=d578c9e9894e0c97c2f7a2ea76545fa2d3b27d92 README.ru.koi8]<br />
<br />
== Зачем может быть нужно собирать своё ядро? ==<br />
<br />
* Вы разработчик ядра.<br />
* Вам нужно ядро, собранное каким-то особым способом (например, со включенной экспериментальной опцией), и ядра в ALT Linux не собраны таким образом.<br />
* Вы пытаетесь отладить проблему в ядре ALT Linux и в багтракере, списке рассылки или техподдержке вам подсказали, что для этого нужно собрать ядро специальным способом<br />
* У вас есть устройство, не поддерживаемое ядрами ALT Linux (только изредка! Очень часто достаточно просто собрать свой модуль к ядру, см. ниже).<br />
<br />
== Почему обычно не нужно собирать своё ядро? ==<br />
<br />
* Это скучное занятие.<br />
* Если вам нужен специальный драйвер, то достаточно собрать модуль к уже имеющемуся ядру.<br />
* Распространённые мифы про сборку ядра '''ложны''':<br />
**; Сборка ядра — простое дело: Современный PC — достаточно сложное устройство, и правильный выбор опций компиляции — нетривиальное занятие.<br />
**; Дистрибутивные ядра оптимизированы под «средний» компьютер, пересборка увеличивает производительность: Не подтверждается тестами. Чаще наоборот: неправильно собранное ядро замедляет систему.<br />
**; Сборка ядра — обязательное дело любого линуксоида: Нет©<br />
**; Ненужные драйвера тормозят и занимают память: Ненужные драйвера лежат на диске в виде модулей и не загружаются в память.<br />
**; Ядро с драйверами, вкомпилированными внутрь, работает быстрее: Не подтверждается тестами. Загрузка модулей занимает несколько секунд при старте компьютера, дальнейшее использование идентично по скорости вкомпилированным драйверам. (а для тех применений, где отсутствие лишнего просмотра таблицы действительно существенно — всяко требуется специалист, не судящий по глупым сказкам)<br />
<br />
== Предупреждение ==<br />
<br />
Статья частично протухла. vsu@ советует читать доки в {{pkg|kernel-build-tools}}.<br />
<br />
== Собираем новое ядро ==<br />
<br />
Будем для примера собирать ядро версии 2.6.23. Вам понадобится хорошая быстрая машина, с быстрым процессором, и большим объемом ОЗУ<ref>Athlon 64 X2 Dual Core 3800+ и 1GB ОЗУ, по субьективной оценке, не очень быстро работают</ref>. Для ускорения сборки можно использовать ccache, установив для этого переменные:<br />
<br />
<source lang="bash"><br />
$ export LC_ALL=C<br />
$ export GCC_USE_CCACHE=1<br />
</source><br />
<br />
=== Подготовительный этап ===<br />
<br />
==== I ====<br />
<br />
У ALT Linux разработана своя среда (kernel-build-tools) для сборки ядер. Основным мантейнером этой среды является vsu; по состоянию на декабрь 2009 последние правки публиковал aspsk:<br />
<br />
<source lang="bash"><br />
$ git clone git://git.altlinux.org/people/vsu/packages/kernel-build-tools<br />
$ cd kernel-build-tools<br />
$ ls<br />
$ git remote add aspsk git://git.altlinux.org/people/aspsk/packages/kernel-build-tools<br />
$ git remote update<br />
$ git branch -r<br />
</source><br />
<br />
<!-- git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.23.y.git --><br />
<br />
Как видно, среда состоит из набора скриптов.<br />
<br />
<!-- '''Настоятельно рекомендуется ознакомится с расположенным в каталоге kernel-build-scripts файлом README.ru.koi8, в котором описана вся кухня по сборке ядра.'''<br />
<br />
Существует два вида скриптов, *-hsh собирают через [[hasher]], другие — без.<br />
Если вы будете собирать пакеты без помощи hasher, тогда вам необходимо будет по мере надобности скопировать пакеты kernel-source-* в папку source.<br />
<br />
Там эти пакеты распаковываются в tmp/root и используется для сборки, без установки в систему, и без создания chroot; прочие buildrequires нужно удовлетворить как обычно. --><br />
<br />
==== II ====<br />
<br />
Репозиторий c ядром должен находиться в директории <tt>kernel</tt>.<br />
<br />
Забираем ядро, например, у vsu или lakostis:<br />
<source lang="bash"><br />
$ git clone git://git.altlinux.org/people/vsu/packages/kernel-image-2.6.18 kernel<br />
</source><br />
или<br />
<source lang="bash"><br />
$ git clone git://git.altlinux.org/people/lakostis/packages/kernel-image-2.6.22 kernel<br />
</source><br />
<br />
Добавляем репозиторий, содержащий новую версию ядра (для git-remote может потребоваться поставить пакет perl-GIT):<br />
<br />
<source lang="bash"><br />
$ git remote add linux-2.6.23 git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.23.y.git<br />
</source><br />
<br />
В master ветку этого репозитория Линус помещает обновления для ядер серии 2.6.23 (например 2.6.23.1, 2.6.23.2…). В нашем репозитории будет создана ветка linux-2.6.23/master, которая будет отслеживать обновления для ванильного ядра 2.6.23.<br />
<br />
Загрузим с репозитория linux-2.6.23 исходный код ядра.<br />
<br />
<source lang="bash"><br />
$ git fetch linux-2.6.23<br />
</source><br />
<br />
Теперь в нашем репозитории ветка linux-2.6.23/master содержит ядро 2.6.23 с обновлениями.<br />
Убедимся:<br />
<br />
<source lang="bash"><br />
$ git-log --pretty=short -n 1 linux-2.6.23/master<br />
commit 4367388f04eea72e78347dc9b299698bf4275f92<br />
Author: Greg Kroah-Hartman <gregkh@suse.de><br />
<br />
Linux 2.6.23.1<br />
</source><br />
<br />
=== Собираем пакет kernel-source-2.6.23-1.0.0-alt1.noarch.rpm ===<br />
Как видно, данный пакет не зависит от архитектуры. Внутри пакета содержиться только файл с иходными кодами ванильного ядра: <tt>/usr/src/kernel/sources/kernel-source-2.6.23.tar.bz2</tt><br />
<br />
Заметьте, что данный пакет содержит исходный код ядра версии 2.6.23, а не 2.6.23.1.<br />
Собрать этот пакет не составит труда. Достаточно:<br />
<br />
<source lang="bash"><br />
$ git checkout -b kernel-source origin/kernel-source # создадим ветки на основе ветки того, кого мы скопировали<br />
$ git pull -s ours . tag v2.6.23 # иначе будет ругаться gear<br />
$ vim kernel-source.spec # увеличиваем версию<br />
$ add_changelog kernel-source.spec<br />
</source><br />
<br />
В ответ на ругань add_changelog что версия пакета не изменилась, можно добавить к alt1 точку: 'alt1.', потом удалить.<br />
Версия пакета не изменяется, а изменяется имя пакета.<br />
<br />
<source lang="bash"><br />
$ vim .gear/rules # обновить версию ядра в файле (тег)<br />
$ gear-update-tag -a -c<br />
$ git add .gear/rules kernel-source.spec<br />
$ git commit -m "kernel-source-2.6.23 1.0.0-alt1"<br />
</source><br />
<br />
Осталось собрать сам пакет с помощью gear в hasher:<br />
<br />
<source lang="bash"><br />
$ gear --hasher -- hsh<br />
или<br />
$ gear --hasher -- hsh --apt-config=$HOME/apt/apt.conf.sisyphus.x86_64.hasher $HOME/hasher<br />
</source><br />
<br />
Замечания вида:<br />
warning: Macro %kernel_srcdir not found<br />
warning: Macro %kernel_srcdir not found<br />
warning: Macro %kernel_src not found<br />
на результат не влияют, там [[BuildRequires|BuildRequires]](pre) не хватает.<br />
После сборки этот пакет будет находится в репозитории hasher-a.<br />
<br />
=== Собираем пакет kernel-image-std-smp-2.6.23-alt1.i586.rpm ===<br />
Собственно этот пакет содержит само ядро + стандартные модули поставляемые с ядром.<br />
<br />
Несколько слов о структуре репозитория.<br />
На мой взгляд следует различать ветки:<br />
* '''kernel-source''' — цель этой ветки создать пакет с исходниками ванильного ядра '''2.6.23''' (мы использовали эту ветку на предыдущем шаге).<br />
* начинающиеся с '''feat-*-* fix-*-* '''. Каждая такая ветка содержит ванильное ядро + какое-то одно исправление, дополнение, патч.<br />
Имя ветки сообщает, какое конкретное дополнение она несет.<br />
* '''fix-stable''' — содержит ванильное ядро с последними исправлениями '''2.6.23.1'''.<br />
* '''kernel-image-std-smp''' — содержит пропатчиное ядро. эту ветку мержутся ветки fix-stable, feat-*-*, fix-*-*, fix-stable<br />
Цель ветки kernel-image-std-smp создать мега патч-бомбу который накладывается на ванильное ядро 2.6.23, скомпилировать бинарное ядро, собрать пакет.<br />
<br />
Файл branches-to-merge используется скриптом merge-all-branches.<br />
Может возникнуть вопрос: «Зачем мержить ветки которые указаны в branches-to-merge, если они уже в замерженыы в ветку kernel-image-std-smp ?»<br />
Ответ: Периодически в этих ветках появляется что-то новое, вот скрипт и проверяет, что появилось. Ещё возможен вариант вида branch-*<br />
скрипт merge-all-branches проверяет, есть ли что-то новое, если нет — ничего не делает, если есть — спрашивает, надо ли это мержить.<br />
<br />
В моем случае, накатывать 2.6.23 поверх пропатченого 2.6.18, бесмысленно, иначе там всё развалится.<br />
Придётся делать по сути rebase всех веток с патчами, и подцеплять к старой истории в самом конце.<br />
При сборке 2.6.23 лучше создать новые ветки fix-stable, kernel-image-std-smp, …<br />
<br />
==== A ====<br />
Cоздадим ветку fix-stable. Задача этой ветки содержать последние официальные исправления для ядра от Linus Torvalds:<br />
<br />
<div class="action"><div class="action-content"><source lang="css"><br />
$ git checkout -b fix-stable linux-2.6.23/master</source></div></div><br />
<br />
При будущих обновлениях можно поступать одним из следующим способов:<br />
1. Из tracking branch:<br />
<br />
<div class="action"><div class="action-content"><source lang="css"><br />
$ git fetch linux-2.6.23<br />
$ git pull . linux-2.6.23/master</source></div></div><br />
<br />
2. Загрузить обновления непосредственно из репозитория Linus-а:<br />
<br />
<div class="action"><div class="action-content"><source lang="css"><br />
$ git pull git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6.23.y.git</source></div></div><br />
<br />
==== B ====<br />
Создадим ветку kernel-image-std-smp на основе тега v2.6.23. Задача этой ветки содержать код ядра со всеми приложеными патчами.<br />
То есть в эту ветку мержатся остальные ветки feat-*-* fix-*-*.<br />
<br />
<div class="action"><div class="action-content"><source lang="css"><br />
$git checkout -b kernel-image-std-smp v2.6.23</source></div></div><br />
<br />
Заберем из старой ветки vsu/kernel-image-std-smp файлы:<br />
kernel-image.spec<br />
config-i586<br />
config-x86_64<br />
branches-to-merge<br />
.gear/rules<br />
modules.build<br />
<br />
Для каждого вышеперечисленного файла выполним:<br />
<br />
<div class="action"><div class="action-content"><source lang="css"><br />
$ git ls-tree vsu/kernel-image-std-smp<br />
$ git cat-file blob 'sha1' >kernel-image.spec<br />
$ git add -f kernel-image.spec config-i586 config-x86_64 branches-to-merge .gear/rules modules.build</source></div></div><br />
<br />
флаг -f указывает добавить .gear/rules, даже если он занесен в .gitignore<br />
<br />
==== C ====<br />
Создадим ветки feat-*-* и fix-*-*.<br />
Например создадим ветку добавляющую поддержку файловой системы unioinfs.<br />
<br />
<div class="action"><div class="action-content"><source lang="css"><br />
$ git checkout -b feat-fs-unionfs v2.6.23</source></div></div><br />
<br />
Патч можно наложить в ручную (patch -p1 < .....) или же средствами git. Что будет более правильно, и облегчит добавление файлов в index,<br />
если патч затрагивает слишком много файлов:<br />
<br />
<div class="action"><div class="action-content"><source lang="css"><br />
$ git apply --index --whitespace=nowarn unionfs.patch</source></div></div><br />
<br />
Отличие от patch в том, что git apply рассматривает любой fuzz как ошибку.<br />
Ещё особенность в том, что по умолчанию, если есть хотя бы одна ошибка, патч не применяется вообще.<br />
Можно добавить — -reject, чтобы создавались *.rej, как с обычным patch.<br />
Кстати, такой внешний патч может иметь смысл совать в отдельную ветку, растущую прямо из той версии ядра, для которой предназначен патч<br />
а потом уже мержить. Дело в том, что 3way merge зачастую работает надёжнее, чем наложение патча на изменившуюся версию<br />
изменения из патча иногда могут молча улетать в другой участок с похожим содержимым.<br />
<br />
<div class="action"><div class="action-content"><source lang="css"><br />
$ git commit -m "Add unionfs 2.1.8 support"</source></div></div><br />
<br />
Ничего страшного не будет если самому создать сам ветку git checkout -b fix-xxx, а потом добавить коммит из ветки vsu/fix-xxx с помощью git cherry-pick.<br />
vsu так же делал большей части этих веток. То есть получается мы крадем коммиты vsu с помощью cherry-pick.<br />
Единственная неприятность от cherry-pick — если эти коммиты появятся в нескольких местах, потом, возможно, придётся что-то мержить руками.<br />
Если изменения точно совпадают, git merge происходит автоматически, если с одной стороны есть ещё какие-то изменения сверху, может вылезти конфликт на ровном месте.<br />
<br />
Если Linus Torvalds добавил в официальное ядро присутвовавшие у нас исправления то можно сделать в ветке fix-stable:<br />
<br />
<div class="action"><div class="action-content"><source lang="css"><br />
$ git pull -s ours fix-xxx</source></div></div><br />
<br />
этот фиктивный мерж проходит всегда автоматом, а потом git уже просто не смотрит внутрь этой ветки.<br />
<br />
В итоге у меня получились следующие ветки :<br />
: feat-core- -rt<br />
: feat-core-bootsplash<br />
: feat-evms<br />
: feat-evms-nodm<br />
: feat-fs-squashfs<br />
: feat-fs-unionfs<br />
: fix-core- -init<br />
: fix-core- -syslog<br />
: fix-stable<br />
: kernel-image-std-smp<br />
: kernel-source<br />
: master<br />
<br />
==== D ====<br />
<br />
Мержим все исправления в ветку kernel-image-std-smp, исправляем конфликты.<br />
<br />
<div class="action"><div class="action-content"><source lang="css"><br />
$ git pull . feat-fs-unionfs</source></div></div><br />
<br />
==== E ====<br />
<br />
В ветке kernel-image-std-smp, создадим новый конфиг на базе старого:<br />
<br />
<div class="action"><div class="action-content"><source lang="css"><br />
$ cp config-i586 .config<br />
$ make oldconig</source></div></div><br />
<br />
При обработке make oldconfig, следует учитывать тот факт, что при наличии возможности скомпилировать некую часть ядра в виде модуля, следует ее выбрать.<br />
Чаще всего модули не компилируются непосредственно в ядро, но бывают исключения.<br />
<br />
Проверяем все ли впорядке:<br />
<br />
<div class="action"><div class="action-content"><source lang="css"><br />
$ make menuconfig</source></div></div><br />
<br />
Опцию CONFIG_LOCALVERSION_AUTO следует отключить.<br />
<br />
<div class="action"><div class="action-content"><source lang="css"><br />
$ cp .config config-i586<br />
$ vim kernel-image.spec .gear/rules<br />
$ add_changelog kernel-image.spec<br />
$ gear-update-tag -acv<br />
$ git add config-i586 kernel-image.spec .gear/rules<br />
$ git commit</source></div></div><br />
<br />
==== F ====<br />
<br />
Собираем ядро<br />
<br />
<div class="action"><div class="action-content"><source lang="css"><br />
$ ./buildkernel-hsh --hsh-workdir=/home/stanv/hasher std-smp<br />
или<br />
$ ./buildkernel-hsh --hsh-options=--apt-config=/home/stanv/apt/apt.conf.sisyphus.x86_64 --hsh-workdir=/build/stanv/hasher/ std-smp<br />
или<br />
$ time ./buildkernel-hsh --target=x86_64 --hsh-workdir=/home/stanv/hasher --hsh-options='--apt-config=/home/stanv/apt/apt.conf.sisyphus.x86_64 --repo=/home/stanv/tmp/repo-2.6.23 --target=x86_64' wks</source></div></div><br />
<br />
=== Сборка дополнительных модулей ===<br />
<br />
'''См. статью [[Сборка модулей ядра]].'''<br />
<br />
==== A ====<br />
<br />
Каждый пакет, несущий дополнительный модуль собирается на основе шаблона.<br />
Шаблоны для всех дополнительных модулей раньше можно было загрузить с CVS:<br />
<br />
<div class="action"><div class="action-content"><source lang="css"><br />
$ cvs -d cvs.alt:/cvs/kernel checkout -d modules kernel/modules<br />
или<br />
$ cvs -d anoncvs@anoncvs.altlinux.org:/cvs/kernel co -d modules kernel/modules</source></div></div><br />
<br />
Теперь шаблоны для модулей находятся в репозиториях kernel-modules у мантейнеров.<br />
<br />
==== B ====<br />
<br />
Например, при сборке пакета kernel-modules-nvidia-std-smp-100.14.19-alt3.132631.1.i586.rpm<br />
будет использован шаблон modules/nvidia/kernel-modules-nvidia.spec и пакет<br />
kernel-source-nvidia-1001419-100.14.19-alt39.i586.rpm.<br />
<br />
Пакет kernel-source-nvidia-1001419-100.14.19-alt39.i586.rpm берем из Sisyphus.<br />
<br />
Пакеты kernel-source-* собираются как обычно. У кого-то лежит в гите, у кого-то старым дедовским способом.<br />
Получается что мантейниры модулей предлагают только kernel-source-%modulename, а сам бинарный модуль собирает vsu.<br />
Пакеты с бинарными модулями нужно собирать с каждым обновлением ядра.<br />
Если kernel-source-modulename плохо собран, тогда vsu выполняет двойную работу, либо забивает на этот модуль.<br />
<br />
=== Undeground ===<br />
то есть, rpm-build-kernel — для BuildRequires, kernel-build-tools — скрипты для использования мантейнерами<br />
<br />
pull . сейчас можно менять на merge<br />
что лучше cherry-pick или pull ?<br />
это в древних версиях git merge не предназначался для вызова руками<br />
зависит от ситуации… если в ветке куча коммитов, которые в свежей версии уже есть, merge с большой вероятностью не пройдёт автоматически<br />
если это патчи, которые не вошли в новую версию, вероятно, лучше сделать merge<br />
а я сделал cherry :(<br />
кстати, в подобном случае может иметь смысл сначала сделать merge новой версии в эту ветку<br />
хотя это зависит от того, что в дальнейшем предполагается делать с этими изменениями<br />
если нужно получить патчи для свежего апстрима, придётся делать rebase<br />
если это какие-то изменения, которые апстриму нафиг не нужны, может быть проще смержить свежую версию апстрима туда и разгрести конфликты<br />
кстати, в самом свежем git сделали поддержку revert и cherry-pick для merge… указывается, с каким родителем делать дифф, который потом откатывается или применяется<br />
A->B ы :(то есть cherry-pick может забирвать все коммиты, между A и B ?<br />
нет… это git rebase умеет<br />
только он портит исходный бранч<br />
а в чем тогда новая фишка ?<br />
cherry-pick и revert — это почти одно и то же, различаются тем, в какую сторону применяется патч<br />
патч генерируется между указанным коммитом и его родителем<br />
если это merge, нужно указать, какой из родительских коммитов нужно брать<br />
вот эту опцию и добавили<br />
то есть, если сделать cherry-pick для merge, получится один мегапатч со всеми изменениями<br />
вообще это полезно для revert<br />
<br />
=== Ссылки ===<br />
* [[KernelBuild|/AltLinux/Sisyphus/devel/KernelBuild]]<br />
* [http://freesource.info/wiki//Musorka/AltLinux/Sisyphus/devel/KernelCVS /Musorka/AltLinux/Sisyphus/devel/KernelCVS]<br />
* [[Kernelnotes/mike|Заметки mike@]]<br />
<br />
=== Примечания ===<br />
<references /><br />
<br />
{{Category navigation|title=Kernel|category=Kernel}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Spec&diff=60152
Spec
2022-04-22T12:10:19Z
<p>217.15.195.17: /* License */</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 />
# По умолчанию будет выключено.<br />
# Одноразово в командной строке rpm/rpmbuild включается с помощью --enable=static<br />
%def_disable static<br />
[...]<br />
# Если заодно необходимо передавать опцию --(disable|enable)-static в configure,<br />
# то можно написать следующую конструкцию.<br />
# (В разных случаях она будет раскрываться в разные значения.)<br />
%configure %{subst_enable static}<br />
[...]<br />
%if_enabled static<br />
%files devel-static<br />
[...]<br />
%endif<br />
<br />
== Проверка плагинов ==<br />
У нас в rpm-build >= 4.0.4-alt100.91 есть механизм проверки плагинов,<br />
который используется в разных пакетах. Вот, например, ldv когда-то применил<br />
его для irssi, выглядит это так (%_bindir/irssi можно прелоадить,<br />
потому что он PIE):<br />
<br />
export RPM_LD_PRELOAD_irssi=%buildroot%_bindir/irssi<br />
export RPM_FILES_TO_LD_PRELOAD_irssi='%irssi_modules_dir/lib*.so %perl_vendor_autolib/Irssi/*.so'<br />
export RPM_LD_PRELOAD_libperl_core='%buildroot%irssi_modules_dir/libperl_core.so'<br />
export RPM_FILES_TO_LD_PRELOAD_libperl_core='%irssi_modules_dir/libfe_perl.so %perl_vendor_autolib/Irssi/*.so'<br />
%set_verify_elf_method strict<br />
<br />
== Version ==<br />
<br />
Версия upstream-кода.<br />
<br />
В случае упаковки промежуточной версии ({{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 />
* оформлять как {{pkg|1.0rel}} или<br />
* ждать поднятия версии апстримом.<br />
Чтобы избежать таких сложностей в случае, когда разработчик апстрима именует промежуточные версии без учёта лексикографического порядка сортировки, в номер версии в нужном месте добавляем свой суффикс «.0». Например, в случае планов апстрима после {{pkg|1.0}} выпустить {{pkg|1.0.1}}, для промежуточной у апстрима версии {{pkg|1.0.1-rc1}} в спеке пишем {{pkg|1.0.0.1-rc1}}.<br />
<br />
==== Расшифровка именования промежуточных версий ====<br />
На [https://lists.altlinux.org/pipermail/devel/2019-May/207886.html примере] {{pkg|libxml2 2.9.4.0.12.e905-alt1}}:<br />
* у апстрима {{pkg|v2.9.4-12-ge905f08}} — это вывод <code>git describe e905f08</code>;<br />
* «12» - это количество коммитов, отделяющих коммит «e905f08» от «v2.9.4»;<br />
* «.0» - это суффикс, добавленный к версии {{pkg|2.9.4}}, чтобы получившийся результат {{pkg|2.9.4.0}} был гарантированно меньше любой версии, выпущенной после {{pkg|2.9.4}};<br />
* «e905» получен с помощью <code>git describe --abbrev=1 e905f08</code>;<br />
* «2.9.4.0.12.e905» написан по мотивам вывода утилиты <code>git-version-gen</code> из <code>gnulib</code>.<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}}<ref>для ссылки на коммит удобен {{cmd|git describe}}</ref><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 />
При первой сборке финального upstream-релиза следует поднять номер релиза пакета:<br />
<br />
* {{pkg|1.0-alt1.gitda39a3ee}}<br />
* {{pkg|1.0-alt2.gitd06f1866}}<br />
* {{pkg|1.0-alt3}}<br />
<br />
Использовать релиз {{pkg|alt0}} запрещено — пакет с таким релизом, попав в репозиторий, порождает проблемы с [[Backports Policy|бэкпортами]] (в отличие от, например, {{pkg|alt0.1}}, который при бэкпорте для p7 становится {{pkg|alt0.0.M70P.1}}).<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 />
Cодержит краткое описание пакета. Оно выводится, например, при поиске пакета через <tt>apt-cache search</tt>. Значение тэга <tt>Summary</tt> должно начинаться с заглавной буквы. В конце <tt>Summary</tt> не должно быть точки.<br />
<br />
== License ==<br />
<br />
* Лицензия должна быть указана в точности так, как сформулировано в upstream-пакете (в частности, не разрешается отбрасывать или добавлять «or any later version», а также менять указанные версии или смешивать GPL и LGPL).<br />
* Несвободные лицензии должны быть указаны как «distributable»<br />
<br />
При указании лицензии рекомендуется пользоваться макросами из пакета {{pkg|rpm-build-licenses}}, добавив его в список BuildRequires.<br />
<br />
Сам текст лицензии упаковывать в пакет нужно только в том случае, если соответствующий текст отсутствует в <tt>/usr/share/license</tt> (пакет {{pkg|common-licenses}}). Если же таковой файл там присутствует, то достаточно указать название лицензии в тэге пакета.<br />
<br />
Лицензию с добавками к стандартному тексту (например, GPLv2 с дополнительной секцией в ядре Linux) упаковывать обязательно.<br />
<br />
С ноября 2019 года в {{pkg|sisyphus_check}} в режиме предупреждения [https://lists.altlinux.org/pipermail/devel/2019-November/209050.html включена] проверка на соответствие содержимого тега <tt>License:</tt> классификации SPDX (соответственно дополнено содержимое пакета {{pkg|common-licenses}}).<br />
<br />
Список установленных из {{pkg|common-licenses}} можно увидеть с командой <pre>ll /usr/share/license</pre><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 />
<small>(начиная с rpm-build 4.0.4-alt133)</small> Все патчи, описанные в основной секции spec-файла, можно в секции [[#%prep|%prep]] применить директивой %autopatch. %autopatch принимает опции -p и -F, аналогичные таким же опциям директивы %patch.<br />
<br />
== Requires, PreReq ==<br />
<br />
При наличии логических зависимостей между пакетами внутри одного spec-файла, пакетная зависимость между ними должна включать полную версию пакета, например так:<br />
Requires: %name = %epoch:%version-%release<br />
<br />
=== Requires ===<br />
<br />
Используется для обозначения зависимостей между пакетами, которые необходимо удовлетворить для нормальной работы программ, не входящих в пакет с создаваемым/корректируемым спеком.<br />
Requires: java >= 1.6<br />
<br />
== BuildRequires, BuildPreReq, BuildRequires(pre) ==<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 />
При необходимости наличия в окружении, где выполняется раскрытие макросов для создания src.rpm, дополнительных пакетов {{pkg|rpm-macros-*}} либо {{pkg|rpm-build-*}} их следует указать тэгом <tt>BuildRequires(pre)</tt>. Злоупотреблять им не следует (затрудняет [[bootstrap|бутстрапы]]); критерий необходимости именно этой формы -- ошибка (не предупреждение!) при попытке выполнить в недостаточном окружении команду вида<br />
<br />
rpm -bs --nodeps этот.spec<br />
<br />
Обратите внимание, что для {{cmd|gear-rpm}} ограничения иные и этот критерий неприменим.<br />
<br />
== BuildArch ==<br />
Используется для указания архитектуры (под)пакета. Возможные значения:<br />
* <tt>x86_64</tt><br />
* <tt>%ix86</tt><ref>См. {{cmd|rpm --eval %ix86}}</ref> или индивидуально <tt>i386</tt>, <tt>i586</tt>, <tt>i686</tt>...<br />
* <tt>noarch</tt><br />
В случае указания среди тегов основного пакета определяет архитектуру всех подпакетов; для индивидуальных подпакетов — как правило, с данными, документацией либо скриптами — допускается указание только <tt>noarch</tt>, и то при условии использования {{pkg|rpm-4.0.4-alt94}} или более новой сборки.<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 />
== Conflicts ==<br />
<br />
Применяется для указания наличия конфликта (обязательно в случае файлового/RPC и желательно в случае существенного смыслового) между данным пакетом и указываемым. Не надо ставить конфликты на то, чего ещё нет и о чём, соответственно, ничего не известно. Достаточно проставить односторонне.<br />
<br />
== Provides ==<br />
<br />
Используется для указания того факта, что данный пакет предоставляет функциональность иного (переименованного устаревшего названия, широко известного по другим дистрибутивам либо же виртуального). Следует применять только в случае реальной необходимости и, как правило, в форме<br />
<tt>Provides: something = %version-%release</tt><br />
<br />
При переименовании пакета обязательно сочетается с <tt>Obsoletes:</tt>.<br />
<br />
== Obsoletes ==<br />
<br />
Перечисляет пакеты/версии, объявленные устаревшими. Обычно применяется при переименовании пакета в сочетании с <tt>Provides:</tt> и с указанием версии, меньшей или равной последней известной версии пакета под старым названием:<br />
<br />
Name: someproject<br />
Version: 1.0<br />
Release: alt1<br />
# ...<br />
Provides: oldproject = %version-%release<br />
Obsoletes: oldproject <= 0.9.1<br />
<br />
(Примечание: [[Реагирует ли сборочница на переименование пакетов]].)<br />
<br />
== %description ==<br />
<br />
Здесь указывается описание пакета. Данное описание учитывается при поиске пакета через <tt>apt-cache search</tt> и полностью выводится во время просмотра информации о пакете при помощи <tt>apt-cache show имя_пакета</tt>.<br />
<br />
Описание пакета должно содержать информацию, интересную его пользователю, а не сборщику:<br />
* Описание программы или инструмента должно содержать их функционал, а не особенности реализации (язык, используемые библиотеки и т. д.)<br />
* Описание библиотеки должно содержать язык программирования, для которого предназначена библиотека, и решаемую задачу<br />
* …<br />
<br />
Длина каждой строки не должна превышать 72 символа ради читабельности в различных случаях.<br />
<br />
== %prep ==<br />
<br />
=== %setup ===<br />
<br />
Макрос %setup распаковывает исходный код перед компиляцией.<br />
<br />
Конструкция <tt>%setup</tt> в Sisyphus RPM использует флаг <tt>-q</tt> (quiet) по умолчанию. Для включения отладочного вывода используйте флаг <tt>-v</tt>.<br />
<br />
Для тарболов с отличающимся от рекомендуемого GNU именованием содержимого (когда архив на верхнем уровне содержит лишь соответствующий каталог <tt>имя-версия</tt>), можно применять [https://bugzilla.altlinux.org/show_bug.cgi?id=31778#c7 следующий вариант]:<br />
<br />
%setup -c<br />
%setup -DTn %name-%version/%name<br />
<br />
== %build ==<br />
=== %configure ===<br />
Макрос используется для упрощения выполнения {{path|./configure}} с соответствующими параметрами данной платформы.<br />
Почти всегда вполне достаточно выполнить <tt>%configure</tt> без параметров.<br />
От имени пользователя данный макрос работать не будет.<br />
%build<br />
%configure<br />
%make_build<br />
<br />
При сборке пакетов проверяйте, нет ли в спеке <tt>--enable-strip</tt>. Обычно от него нет никакого эффекта, кроме убивания debuginfo на корню<ref>http://lists.altlinux.org/pipermail/devel/2011-March/189039.html</ref>.<br />
<br />
Если скрипта {{path|configure}} в архиве исходных текстов нет (обычное явление для исходников из git или иных SCM), но есть {{path|configure.ac}} -- следует добавить перед вызовом <tt>%configure</tt> макрос <tt>%autoreconf</tt>. В иных случаях стоит повнимательней ознакомиться с инструкциями по сборке, раз это не было сделано до сих пор.<br />
<br />
=== %make_build ===<br />
По умолчанию поддерживает при сборке использование нескольких процессоров/ядер.<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 />
* если важно получить ответ на вопрос "не испортилось ли" поскорее, то<br />
%make_build check<br />
<br />
* если SMP-сборка не поддерживается, то<br />
make check<br />
<br />
* если важно узнать, какие именно тесты не прошли, то следует использовать ключ -k.<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 />
Ненулевой код возврата по умолчанию приводит к останову сборки (в т.ч. и на [[girar]]); это возможно изменить при помощи ключей <tt>--disable check</tt>/<tt>--without check</tt>/<tt>--disable test</tt>/<tt>--without test</tt> или макроса<br />
<br />
%def_disable check<br />
<br />
Кроме того, отключение <tt>%check</tt> происходит при выполнении под управлением buildreq.<br />
<br />
При необходимости вытащить для изучения и/или апстрима, например, {{path|testsuite.log}} применяется<ref>[http://lists.altlinux.org/pipermail/devel/2012-May/194279.html vsu@ в devel@]</ref>:<br />
<pre>make check || {<br />
find -type f -name testsuite.log -print0 | xargs -r0 cat<br />
exit 1<br />
}</pre><br />
<br />
=== BuildRequires только для %check ===<br />
<br />
Для возможности сборки с облегчёнными сборочными зависимостями (например, при bootstrap-е на новой платформе) желательно оформить BuildRequires только для %check как условные. Как следует из описания механизма выше, годится, например, такое выражение:<br />
<br />
%{?!_without_test:%{?!_disable_test:%{?!_without_check:%{?!_disable_check:BuildRequires: fakechroot}}}}<br />
<br />
но на практике (например, в [http://git.altlinux.org/gears/r/rpm.git?p=rpm.git;a=blob;f=alt/rpm.spec;h=c31235ba8911c234273874c7a05222e0679b01d2;hb=HEAD#l98 спеке пакета {{pkg|rpm}}] или в [http://git.altlinux.org/gears/g/gcc7.git?p=gcc7.git;a=blob;f=gcc.spec;h=e35394d0839e7f91722791bd28848891744e36c4;hb=cb37543edf6d176652517531af8c33ab1138ab0c#l219 спеке пакета {{pkg|gcc7}}]) часто встречается более короткое выражение:<br />
<br />
%{?!_without_check:%{?!_disable_check:BuildRequires: fakechroot}}<br />
<br />
(На свой страх можете ещё сократить это условие до <code>%{?!_disable_check:BuildRequires: fakechroot}</code>, но это может запутать людей, если они не будут знать, что этот спек требует использования именно опции {{cmd|--disable check}}, а не {{cmd|--without check}}, и привести для них к неожиданному поведению {{cmd|rpmbuild}}.)<br />
<br />
Первое полное выражение по смыслу эквивалентно следующей конструкции с <code>if</code>, которое и работает на практике, наверное, так же:<br />
<br />
%if_without test<br />
%else<br />
%if_disabled test<br />
%else<br />
%if_without check<br />
%else<br />
%if_disabled check<br />
%else<br />
BuildRequires: fakechroot<br />
%endif<br />
%endif<br />
%endif<br />
%endif<br />
<br />
Последнее краткое выражение <code>%{?!_disable_check:BuildRequires: fakechroot}</code> по смыслу эквивалентно следующей конструкции с <code>if</code>:<br />
<br />
%if_disabled check<br />
%else<br />
BuildRequires: fakechroot<br />
%endif<br />
<br />
====Как работает %def_enable check и можно ли его использовать====<br />
Это по логике работы похоже на то, как работает <code>%def_enable check</code> — объявление специфичного для пакета переключателя <code>check</code>; логика работы такого объявления [http://git.altlinux.org/gears/r/rpm.git?p=rpm.git;a=blob;f=platform.in#l611 грубо говоря сводится по смыслу] к:<br />
<br />
%if_disabled check<br />
%else<br />
%global _enable_check SPECIAL_VALUE<br />
%endif<br />
<br />
Так что эффекта последнего краткого выражения <code>%{?!_disable_check:BuildRequires: fakechroot}</code> можно добиться ещё и, например, так — объявив специфичный для пакета переключатель <code>check</code>:<br />
<br />
%def_enable check<br />
...<br />
%{?_enable_check:BuildRequires: fakechroot}<br />
<br />
или<br />
<br />
%def_enable check<br />
...<br />
%if_enabled check<br />
BuildRequires: fakechroot<br />
%endif<br />
<br />
(Пример такого самого простого подхода с <code>%def_enable check</code> можно увидеть в [http://git.altlinux.org/srpms/p/python3-module-oslotest.git?p=python3-module-oslotest.git;a=blob;f=oslotest.spec;h=5144960ed30e221dcada2a5d63419b12055d7544;hb=HEAD#l23 спеке {{pkg|python3-module-oslotest}}].)<br />
<br />
Удобство в том, что можно много раз в спеке (когда надо) просто проверять <code>%if_enabled check</code> (или <code>%{?_enable_check:...}</code>) по одному объявленному имени переключателя вместо четырёх возможных — при условии, что пишущий спек предварительно обобщил объявление своего переключателя <code>check</code> до:<br />
<br />
%if_without test<br />
%else<br />
%if_disabled test<br />
%else<br />
%if_without check<br />
%else<br />
%def_enable check<br />
%endif<br />
%endif<br />
%endif<br />
<br />
На практике такое (в упрощённом виде) появилось в [http://git.altlinux.org/gears/a/apt.git?p=apt.git;a=blob;f=apt.spec;h=deee52a230ff829eccb4b459d1b5f8a6828cf994;hb=HEAD#l1 спеке {{pkg|apt}}] (и [http://git.altlinux.org/gears/a/apt.git?p=apt.git;a=blob;f=apt.spec;h=deee52a230ff829eccb4b459d1b5f8a6828cf994;hb=HEAD#l87]):<br />
<br />
# Honor both kind of options: --{without,disable} check;<br />
# and allow to simply write %%if_enabled check below.<br />
%if_without check<br />
%else<br />
%def_enable check<br />
%endif<br />
<br />
...<br />
<br />
# dependencies of tests<br />
%if_enabled check<br />
BuildRequires: /usr/bin/genbasedir<br />
BuildRequires: gpg-keygen<br />
BuildRequires: /usr/sbin/nginx<br />
BuildRequires: /usr/bin/openssl<br />
%endif<br />
<br />
К сожалению, сделать такое расширенное объявление в системных макросах нельзя, потому что тогда не будет работать <code>%def_disable check</code> в спеках. (Можно было бы предложить добавить такой макрос <code>%def_enable_check_unless_check_is_off</code>, чтобы им пользовались авторы спеков, но его всё равно надо будет вручную вписывать в спек после места, где потенциально может быть написано <code>%def_disable check</code> и т.п. Или научить {{pkg|rpm-build}} понимать <code>BuildRequires(check): ...</code>.)<br />
<br />
====checkinstall-подпакет как альтернатива %check====<br />
Создание {{pkg|checkinstall}}-подпакета вместо <code>%check</code> упрощает для авторов спеков задачу запуска интеграционных тестов (создания подходящего окружения для них и прописывания их дополнительных зависимостей), а для репозитория пакетов — устраняет циклы по сборочным зависимостям (в случае бутстрапа новой архитектуры или новой версии сборочной зависимости, такой, как {{pkg|python3}}, например). Так как дополнительные зависимости этих тестов пишутся в <code>Requires:</code> этого подпакета, и не надо усложнять <code>BuildRequires:</code>, так же тестируемые бинарники уже лежат в месте инсталла, а не в %buildroot или build/src dir. (Однако, этот метод не подходит для <code>make check</code>.)<br />
<br />
Предполагается, что {{pkg|checkinstall}}-подпакет запускает тесты в своих скриптах <code>%pre</code> или <code>%post</code>, а сборочница [[girar]] выявит ошибки на стадии install check и не пропустит пакет.<br />
<br />
То есть — для вашего пакета <code>%name</code> во время install check будет так же проверен (т.е. просто установлен) пакет <code>%name-checkinstall</code> и выполнятся его <code>%pre</code> и <code>%post</code> скрипты. Ваш пакет необходимо поставить в зависимость к <code>checkinstall</code> подпакету. Обратите внимание, что в отличии от секции <code>%check</code> в <code>%post</code> и <code>%pre</code> скриптах нет <code>errexit</code> по умолчанию, так что не забудьте сделать <code>set -e</code>, если нужно.<br />
<br />
<code>checkinstall</code>-пакет, тестирующий ваш пакет, может быть запакован отдельно (из другого spec'а), независимым пакетом (например, {{pkg|external-checkinstall}}). При условии, что он собирается в том же задании или вытаскивается по зависимостям одного из собирающихся пакетов (очевидно, какого-то из того же компонента репозитория, т.е. {{pkg|*-checkinstall}}), [[girar]] будет его устанавливать на стадии install check, выполнять его <code>%pre</code>- и <code>%post</code>-скрипты и обнаруживать их ошибки. (Приходит в голову ещё один вариант "автоматизации" попадания {{pkg|external-checkinstall}} в то же задание, где находится тестируемый пакет: при сборке {{pkg|external-checkinstall}} записывать в него жёсткую зависимость на текущую версию тестируемого пакета на момент сборки, что приведёт к возникновению unmet dependency в репозитории пакетов при сборке туда другой версии тестируемого пакета и заставит мейнтейнера добавить в задание {{cmd|rebuild external-checkinstall}}. На практике не применялось.)<br />
<br />
checkinstall не проверяется ALT beekeeper'ом (пересборка на x86), так что если нужны регулярные проверки, то придется использовать %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}}<br />
<br />
== Примеры ==<br />
<br />
{{Main|Spec/sample}}<br />
<br />
== Ссылки ==<br />
* [http://docs.altlinux.org/archive/2.2/master/devel-html/ch01s02.html ALT specfile conventions]<br />
* [[Spec/Предопределенные макросы]]<br />
* [[Особенности написания спек файлов в ALT Linux]]<br />
<br />
== Примечания ==<br />
<references /></div>
217.15.195.17
https://www.altlinux.org/index.php?title=Hasher/FAQ&diff=60079
Hasher/FAQ
2022-04-20T08:53:30Z
<p>217.15.195.17: /* Hasher ругается: "Failed to deduce hasher config number from directory ownership" */</p>
<hr />
<div>== При запуске <tt>hsh</tt> я получаю ошибку: <code>hsh-mkchroot: cannot access getugid1 helper</code> ==<br />
<br />
A: [[Руководство по hasher#Добавление пользователя|Добавьте себя в hasher]].<br />
<br />
== Я добавил себя в <tt>hasher</tt>, но всё равно получаю ошибку <code>hsh: /usr/libexec/hasher-priv/getconf.sh: cannot access getconf helper</code> ==<br />
<br />
A: Перелогиньтесь — <tt>hasher-useradd</tt> добавляет пользователя в новые группы.<br />
<br />
== В моём <tt>hasher</tt> собираются пакеты со странной архитектурой, которые не ставятся ==<br />
<br />
A: [[Руководство по hasher#Архитектура пакетов|Явно укажите архитектуру сборки]].<br />
<br />
== В конце сборки в <tt>hasher</tt> выдаются ошибки вида <code>some-packet.src.rpm: wrong PACKAGER</code> ==<br />
<br />
Q: В конце сборки в <tt>hasher</tt> выдаются ошибки вида<br />
some-packet.src.rpm: wrong PACKAGER: Automated package hasher <hasher@localhost><br />
<br />
A1: Эти ошибки выдаются утилитой [[sisyphus_check]], проверяющей соответствие пакетов правилам репозитория [[Sisyphus]]. Исправьте ошибки в spec-файле (обычно добавлением корректного тега <tt>Packager</tt>).<br />
<br />
В частности, отсутствие тега <tt>Packager</tt> в spec-файле обычно (если не сделаны настройки, описанные в ответах ниже) приводит к такому результату (потому что в собранном пакете в качестве <tt>Packager</tt> будет некое значение по умолчанию).<br />
<br />
Однако, если такой пакет без тега <tt>Packager</tt> будет собираться в [[girar]] (например, том, который работает на [[git.alt]]), то эта проверка будет успешно пройдена, потому что[http://lists.altlinux.org/pipermail/devel/2009-February/167112.html]: "girar builder, собирая пакет из подписанного git-тэга, указывает в качестве packager'а по умолчанию имя подписавшего git-тэг, поэтому, если поле Packager в спек-файле отсутствует, packager'ом собранного пакета окажется тот, кто подписал git-тэг." По правилам ALT это повлечёт назначение ответственным за пакет (maintainer'ом) нового packager'а (где это записано? так ли это?). Возможно, это не то, чего Вы хотели бы.<br />
<br />
A2: Если пакет не предназначен для Sisyphus и выдаваемые ошибки связаны не с техническими проблемами в пакете, а с невыполнением политик репозитория (например, ограничение на тэг <tt>Packager</tt> и на PGP-подпись; возможно, будет интересна {{altbug|15376}}) — [[Руководство по hasher#Отключение проверок sisyphus_check|отключите часть проверок <tt>sisyphus_check</tt>]]; [http://lists.altlinux.org/pipermail/devel-newbies/2012-September/000836.html можно добавить] в {{path|~/.hasher/config}}:<br />
no_sisyphus_check="packager,buildhost,gpg,changelog"<br />
<br />
A3: В конфигурационный файл .hasher/config можно добавить поле packager (если есть альтовский логин):<br />
packager="Your Name <login@altlinux.org>"<br />
<br />
или с той же целью поступить как написано в [[Сборка пакета с нуля#Окружение RPM]]:<br />
<br />
Создайте файл {{path|~/.rpmmacros}} следующего содержания (конечно, заменив ключ и имя мейнтейнера на свои):<br />
<br />
%packager Andrey Cherepanov <cas@altlinux.org><br />
%_gpg_name A424A3962331FDD2748BC8B34863C0F4A9EBF131<br />
<br />
а в {{path|~/.hasher/config}} добавьте универсальное <code>packager="$(rpm --eval %packager)"</code>.<br />
<br />
A4: У утилиты hsh есть ключик --packager, можно воспользоваться им:<br />
$ gear -v --hasher -- hsh --target=i586 --packager="Andrew Clark <andyc@altlinux.org>" ~/hasher<br />
<br />
A5: Если пакет собирать в локальном <tt>hasher</tt>-е и поле <tt>Packager</tt> содержит email не из домена altlinux, то возникнет схожая ошибка в модуле проверки changelog-а <tt>sisyphus_check</tt>. Так же как и с проверкой packager, можно добавить в no_sisyphus_check=changelog.<br />
<br />
== При запуске <tt>hsh</tt> я получаю ошибку <code>date: invalid date '1970-01-01 UTC none seconds'</code> ==<br />
<br />
Q: При запуске <tt>hsh</tt> я получаю ошибку<br />
date: invalid date '1970-01-01 UTC none seconds'<br />
<br />
A1: <tt>date</tt> тут на самом деле ни при чём. Это получается, когда в исходном файле <tt>src.rpm</tt> нет секции <tt>%changelog</tt>. Нужно обязательно написать хотя бы что-то вида:<br />
%changelog<br />
* Fri Jan 14 2022 Vasya Pupkin <vasya_pupkin@altlinux.org> 0.1.2-alt1<br />
- Initial build.<br />
Почта должна быть в домене altlinux.*, иначе всё равно будет вылезать ошибка "wrong packager in CHANGELOGNAME" - см. предыдущий вопрос.<br />
<br />
== При запуске <tt>hsh</tt> я получаю ошибку <code>hasher-priv: /path/to/workdir/chroot: prefix mismatch</code> ==<br />
<br />
Q: При запуске <tt>hsh</tt> я получаю ошибку<br />
hasher-priv: /path/to/workdir/chroot: prefix mismatch, working directory<br />
should start with one of directories listed in colon-separated prefix<br />
list (~:/tmp/.private)<br />
hsh-mkchroot: failed to make devices.<br />
<br />
A: По умолчанию <tt>hasher</tt> позволяет располагать свою рабочую директорию в <tt>$HOME</tt> пользователя или в <tt>/tmp/.private</tt>. Или измените место, где создаётся рабочая директория, или разрешите дополнительные директории с помощью ключа <tt>prefix</tt> в <tt>/etc/hasher-priv/system</tt> (общесистемно) или <tt>/etc/hasher-priv/user.d/<USER></tt> (для одного пользователя).<br />
<br />
== hsh не запускается, /.host/entry: No such file or directory ==<br />
<br />
Q: При запуске <tt>hsh</tt> выдаёт ошибку:<br />
hasher-priv: slave: chrootuid: execve: /.host/entry: No such file or directory<br />
hsh-initroot: Failed to create RPM database.<br />
<br />
A: Выключите все сменные носители в <tt>/etc/apt/sources.list</tt>, запустите <tt>apt-get update</tt><br />
и еще раз повторите запуск <tt>hsh</tt>.<br />
<br />
== mkimage останавливается и чего-то ждёт ==<br />
<br />
Q: Сборка дистрибутива останавливается на таких вот строчках:<br />
mki-cache: has started executing.<br />
mkimage: Processing 'copy-packages' ...<br />
mki-cache: has started executing.<br />
mki-expand-pkgs: has started executing. method=simple<br />
mki-copy-pkgs: has started executing.<br />
mkdir: created directory `.../profiles/main/.work/mki-copy-pkgs.verbose'<br />
<br />
A: Выключите все сменные носители в <tt>/etc/apt/sources.list</tt> (и <tt>sources.list.d/*.list</tt>), запустите <tt>apt-get update</tt><br />
и еще раз повторите запуск <tt>hsh</tt>.<br />
<br />
== При запуске <tt>hsh</tt> выдаёт ошибку: <code>hasher-priv: openpty: No such file or directory</code> ==<br />
<br />
A: Проверьте, что у вас смонтирован <tt>/dev/pts</tt> на хост-системе.<br />
<br />
== hsh не запускается: /dev/null: Permission denied ==<br />
<br />
Q: При запуске <tt>hsh</tt> выдаёт ошибку:<br />
fakeroot daemon: /dev/null: Permission denied<br />
fakeroot: error while starting the `faked' daemon.<br />
hsh-initroot: Failed to create RPM database.<br />
<br />
A: Проверьте, что файловая система, на которой располагается сборочный каталог, смонтирована ''без'' использования опции <tt>nodev</tt>, например:<br />
$ mount | grep /tmp<br />
tmpfs on /tmp type tmpfs (rw,nosuid,relatime,size=3145728k)<br />
<br />
== почему hasher перестал создавать хэши ({{path|base/*}}) для своего репозитория? ==<br />
<br />
A: потому что для некоторого ускорения сборки они [http://lists.altlinux.org/pipermail/devel/2009-December/178354.html упразднены] в пользу непосредственного сканирования каталога (<tt>rpm-dir</tt> вместо <tt>rpm</tt> в {{path|sources.list}}). Для создания хэшей при их публикации придётся запустить {{cmd|$hasher/aptbox/regenbasedir}} (или {{cmd|genbasedir --bloat}} совсем вручную).<br />
<br />
<div id="virus"></div><br />
== правда, что Hasher — это вирус под Linux? ==<br />
<br />
A: действительно, существует [http://en.wikipedia.org/wiki/Linux_malware#Viruses ELF-вирус] [http://vxheavens.com/lib/vhe02.html Linux.Hasher], но в отличие от него — наличие технических механизмов заражения и саморазмножения в обсуждаемом hasher не показано.<br />
<br />
== Как кешировать и не скачивать одно и то же по многу раз для сборки разных пакетов? ==<br />
<br />
Q: [http://lists.altlinux.org/pipermail/sisyphus/2008-June/331276.html Yury Aliaev]: "чтобы не скачивать одно и то же по многу раз для сборки разных пакетов, необходимо, чтобы скачанные пакеты где-то хранились и при следующем запуске брались уже из этого места. Опять-таки, если пакет в Сизифе более свежий, чем локально скачанный, то скачанный пакет должен обновиться на более свежий."<br />
<br />
A: Можно добавить от себя в конфигурацию apt-а для hasher особое место для кэша apt, которое не будет чиститься hsh; например, общесистемный /var/cache/apt/archives/ -- см. [[Hasher/Tips#Кэширование скачиваемых apt-ом пакетов]].<br />
<br />
== процесс виснет на этапе какой-то установки пакетов через apt ==<br />
<br />
Q: При запуске hsh с настройками apt по умолчанию (основанными на общесистемных /etc/apt/) процесс виснет на этапе какой-то установки пакетов через apt (при применении опции -v -- на сообщении "... пакеты будут установлены:" и список пакетов дальше).<br />
<br />
A: Может быть, в /etc/apt/sources.list, /etc/apt/sources.list.d/* есть источник-cdrom. (Например, у меня cdrom был прописан в /etc/apt/sources.list.d/sources.list -- я удалил этот файл, и больше hsh не зависает на этом этапе. Примечание: я запускаю вообще-то {{cmd|gear-hsh -v -- -v}}, а не чистый hsh.)<br />
<br />
Ответ найден благодаря сообщениям <br />
* [http://lists.altlinux.org/pipermail/devel/2007-June/140523.html "Оказалось, что в /etc/apt/sources.list.d/sources.list был прописан cdrom, и hasher просил его вставить"], <br />
* [http://lists.altlinux.org/pipermail/devel/2008-August/158438.html "&lt;apt&gt; спрашивает что же ему выбрать, а хешер ему не отвечает. --Вообще он этого делать не должен. Покажите вывод hsh -v в районе затыка. --Причина оказалась в том, что &lt;...&gt; apt пытался взять его с CDROM."]<br />
<br />
== как передать параметры сборки {{cmd|rpm}}, например, <tt>--enable</tt> или <tt>--without</tt>? ==<br />
<br />
A: <tt>--build-args</tt> для {{cmd|hsh}} или {{cmd|gear-hsh}}; при пересборке src.rpm также [http://lists.altlinux.org/pipermail/sisyphus/2005-April/277314.html следует] добавить <tt>--repackage-source</tt>:<br />
<br />
hsh --build-args "--enable static" --repackage-source нужный.src.rpm<br />
gear-hsh --build-args "--enable static"<br />
<br />
== «<tt>Пакет setup присутствует в базе данных, но не имеет доступной версии.</tt> […]» ==<br />
<br />
Q: отчего при работающем {{path|sources.list}} хэшер может жаловаться: «<tt>Пакет setup присутствует в базе данных, но не имеет доступной версии.</tt> […] <tt>E: Для пакета setup не найдено подходящего кандидата для установки</tt>»?<br />
<br />
A: [http://lists.altlinux.org/pipermail/community/2015-April/683972.html проверьте], нет ли забытого указания архитектуры по умолчанию в {{path|~/.hasher/config}} или {{path|~/.rpmrc}}.<br />
<br />
== как обеспечить попадание в hasher chroot именно нужного варианта {{pkg|branding-*-release}}? ==<br />
<br />
Q: как обеспечить попадание в hasher chroot именно нужного варианта {{pkg|branding-*-release}}? Получаю либо {{pkg|branding-sisyphus-server-light-release}}, либо конфликт запрошенного с ним:<br />
error: failed dependencies:<br />
branding-sisyphus-server-light-release conflicts<br />
with branding-altlinux-centaurus-release-7.0.5-alt1<br />
hsh-initroot: Failed to install build package list.<br />
<br />
A1: при сборке пакетов — посредством <tt>--pkg-build-list=+branding-altlinux-starterkit-release</tt><br />
<br />
A2: при сборке образов с помощью [[mkimage]] — заданием <tt>IMAGE_INIT_LIST=+branding-simply-linux-release</tt> (не требуется при использовании [[m-p|mkimage-profiles]]).<br />
<br />
A3: можно заставить {{pkg|apt}} [[Mkimage/Desktop/OldTroubles|указанием]] <tt>Dir::Etc::pkgpriorities</tt>, но это скорее ''ultima ratio''.<br />
<br />
== как установить пакет из файла в hasher chroot? ==<br />
<br />
Q: как установить пакет из файла в hasher chroot?<br />
$ hsh-install ./viber-4.2.2.6-2.rpm<br />
E: Невозможно найти пакет ./viber-4.2.2.6-2.rpm<br />
<br />
A: hsh-install [https://lists.altlinux.org/pipermail/sisyphus/2015-May/363778.html не любит] относительных путей к пакетам, указывайте полный.<br />
<br />
==Дополнительная деизоляция ради особых потребностей программ==<br />
<br />
=== Я собираю пакет, но он ломается из-за того, что в сборочной среде нет <tt>/proc</tt> ===<br />
<br />
A: [[Руководство по hasher#Монтирование /proc|Настройте монтирование /proc]].<br />
<br />
=== как включить доступ в сеть из hasher chroot? ===<br />
<br />
A: share_network=1 hsh-shell<br />
<br />
=== как запретить доступ в сеть из hasher chroot? ===<br />
<br />
A: например, сборка ведётся пользователем с логином username:<br />
iptables -A OUTPUT -o venet0 -m owner --uid-owner username_a -j REJECT --reject-with icmp-net-unreachable<br />
iptables -A OUTPUT -o venet0 -m owner --uid-owner username_b -j REJECT --reject-with icmp-net-unreachable<br />
<br />
=== есть ли споcоб запустить gui-шную программу внутри hasher? ===<br />
<br />
A: да,<br />
hsh --initroot-only ~/hasher<br />
hsh-install xauth "гуишная прога"<br />
hsh-run -Y "гуишная прога"<br />
<br />
=== как запустить в хэшере браузер? ===<br />
<br />
A: например, [http://lists.altlinux.org/pipermail/community/2015-July/684363.html так]:<br />
hsh --initroot /path/to/hasher<br />
hsh-install /path/to/hasher firefox fonts-otf-mozilla-fira xauth<br />
share_ipc=yes share_network=yes hsh-run -Y --mountpoints=/proc,/dev/shm /path/to/hasher -- firefox --no-remote $@<br />
<br />
В {{path|/etc/hasher-priv/system}} должно быть разрешено монтирование /proc и /dev/shm:<br />
<tt>allowed_mountpoints=/proc,/dev/shm</tt><br />
<br />
В {{path|/etc/hasher-priv/fstab}} должна быть смонтирована /dev/shm:<br />
<tt>tmpfs /dev/shm tmpfs defaults 0 0</tt><br />
<br />
=== Как запустить в хэшере qemu с поддержкой kvm? ===<br />
Это может быть полезно для для ускорения работы <tt>qemu</tt> при использованиии [[Hasher/vm-run|<tt>rpm-build-vm</tt>]] (<tt>vm-run</tt> в <tt>%check</tt>).<br />
<br />
'''A''': Помимо того, что в системе должен быть загружен соответствующий вашей архитектуре kvm модуль (например, kvm-intel), необходимо ещё выполнить следующие '''два''' [https://lists.altlinux.org/pipermail/devel/2019-October/208630.html условия]:<br />
<br />
* В {{path|/etc/hasher-priv/system}} нужно добавить <tt>/dev/kvm</tt> в <tt>allowed_devices=</tt>, например:<br />
allowed_mountpoints=/proc,/dev/pts,/dev/shm<br />
allowed_devices=/dev/kvm<br />
<br />
* В {{path|~/.hasher/config}} добавить <tt>/dev/kvm</tt> в <tt>known_mountpoints=</tt>, например:<br />
known_mountpoints=/proc,/dev/pts,/dev/kvm<br />
<br />
* Если нужно зайти в <tt>hasher</tt> интерактивно, то добавляется третье условие — при запуске <tt>hsh-shell</tt> нужно передать <tt>/dev/kvm</tt> в ключ <code>--mountpoints=</code>, пример:<br />
$ hsh-shell --mountpoints=/proc,/dev/kvm<br />
<br />
== В рабочей системе некая библиотека находится, а в хэшере -- нет, хотя она лежит в одном и том же месте ==<br />
<br />
Q[https://lists.altlinux.org/pipermail/devel/2018-April/204171.html]:<blockquote><br />
<br />
/usr/lib64/ghc-7.10.1/bin/ghc: error while loading shared libraries: libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so: cannot open shared object file: No such file or directory<br />
<br />
Получается, что в рабочей системе эта библиотека находится, а в хэшере --- нет. Притом она и там и там лежит в одном и том же месте:</blockquote><br />
<br />
$ ls /usr/lib64/ghc-7.10.1/haske_IlDhIe25uAn0WJY379Nu1M/lib*<br />
/usr/lib64/ghc-7.10.1/haske_IlDhIe25uAn0WJY379Nu1M/libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M.a<br />
/usr/lib64/ghc-7.10.1/haske_IlDhIe25uAn0WJY379Nu1M/libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so<br />
/usr/lib64/ghc-7.10.1/haske_IlDhIe25uAn0WJY379Nu1M/libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M_p.a<br />
<br />
<br />
A: Это может быть связано с тем, что не смонтирован {{path|/proc}}, а там в <code>RPATH</code>/<code>RUNPATH</code> в этих elf-ах используется <code>$ORIGIN</code> (см {{cmd|man ld-linux.so}}). Чтобы узнать место, где выполняемый elf лежал, {{prg|ld-linux}} как-то там смотрит <br />
в {{path|/proc/}}, иначе работает так, как будто бы в текущей директории надо искать (и далее по стандартным путям).<br />
<br />
Натыкались на такое с {{prg|ghc}} и, вероятно, то же самое происходит с {{prg|java}} (в т.ч {{prg|closure}}), из-за этого при сборке [[Hasher/Руководство#cite_note-4|приходится]] обязательно [[Hasher/Руководство#Монтирование /proc|{{path|/proc}} монтировать]].<br />
<br />
== hsh не запускается: execve: /.host/entry: Exec format error ==<br />
<br />
Q. При запуске <tt>hsh</tt> выдаёт ошибку:<br />
hasher-priv: slave: chrootuid: execve: /.host/entry: Exec format error<br />
hsh-initroot: Failed to create RPM database.<br />
<br />
A. Убрать все из ~/.hasher, и перенастроить его при необходимости.<br />
<br />
== Hasher ругается: "Failed to deduce hasher config number from directory ownership" ==<br />
<br />
Q. При создании чистого окружения Hasher завершается с ошибкой Failed to deduce hasher config number from directory ownership<br />
<br />
A. Очистить кэш сборочницы, удалив в ~/hasher каталог "cache". Если не поможет, то и директории "repo" и "chroot" в ~/hasher.<br />
<br />
== /etc/resolv.conf в чруте оказывается пустым даже при share_network=1 ==<br />
<br />
Q. {{cmd|1 = share_network=1 hsh-shell}} оставляет {{path|/etc/resolv.conf}} пустым.<br />
<br />
A. <tt>share_network</tt> -- это опция {{pkg|hasher-priv}}, который не занимается редактированием resolv.conf.<br/><br />
В {{pkg|hasher}} с версии <tt>1.4.1-alt1</tt> можно установить переменную {{cmd|1 = install_resolver_configuration_files=1}}, которая регулирует то, будет ли {{cmd|hsh-initroot}} копировать эти конфигурационные файлы (<tt>/etc/host.conf, /etc/hosts, /etc/resolv.conf</tt>). Её нужно добавить в {{path|~/.hasher/config}}. Обратите внимание, что так же необходимо указывать <tt>--no-cache</tt>. Пример:<br />
<br />
$ hsh --initroot --no-cache<br />
$ share_network=1 hsh-shell<br />
<br />
Или более просто, без необходимости редактировать config:<br />
<br />
$ hsh-run --rooter -- sh -c "echo nameserver 195.208.4.1 > /etc/resolv.conf"<br />
$ share_network=1 hsh-shell<br />
<br />
{{Category navigation|title=hasher|category=hasher|sortkey={{SUBPAGENAME}}}}<br />
{{Category navigation|title=FAQ|category=FAQ|sortkey={{SUBPAGENAME}}}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Hasher/FAQ&diff=60078
Hasher/FAQ
2022-04-20T08:52:39Z
<p>217.15.195.17: /* Hasher ругается: "Failed to deduce hasher config number from directory ownership" */</p>
<hr />
<div>== При запуске <tt>hsh</tt> я получаю ошибку: <code>hsh-mkchroot: cannot access getugid1 helper</code> ==<br />
<br />
A: [[Руководство по hasher#Добавление пользователя|Добавьте себя в hasher]].<br />
<br />
== Я добавил себя в <tt>hasher</tt>, но всё равно получаю ошибку <code>hsh: /usr/libexec/hasher-priv/getconf.sh: cannot access getconf helper</code> ==<br />
<br />
A: Перелогиньтесь — <tt>hasher-useradd</tt> добавляет пользователя в новые группы.<br />
<br />
== В моём <tt>hasher</tt> собираются пакеты со странной архитектурой, которые не ставятся ==<br />
<br />
A: [[Руководство по hasher#Архитектура пакетов|Явно укажите архитектуру сборки]].<br />
<br />
== В конце сборки в <tt>hasher</tt> выдаются ошибки вида <code>some-packet.src.rpm: wrong PACKAGER</code> ==<br />
<br />
Q: В конце сборки в <tt>hasher</tt> выдаются ошибки вида<br />
some-packet.src.rpm: wrong PACKAGER: Automated package hasher <hasher@localhost><br />
<br />
A1: Эти ошибки выдаются утилитой [[sisyphus_check]], проверяющей соответствие пакетов правилам репозитория [[Sisyphus]]. Исправьте ошибки в spec-файле (обычно добавлением корректного тега <tt>Packager</tt>).<br />
<br />
В частности, отсутствие тега <tt>Packager</tt> в spec-файле обычно (если не сделаны настройки, описанные в ответах ниже) приводит к такому результату (потому что в собранном пакете в качестве <tt>Packager</tt> будет некое значение по умолчанию).<br />
<br />
Однако, если такой пакет без тега <tt>Packager</tt> будет собираться в [[girar]] (например, том, который работает на [[git.alt]]), то эта проверка будет успешно пройдена, потому что[http://lists.altlinux.org/pipermail/devel/2009-February/167112.html]: "girar builder, собирая пакет из подписанного git-тэга, указывает в качестве packager'а по умолчанию имя подписавшего git-тэг, поэтому, если поле Packager в спек-файле отсутствует, packager'ом собранного пакета окажется тот, кто подписал git-тэг." По правилам ALT это повлечёт назначение ответственным за пакет (maintainer'ом) нового packager'а (где это записано? так ли это?). Возможно, это не то, чего Вы хотели бы.<br />
<br />
A2: Если пакет не предназначен для Sisyphus и выдаваемые ошибки связаны не с техническими проблемами в пакете, а с невыполнением политик репозитория (например, ограничение на тэг <tt>Packager</tt> и на PGP-подпись; возможно, будет интересна {{altbug|15376}}) — [[Руководство по hasher#Отключение проверок sisyphus_check|отключите часть проверок <tt>sisyphus_check</tt>]]; [http://lists.altlinux.org/pipermail/devel-newbies/2012-September/000836.html можно добавить] в {{path|~/.hasher/config}}:<br />
no_sisyphus_check="packager,buildhost,gpg,changelog"<br />
<br />
A3: В конфигурационный файл .hasher/config можно добавить поле packager (если есть альтовский логин):<br />
packager="Your Name <login@altlinux.org>"<br />
<br />
или с той же целью поступить как написано в [[Сборка пакета с нуля#Окружение RPM]]:<br />
<br />
Создайте файл {{path|~/.rpmmacros}} следующего содержания (конечно, заменив ключ и имя мейнтейнера на свои):<br />
<br />
%packager Andrey Cherepanov <cas@altlinux.org><br />
%_gpg_name A424A3962331FDD2748BC8B34863C0F4A9EBF131<br />
<br />
а в {{path|~/.hasher/config}} добавьте универсальное <code>packager="$(rpm --eval %packager)"</code>.<br />
<br />
A4: У утилиты hsh есть ключик --packager, можно воспользоваться им:<br />
$ gear -v --hasher -- hsh --target=i586 --packager="Andrew Clark <andyc@altlinux.org>" ~/hasher<br />
<br />
A5: Если пакет собирать в локальном <tt>hasher</tt>-е и поле <tt>Packager</tt> содержит email не из домена altlinux, то возникнет схожая ошибка в модуле проверки changelog-а <tt>sisyphus_check</tt>. Так же как и с проверкой packager, можно добавить в no_sisyphus_check=changelog.<br />
<br />
== При запуске <tt>hsh</tt> я получаю ошибку <code>date: invalid date '1970-01-01 UTC none seconds'</code> ==<br />
<br />
Q: При запуске <tt>hsh</tt> я получаю ошибку<br />
date: invalid date '1970-01-01 UTC none seconds'<br />
<br />
A1: <tt>date</tt> тут на самом деле ни при чём. Это получается, когда в исходном файле <tt>src.rpm</tt> нет секции <tt>%changelog</tt>. Нужно обязательно написать хотя бы что-то вида:<br />
%changelog<br />
* Fri Jan 14 2022 Vasya Pupkin <vasya_pupkin@altlinux.org> 0.1.2-alt1<br />
- Initial build.<br />
Почта должна быть в домене altlinux.*, иначе всё равно будет вылезать ошибка "wrong packager in CHANGELOGNAME" - см. предыдущий вопрос.<br />
<br />
== При запуске <tt>hsh</tt> я получаю ошибку <code>hasher-priv: /path/to/workdir/chroot: prefix mismatch</code> ==<br />
<br />
Q: При запуске <tt>hsh</tt> я получаю ошибку<br />
hasher-priv: /path/to/workdir/chroot: prefix mismatch, working directory<br />
should start with one of directories listed in colon-separated prefix<br />
list (~:/tmp/.private)<br />
hsh-mkchroot: failed to make devices.<br />
<br />
A: По умолчанию <tt>hasher</tt> позволяет располагать свою рабочую директорию в <tt>$HOME</tt> пользователя или в <tt>/tmp/.private</tt>. Или измените место, где создаётся рабочая директория, или разрешите дополнительные директории с помощью ключа <tt>prefix</tt> в <tt>/etc/hasher-priv/system</tt> (общесистемно) или <tt>/etc/hasher-priv/user.d/<USER></tt> (для одного пользователя).<br />
<br />
== hsh не запускается, /.host/entry: No such file or directory ==<br />
<br />
Q: При запуске <tt>hsh</tt> выдаёт ошибку:<br />
hasher-priv: slave: chrootuid: execve: /.host/entry: No such file or directory<br />
hsh-initroot: Failed to create RPM database.<br />
<br />
A: Выключите все сменные носители в <tt>/etc/apt/sources.list</tt>, запустите <tt>apt-get update</tt><br />
и еще раз повторите запуск <tt>hsh</tt>.<br />
<br />
== mkimage останавливается и чего-то ждёт ==<br />
<br />
Q: Сборка дистрибутива останавливается на таких вот строчках:<br />
mki-cache: has started executing.<br />
mkimage: Processing 'copy-packages' ...<br />
mki-cache: has started executing.<br />
mki-expand-pkgs: has started executing. method=simple<br />
mki-copy-pkgs: has started executing.<br />
mkdir: created directory `.../profiles/main/.work/mki-copy-pkgs.verbose'<br />
<br />
A: Выключите все сменные носители в <tt>/etc/apt/sources.list</tt> (и <tt>sources.list.d/*.list</tt>), запустите <tt>apt-get update</tt><br />
и еще раз повторите запуск <tt>hsh</tt>.<br />
<br />
== При запуске <tt>hsh</tt> выдаёт ошибку: <code>hasher-priv: openpty: No such file or directory</code> ==<br />
<br />
A: Проверьте, что у вас смонтирован <tt>/dev/pts</tt> на хост-системе.<br />
<br />
== hsh не запускается: /dev/null: Permission denied ==<br />
<br />
Q: При запуске <tt>hsh</tt> выдаёт ошибку:<br />
fakeroot daemon: /dev/null: Permission denied<br />
fakeroot: error while starting the `faked' daemon.<br />
hsh-initroot: Failed to create RPM database.<br />
<br />
A: Проверьте, что файловая система, на которой располагается сборочный каталог, смонтирована ''без'' использования опции <tt>nodev</tt>, например:<br />
$ mount | grep /tmp<br />
tmpfs on /tmp type tmpfs (rw,nosuid,relatime,size=3145728k)<br />
<br />
== почему hasher перестал создавать хэши ({{path|base/*}}) для своего репозитория? ==<br />
<br />
A: потому что для некоторого ускорения сборки они [http://lists.altlinux.org/pipermail/devel/2009-December/178354.html упразднены] в пользу непосредственного сканирования каталога (<tt>rpm-dir</tt> вместо <tt>rpm</tt> в {{path|sources.list}}). Для создания хэшей при их публикации придётся запустить {{cmd|$hasher/aptbox/regenbasedir}} (или {{cmd|genbasedir --bloat}} совсем вручную).<br />
<br />
<div id="virus"></div><br />
== правда, что Hasher — это вирус под Linux? ==<br />
<br />
A: действительно, существует [http://en.wikipedia.org/wiki/Linux_malware#Viruses ELF-вирус] [http://vxheavens.com/lib/vhe02.html Linux.Hasher], но в отличие от него — наличие технических механизмов заражения и саморазмножения в обсуждаемом hasher не показано.<br />
<br />
== Как кешировать и не скачивать одно и то же по многу раз для сборки разных пакетов? ==<br />
<br />
Q: [http://lists.altlinux.org/pipermail/sisyphus/2008-June/331276.html Yury Aliaev]: "чтобы не скачивать одно и то же по многу раз для сборки разных пакетов, необходимо, чтобы скачанные пакеты где-то хранились и при следующем запуске брались уже из этого места. Опять-таки, если пакет в Сизифе более свежий, чем локально скачанный, то скачанный пакет должен обновиться на более свежий."<br />
<br />
A: Можно добавить от себя в конфигурацию apt-а для hasher особое место для кэша apt, которое не будет чиститься hsh; например, общесистемный /var/cache/apt/archives/ -- см. [[Hasher/Tips#Кэширование скачиваемых apt-ом пакетов]].<br />
<br />
== процесс виснет на этапе какой-то установки пакетов через apt ==<br />
<br />
Q: При запуске hsh с настройками apt по умолчанию (основанными на общесистемных /etc/apt/) процесс виснет на этапе какой-то установки пакетов через apt (при применении опции -v -- на сообщении "... пакеты будут установлены:" и список пакетов дальше).<br />
<br />
A: Может быть, в /etc/apt/sources.list, /etc/apt/sources.list.d/* есть источник-cdrom. (Например, у меня cdrom был прописан в /etc/apt/sources.list.d/sources.list -- я удалил этот файл, и больше hsh не зависает на этом этапе. Примечание: я запускаю вообще-то {{cmd|gear-hsh -v -- -v}}, а не чистый hsh.)<br />
<br />
Ответ найден благодаря сообщениям <br />
* [http://lists.altlinux.org/pipermail/devel/2007-June/140523.html "Оказалось, что в /etc/apt/sources.list.d/sources.list был прописан cdrom, и hasher просил его вставить"], <br />
* [http://lists.altlinux.org/pipermail/devel/2008-August/158438.html "&lt;apt&gt; спрашивает что же ему выбрать, а хешер ему не отвечает. --Вообще он этого делать не должен. Покажите вывод hsh -v в районе затыка. --Причина оказалась в том, что &lt;...&gt; apt пытался взять его с CDROM."]<br />
<br />
== как передать параметры сборки {{cmd|rpm}}, например, <tt>--enable</tt> или <tt>--without</tt>? ==<br />
<br />
A: <tt>--build-args</tt> для {{cmd|hsh}} или {{cmd|gear-hsh}}; при пересборке src.rpm также [http://lists.altlinux.org/pipermail/sisyphus/2005-April/277314.html следует] добавить <tt>--repackage-source</tt>:<br />
<br />
hsh --build-args "--enable static" --repackage-source нужный.src.rpm<br />
gear-hsh --build-args "--enable static"<br />
<br />
== «<tt>Пакет setup присутствует в базе данных, но не имеет доступной версии.</tt> […]» ==<br />
<br />
Q: отчего при работающем {{path|sources.list}} хэшер может жаловаться: «<tt>Пакет setup присутствует в базе данных, но не имеет доступной версии.</tt> […] <tt>E: Для пакета setup не найдено подходящего кандидата для установки</tt>»?<br />
<br />
A: [http://lists.altlinux.org/pipermail/community/2015-April/683972.html проверьте], нет ли забытого указания архитектуры по умолчанию в {{path|~/.hasher/config}} или {{path|~/.rpmrc}}.<br />
<br />
== как обеспечить попадание в hasher chroot именно нужного варианта {{pkg|branding-*-release}}? ==<br />
<br />
Q: как обеспечить попадание в hasher chroot именно нужного варианта {{pkg|branding-*-release}}? Получаю либо {{pkg|branding-sisyphus-server-light-release}}, либо конфликт запрошенного с ним:<br />
error: failed dependencies:<br />
branding-sisyphus-server-light-release conflicts<br />
with branding-altlinux-centaurus-release-7.0.5-alt1<br />
hsh-initroot: Failed to install build package list.<br />
<br />
A1: при сборке пакетов — посредством <tt>--pkg-build-list=+branding-altlinux-starterkit-release</tt><br />
<br />
A2: при сборке образов с помощью [[mkimage]] — заданием <tt>IMAGE_INIT_LIST=+branding-simply-linux-release</tt> (не требуется при использовании [[m-p|mkimage-profiles]]).<br />
<br />
A3: можно заставить {{pkg|apt}} [[Mkimage/Desktop/OldTroubles|указанием]] <tt>Dir::Etc::pkgpriorities</tt>, но это скорее ''ultima ratio''.<br />
<br />
== как установить пакет из файла в hasher chroot? ==<br />
<br />
Q: как установить пакет из файла в hasher chroot?<br />
$ hsh-install ./viber-4.2.2.6-2.rpm<br />
E: Невозможно найти пакет ./viber-4.2.2.6-2.rpm<br />
<br />
A: hsh-install [https://lists.altlinux.org/pipermail/sisyphus/2015-May/363778.html не любит] относительных путей к пакетам, указывайте полный.<br />
<br />
==Дополнительная деизоляция ради особых потребностей программ==<br />
<br />
=== Я собираю пакет, но он ломается из-за того, что в сборочной среде нет <tt>/proc</tt> ===<br />
<br />
A: [[Руководство по hasher#Монтирование /proc|Настройте монтирование /proc]].<br />
<br />
=== как включить доступ в сеть из hasher chroot? ===<br />
<br />
A: share_network=1 hsh-shell<br />
<br />
=== как запретить доступ в сеть из hasher chroot? ===<br />
<br />
A: например, сборка ведётся пользователем с логином username:<br />
iptables -A OUTPUT -o venet0 -m owner --uid-owner username_a -j REJECT --reject-with icmp-net-unreachable<br />
iptables -A OUTPUT -o venet0 -m owner --uid-owner username_b -j REJECT --reject-with icmp-net-unreachable<br />
<br />
=== есть ли споcоб запустить gui-шную программу внутри hasher? ===<br />
<br />
A: да,<br />
hsh --initroot-only ~/hasher<br />
hsh-install xauth "гуишная прога"<br />
hsh-run -Y "гуишная прога"<br />
<br />
=== как запустить в хэшере браузер? ===<br />
<br />
A: например, [http://lists.altlinux.org/pipermail/community/2015-July/684363.html так]:<br />
hsh --initroot /path/to/hasher<br />
hsh-install /path/to/hasher firefox fonts-otf-mozilla-fira xauth<br />
share_ipc=yes share_network=yes hsh-run -Y --mountpoints=/proc,/dev/shm /path/to/hasher -- firefox --no-remote $@<br />
<br />
В {{path|/etc/hasher-priv/system}} должно быть разрешено монтирование /proc и /dev/shm:<br />
<tt>allowed_mountpoints=/proc,/dev/shm</tt><br />
<br />
В {{path|/etc/hasher-priv/fstab}} должна быть смонтирована /dev/shm:<br />
<tt>tmpfs /dev/shm tmpfs defaults 0 0</tt><br />
<br />
=== Как запустить в хэшере qemu с поддержкой kvm? ===<br />
Это может быть полезно для для ускорения работы <tt>qemu</tt> при использованиии [[Hasher/vm-run|<tt>rpm-build-vm</tt>]] (<tt>vm-run</tt> в <tt>%check</tt>).<br />
<br />
'''A''': Помимо того, что в системе должен быть загружен соответствующий вашей архитектуре kvm модуль (например, kvm-intel), необходимо ещё выполнить следующие '''два''' [https://lists.altlinux.org/pipermail/devel/2019-October/208630.html условия]:<br />
<br />
* В {{path|/etc/hasher-priv/system}} нужно добавить <tt>/dev/kvm</tt> в <tt>allowed_devices=</tt>, например:<br />
allowed_mountpoints=/proc,/dev/pts,/dev/shm<br />
allowed_devices=/dev/kvm<br />
<br />
* В {{path|~/.hasher/config}} добавить <tt>/dev/kvm</tt> в <tt>known_mountpoints=</tt>, например:<br />
known_mountpoints=/proc,/dev/pts,/dev/kvm<br />
<br />
* Если нужно зайти в <tt>hasher</tt> интерактивно, то добавляется третье условие — при запуске <tt>hsh-shell</tt> нужно передать <tt>/dev/kvm</tt> в ключ <code>--mountpoints=</code>, пример:<br />
$ hsh-shell --mountpoints=/proc,/dev/kvm<br />
<br />
== В рабочей системе некая библиотека находится, а в хэшере -- нет, хотя она лежит в одном и том же месте ==<br />
<br />
Q[https://lists.altlinux.org/pipermail/devel/2018-April/204171.html]:<blockquote><br />
<br />
/usr/lib64/ghc-7.10.1/bin/ghc: error while loading shared libraries: libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so: cannot open shared object file: No such file or directory<br />
<br />
Получается, что в рабочей системе эта библиотека находится, а в хэшере --- нет. Притом она и там и там лежит в одном и том же месте:</blockquote><br />
<br />
$ ls /usr/lib64/ghc-7.10.1/haske_IlDhIe25uAn0WJY379Nu1M/lib*<br />
/usr/lib64/ghc-7.10.1/haske_IlDhIe25uAn0WJY379Nu1M/libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M.a<br />
/usr/lib64/ghc-7.10.1/haske_IlDhIe25uAn0WJY379Nu1M/libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so<br />
/usr/lib64/ghc-7.10.1/haske_IlDhIe25uAn0WJY379Nu1M/libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M_p.a<br />
<br />
<br />
A: Это может быть связано с тем, что не смонтирован {{path|/proc}}, а там в <code>RPATH</code>/<code>RUNPATH</code> в этих elf-ах используется <code>$ORIGIN</code> (см {{cmd|man ld-linux.so}}). Чтобы узнать место, где выполняемый elf лежал, {{prg|ld-linux}} как-то там смотрит <br />
в {{path|/proc/}}, иначе работает так, как будто бы в текущей директории надо искать (и далее по стандартным путям).<br />
<br />
Натыкались на такое с {{prg|ghc}} и, вероятно, то же самое происходит с {{prg|java}} (в т.ч {{prg|closure}}), из-за этого при сборке [[Hasher/Руководство#cite_note-4|приходится]] обязательно [[Hasher/Руководство#Монтирование /proc|{{path|/proc}} монтировать]].<br />
<br />
== hsh не запускается: execve: /.host/entry: Exec format error ==<br />
<br />
Q. При запуске <tt>hsh</tt> выдаёт ошибку:<br />
hasher-priv: slave: chrootuid: execve: /.host/entry: Exec format error<br />
hsh-initroot: Failed to create RPM database.<br />
<br />
A. Убрать все из ~/.hasher, и перенастроить его при необходимости.<br />
<br />
== Hasher ругается: "Failed to deduce hasher config number from directory ownership" ==<br />
<br />
Q. При создании чистого окружения Hasher завершается с ошибкой Failed to deduce hasher config number from directory ownership<br />
<br />
A. Очистить кэш сборочницы, удалив в ~/hasher каталог "cache". Если не поможет, то и repo с chroot.<br />
<br />
== /etc/resolv.conf в чруте оказывается пустым даже при share_network=1 ==<br />
<br />
Q. {{cmd|1 = share_network=1 hsh-shell}} оставляет {{path|/etc/resolv.conf}} пустым.<br />
<br />
A. <tt>share_network</tt> -- это опция {{pkg|hasher-priv}}, который не занимается редактированием resolv.conf.<br/><br />
В {{pkg|hasher}} с версии <tt>1.4.1-alt1</tt> можно установить переменную {{cmd|1 = install_resolver_configuration_files=1}}, которая регулирует то, будет ли {{cmd|hsh-initroot}} копировать эти конфигурационные файлы (<tt>/etc/host.conf, /etc/hosts, /etc/resolv.conf</tt>). Её нужно добавить в {{path|~/.hasher/config}}. Обратите внимание, что так же необходимо указывать <tt>--no-cache</tt>. Пример:<br />
<br />
$ hsh --initroot --no-cache<br />
$ share_network=1 hsh-shell<br />
<br />
Или более просто, без необходимости редактировать config:<br />
<br />
$ hsh-run --rooter -- sh -c "echo nameserver 195.208.4.1 > /etc/resolv.conf"<br />
$ share_network=1 hsh-shell<br />
<br />
{{Category navigation|title=hasher|category=hasher|sortkey={{SUBPAGENAME}}}}<br />
{{Category navigation|title=FAQ|category=FAQ|sortkey={{SUBPAGENAME}}}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%B0_%D1%81_%D0%BD%D1%83%D0%BB%D1%8F&diff=60052
Сборка пакета с нуля
2022-04-18T11:55:48Z
<p>217.15.195.17: /* Установка пакетов для сборки */</p>
<hr />
<div>{{Stub}}<br />
<br />
Данное руководство покажет, как правильно собрать пакет RPM в [[Sisyphus]] с нуля в инфраструктуре [[Gear]] и [[git.alt]], имея только исходный код пакета, и [[Join|права мейнтейнера]] на '''git.alt'''. В качестве примера опакетим [http://sourceforge.net/projects/kchildlock/ KChildlock], чтобы закрыть запрос на сборку в багзилле: [https://bugzilla.altlinux.org/25796 https://bugzilla.altlinux.org/25796].<br />
<br />
== Введение ==<br />
<br />
Для сборки пакетов подразумеваются следующие начальные условия:<br />
<br />
# У вас установлен дистрибутив ALT Linux;<br />
# Есть желание собрать пакет правильно, а не для единичного случая;<br />
# Вы носите гордое звание [[Руководство_начинающего_мейнтейнера_ALT_Linux_Team|«мейнтейнер ALT Linux Team»]], что подразумевает наличие электронных ключей и доступа к инфраструктуре [[git.alt]]<br />
<br />
Третий пункт необязателен для новичков, которые просто хотят собрать пакет правильно для себя.<br />
<br />
В ALT Linux используется формат пакетов [[RPM]], который представляет собой архив, содержащий архив с устанавливаемыми или собираемыми файлами и заголовок с метаинформацией (например, название, версия, группа и т.п.). Различают два вида пакетов RPM:<br />
<br />
* Пакет с исходным кодом (имеет расширение ''.src.rpm''). Такой пакет содержит архив (один или несколько) с исходным кодом, файл [[Spec]] (далее — просто '''спек''') и, возможно, разнообразные патчи и дополнения. Пакет src.rpm можно использовать только для сборки двоичных пакетов, но не установки. Сборка осуществляется командой:<pre>rpmbuild --rebuild package...src.rpm</pre><br />
<br />
* Собранный двоичный пакет (имеет расширение вида ''<архитектура>.rpm''). В качестве архитектуры может быть i586, x86_64 или noarch. Такие пакеты можно устанавливать командой <pre>rpm -Uvh package...rpm</pre><br />
<br />
Подробную информацию по структуре RPM и сборке с помощью команды rpm можно найти в [http://ftp.rpm.org/max-rpm/ Maximum RPM].<br />
<br />
Однако для сборки через rpmbuild возникают очевидные сложности:<br />
<br />
# Необходимо вручную удовлетворить сборочные зависимости для сборки (поставить компилятор, включаемые файлы, библиотеки). При большом количестве собираемых пакетов система засоряется.<br />
# Для сборки пакета нужно сформировать .src.rpm из файлов, разбросанных по разным каталогам (по умолчанию, это подкаталоги SOURCE, SPECS и подкаталоги для сборки в ~/RPM). <br />
# Файлы с исходным кодом должны лежать в упакованном виде, что делает трудоёмким процесс изготовления патчей.<br />
# На рабочей системе можно упустить необходимое и достаточное количество зависимостей.<br />
<br />
<br />
Чтобы избежать этих сложностей, в ALT Linux Team было придумано две технологии:<br />
<br />
* [[Hasher]] для сборки в изолированном окружении. В chroot ставится базовый комплект пакетов и пакеты, необходимые для сборки (поле BuildRequires в спеке). Если какой-то пакет для сборки не указан в спеке, то появится ошибка. Так обеспечивается чистота сборки. Обратной стороной является необходимость иметь доступ к репозиторию, так как пакеты ставятся при каждой сборке в Hasher.<br />
* [[Gear]] для сборки пакетов из репозитория Git. В этом случае все файлы лежат в распакованном виде и в src.rpm упаковываются по правилам, определённым в [http://docs.altlinux.org/manpages/gear-rules.5.html .gear/rules]. Это позволяет работать сразу с содержимым, быстро делать патчи, вести историю изменений и обмениваться изменениями при коллективной разработке.<br />
<br />
=== Установка пакетов для сборки ===<br />
<br />
Для сборки нам потребуются следующие компоненты:<br />
<br />
* Любой удобный текстовый редактор (наиболее удобными являются Vim и Emacs);<br />
* Система управления версиями [[Git]]<br />
* Сборочная среда [[Hasher]]<br />
* Инфраструктура [[Gear]]<br />
* Доступ к [[Branches|репозиторию пакетов]]<br />
<br />
Для этого [[Управление пакетами|настройте репозитории]] и установите пакеты build-environment и gear:<br />
<br />
apt-get install build-environment gear<br />
<br />
<br />
<br />
Будут установлены с зависимостями все необходимые пакеты для опакечивания и сборки<br />
N.B. К 2022 году пакет build-environment в репах отсутствует, похоже больше не нужен.<br />
<br />
== Настройка среды ==<br />
<br />
=== Окружение Git ===<br />
<br />
git config --global user.name 'Andrey Cherepanov'<br />
git config --global user.email 'cas@altlinux.org'<br />
git config --global user.signingkey 'A9EBF131'<br />
<br />
Измените в зависимости от ваших параметров. Третья команда задаёт идентификатор вашего GPG-ключа для подписи:<br />
<br />
[cas@cas ~]$ gpg --list-keys | grep -B 1 'Andrey Cherepanov'<br />
pub 1024D/A9EBF131 2007-03-13<br />
uid Andrey Cherepanov (ALT Linux Team) <cas@altlinux.ru><br />
<br />
или<br />
<br />
[cas@cas ~]$ gpg --list-secret-keys<br />
------------------------------<br />
sec 1024D/A9EBF131 2007-03-13<br />
uid Andrey Cherepanov (ALT Linux Team) <cas@altlinux.ru><br />
<br />
=== Окружение RPM ===<br />
<br />
Создайте файл ~/.rpmmacros следующего содержания (конечно, заменив ключ и имя мейнтейнера на свои):<br />
<br />
%packager Andrey Cherepanov <cas@altlinux.org><br />
%_gpg_name A424A3962331FDD2748BC8B34863C0F4A9EBF131<br />
<br />
В %_gpg_name указывается отпечаток ключа (а не краткий идентификатор, как для Git). Получить его можно командой:<br />
<br />
[cas@cas ~]$ LANG=C gpg --fingerprint A9EBF131 | grep 'fingerprint =' | tr -d ' ' | cut -d= -f2<br />
A424A3962331FDD2748BC8B34863C0F4A9EBF131<br />
или<br />
[cas@cas ~]$ gpg --fingerprint A9EBF131 | sed -n '/.*=/{s/.*=/%_gpg_name\t/;s/ //gp}'<br />
%_gpg_name A424A3962331FDD2748BC8B34863C0F4A9EBF131<br />
<br />
== Окружение Hasher ==<br />
<br />
Для начала создайте под правами root двух служебных пользователей для ''сборочницы'' (среды сборки Hasher): <br />
<br />
[cas@ham1 ~]$ su -<br />
Password: <br />
[root@ham1 ~]# hasher-useradd cas<br />
Adding user cas to group cas_a<br />
Adding user cas to group cas_b<br />
Adding user cas to group hashman<br />
<br />
Вместо «cas» нужно указать существующего пользователя на машине, где будет развёрнута сборочная среда.<br />
<br />
Далее для простейшей конфигурации Hasher потребуется создать каталог ~/.hasher со следующими файлами:<br />
<br />
'''~/.hasher/config'''<br />
<br />
USER=cas<br />
workdir="/tmp/.private/cas/"<br />
target=i586<br />
packager="`rpm --eval %packager`"<br />
apt_config="$HOME/.hasher/apt.conf"<br />
mount=/dev/pts,/proc<br />
<br />
Соответственно, USER должен быть такой же, как заведён в ''hasher-useradd'', target — указывать на архитектуру собираемых пакетов.<br />
<br />
== Подготовка репозитория Git ==<br />
<br />
Репозиторий Git создать очень просто. Для этого создадим каталог (имена пакетов лучше указывать в нижнем регистре, поэтому наш пакет для проекта будет называться '''kchildlock'''), перейдём в него и запустим '''git init''':<br />
<br />
mkdir kchildlock<br />
cd kchildlock<br />
git init .<br />
<br />
== Написание .gear/rules ==<br />
<br />
== Импорт исходного кода ==<br />
<br />
== Написание спека ==<br />
<br />
== Сборка в Hasher ==<br />
<br />
== Отправка в git.alt ==<br />
<br />
== Ссылки ==<br />
<br />
* [[Краткое руководство по сборке пакета]]<br />
* [http://uneex.ru/LecturesCMC/PackageMaintaining2009/Video Лекции Георгия Курячего] на данную тему<br />
** [http://esyr.name/video/uneex/uneex_09_12_16.ogv "Демонстрация сборки пакета"] (видео, ogv)<br />
* [[О стратегии сборки RPM пакетов]]<br />
{{Category navigation|title=Сборка пакетов|category=Сборка пакетов|sortkey={{SUBPAGENAME}}}}</div>
217.15.195.17
https://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_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5_%D0%B8_%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA%D1%83_OpenStack_%D0%B2_ALT_Linux_p8&diff=48714
Руководство по установке и запуску OpenStack в ALT Linux p8
2020-06-29T07:34:08Z
<p>217.15.195.17: </p>
<hr />
<div>{{Stub}}<br />
<br />
Инструкция по мотивам установки на Redhat: https://docs.openstack.org/newton/install-guide-rdo/<br />
<br />
Инструкция в разработке.<br />
<br />
== Минимальные требования к оборудованию ==<br />
<br />
* Процессорных ядер - одно;<br />
* Оперативная память от 4Gb;<br />
* Диск 20 Гб.<br />
<br />
* На машине с 2Gb RAM - сталкивался с нехваткой памяти и падением процессов. <br />
<br />
Пример установки с сетевым модулем (neutron) на управляющем узле (controller) <br />
<br />
Сетевые интерфейсы:<br />
<br />
<br />
* ens19 - интерфейс управляющей сети openstack (10.0.0.0/24)<br />
* ens20 - "provider interface" параметры в [[#Создание сети|этом руководстве]] используется диапазон 203.0.113.101-203.0.113.250, в сети 203.0.113.0/24, шлюз 203.0.113.1<br />
<br />
== Установка управляющего узла ==<br />
<br />
Добавляем на узле в /etc/hosts (не удаляйте хост 127.0.0.1)<br />
# Управляющий узел<br />
10.0.0.11 controller<br />
# Вычислительный узел<br />
10.0.0.31 compute1<br />
<br />
== Подготовка к установке == <br />
<br />
# apt-get update -y<br />
# apt-get dist-upgrade <br />
<br />
# Удаление firewalld<br />
apt-get remove firewalld<br />
<br />
Установка ПО<br />
# apt-get install python-module-pymysql openstack-nova chrony python-module-memcached python3-module-memcached python-module-pymemcache python3-module-pymemcache mariadb-server python-module-MySQLdb python-module-openstackclient openstack-glance python-module-glance python-module-glance_store python-module-glanceclient python-module-glanceclient python-module-glance_store python-module-glance openstack-glance openstack-nova-api openstack-nova-cells openstack-nova-cert openstack-nova-conductor openstack-nova-console openstack-nova-scheduler rabbitmq-server openstack-keystone apache2-mod_wsgi memcached openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge openstack-neutron-l3-agent openstack-neutron-dhcp-agent openstack-neutron-server openstack-neutron-metadata-agent openstack-dashboard spice-html5 openstack-nova-spicehtml5proxy mongo-server-mongod mongo-tools python-module-pymongo<br />
<br />
== Настройка времени ==<br />
в /etc/chrony.conf добавляем <br />
allow 10.0.0.0/24<br />
Если имеется настроенный свой NTP, заменяем "pool.ntp.org" на свой.<br />
pool pool.ntp.org iburst<br />
<br />
# systemctl enable chronyd.service<br />
Synchronizing state of chronyd.service with SysV service script with /lib/systemd/systemd-sysv-install.<br />
Executing: /lib/systemd/systemd-sysv-install enable chronyd<br />
# systemctl start chronyd.service<br />
<br />
<br />
=== Настройка sql сервера ===<br />
<br />
Комментируем строку "skip-networking" в /etc/my.cnf.d/server.cnf<br />
<br />
# cat > /etc/my.cnf.d/openstack.cnf<br />
[mysqld]<br />
bind-address = 10.0.0.11<br />
default-storage-engine = innodb<br />
innodb_file_per_table<br />
max_connections = 4096<br />
collation-server = utf8_general_ci<br />
character-set-server = utf8<br />
<br />
# systemctl enable mariadb<br />
# systemctl start mariadb<br />
<br />
задаем пароль администратора sql сервера root и удаляем тестовые таблички<br />
* пароль по умолчанию пустой "" (после ввода нового пароля, на все вопросы отвечать утвердительно)<br />
<br />
# mysql_secure_installation<br />
<br />
== Настройка сервера сообщений rabbitmq ==<br />
<br />
# systemctl enable rabbitmq.service<br />
# systemctl start rabbitmq<br />
<br />
Добавляем пользователя: <br />
# rabbitmqctl add_user openstack RABBIT_PASS<br />
# rabbitmqctl set_permissions openstack ".*" ".*" ".*"<br />
<br />
== Настройка memcached ==<br />
<br />
в файле /etc/sysconfig/memcached <br />
заменяем строчку LISTEN="127.0.0.1" на <br />
LISTEN="10.0.0.11"<br />
<br />
<br />
# systemctl enable memcached<br />
# systemctl start memcached<br />
<br />
== Настройка Keystone == <br />
<br />
Создаём базу данных и пользователя с паролем.<br />
# mysql -u root -p<br />
CREATE DATABASE keystone;<br />
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';<br />
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';<br />
<br />
Сохраняем оригинальный конфигурационный файл.<br />
# mv /etc/keystone/keystone.conf /etc/keystone/keystone.conf.orig<br />
<br />
<br />
# cat > /etc/keystone/keystone.conf <br />
[DEFAULT]<br />
admin_token = ADMIN_TOKEN<br />
[assignment]<br />
[auth]<br />
[cache]<br />
[catalog]<br />
[cors]<br />
[cors.subdomain]<br />
[credential]<br />
[database]<br />
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone<br />
[domain_config]<br />
[endpoint_filter]<br />
[endpoint_policy]<br />
[eventlet_server]<br />
[eventlet_server_ssl]<br />
[federation]<br />
[fernet_tokens]<br />
[identity]<br />
[identity_mapping]<br />
[kvs]<br />
[ldap]<br />
[matchmaker_redis]<br />
[memcache]<br />
[oauth1]<br />
[os_inherit]<br />
[oslo_messaging_amqp]<br />
[oslo_messaging_notifications]<br />
[oslo_messaging_rabbit]<br />
[oslo_middleware]<br />
[oslo_policy]<br />
[paste_deploy]<br />
[policy]<br />
[resource]<br />
[revoke]<br />
[role]<br />
[saml]<br />
[shadow_users]<br />
[signing]<br />
[ssl]<br />
[token]<br />
provider = fernet<br />
[tokenless_auth]<br />
[trust]<br />
<br />
<br />
Заполняем базу данных keystone<br />
<br />
# su -s /bin/sh -c "keystone-manage db_sync" keystone<br />
<br />
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone<br />
<br />
== Настраиваем apache2 для keystone ==<br />
убираем в файле /etc/httpd2/conf/sites-available/openstack-keystone.conf <br />
всё строчки c IfVersion (<br />
<IfVersion >= 2.4><br />
</IfVersion><br />
<br />
добавляем в активную конфигурацию keystone<br />
# a2ensite openstack-keystone<br />
<br />
Добавляем servername в конфигурацию.<br />
echo ServerName controller >/etc/httpd2/conf/sites-enabled/servername.conf <br />
<br />
systemctl enable httpd2.service<br />
systemctl start httpd2.service<br />
<br />
<br />
== Создание доменов, пользователей и ролей ==<br />
<br />
Для дальнейших работ рекомендуется создать пользователя. <br />
<br />
# adduser admin<br />
# su - admin<br />
<br />
cat >auth<br />
<br />
export OS_TOKEN=ADMIN_TOKEN<br />
export OS_URL=http://controller:35357/v3<br />
export OS_IDENTITY_API_VERSION=3<br />
<br />
=== Создаём пользователя demo ===<br />
# su - admin<br />
. auth<br />
<br />
openstack service create --name keystone --description "OpenStack Identity" identity<br />
<br />
Пароль для пользователя admin - ADMIN_PASS<br />
<br />
<br />
openstack endpoint create --region RegionOne identity public http://controller:5000/v3<br />
openstack endpoint create --region RegionOne identity internal http://controller:5000/v3<br />
openstack endpoint create --region RegionOne identity admin http://controller:35357/v3<br />
<br />
openstack domain create --description "Default Domain" default<br />
openstack project create --domain default --description "Admin Project" admin<br />
openstack user create --domain default --password '''ADMIN_PASS''' admin<br />
openstack role create admin<br />
openstack role add --project admin --user admin admin<br />
<br />
openstack project create --domain default --description "Service Project" service<br />
openstack project create --domain default --description "Demo Project" demo<br />
openstack user create --domain default --password demo demo<br />
openstack role create user<br />
openstack role add --project demo --user demo user<br />
<br />
<br />
== Настройка окружения ==<br />
<br />
# systemctl restart httpd2.service<br />
<br />
<br />
# su - admin<br />
rm auth<br />
<br />
cat > admin-openrc <<EOF<br />
export OS_PROJECT_DOMAIN_NAME=Default<br />
export OS_USER_DOMAIN_NAME=Default<br />
export OS_PROJECT_NAME=admin<br />
export OS_USERNAME=admin<br />
export OS_PASSWORD=ADMIN_PASS<br />
export OS_AUTH_URL=http://controller:35357/v3<br />
export OS_IDENTITY_API_VERSION=3<br />
export OS_IMAGE_API_VERSION=2<br />
EOF<br />
<br />
cat > demo-openrc <<EOF<br />
export OS_PROJECT_DOMAIN_NAME=Default<br />
export OS_USER_DOMAIN_NAME=Default<br />
export OS_PROJECT_NAME=demo<br />
export OS_USERNAME=demo<br />
export OS_PASSWORD=demo<br />
export OS_AUTH_URL=http://controller:5000/v3<br />
export OS_IDENTITY_API_VERSION=3<br />
export OS_IMAGE_API_VERSION=2<br />
EOF<br />
=== Проверка окружения ===<br />
<br />
su - admin<br />
. admin-openrc<br />
openstack token issue<br />
<br />
Должно выдать что-то вроде такого: <br />
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+<br />
| Field | Value <br />
|<br />
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+<br />
| expires | 2017-05-16T15:48:13.101936Z <br />
|<br />
| id | gAAAAABZGxEtWlJ0eEGve9Y1VvIRk-wQtZN128A92YPFb5iuTJuo2O7G6Gd9IYdnyPZP6xAXDmT2VzIVbuhvOKQi9bItygi2fWRTw7byAZZdKIvR3mAHpsZyLPpS61hM2ydQLsf6g57xhMKy5y1Fw4Z3uXPabK27dZi1aTslIQZB4RA4Q9WZYWM |<br />
| project_id | d22531fa71e849078c44bb1f00117d87 <br />
|<br />
| user_id | 7be0608abb9641c5bd8d9f7a3bf519cb <br />
|<br />
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+<br />
<br />
== Настройка сервиса glance ==<br />
<br />
mysql -u root -p<br />
CREATE DATABASE glance;<br />
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';<br />
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';<br />
<br />
su - admin<br />
. admin-openrc<br />
<br />
Задаем пароль сервису glance<br />
<br />
openstack user create --domain default --password GLANCE_PASS glance<br />
openstack role add --project service --user glance admin<br />
openstack service create --name glance --description "OpenStack Image" image<br />
openstack endpoint create --region RegionOne image public http://controller:9292<br />
openstack endpoint create --region RegionOne image internal http://controller:9292<br />
openstack endpoint create --region RegionOne image admin http://controller:9292<br />
<br />
настраиваем конфиг:<br />
<br />
cd /etc/glance/<br />
mv glance-api.conf glance-api.conf_orig<br />
cat >glance-api.conf <<EOF<br />
[DEFAULT]<br />
[cors]<br />
[cors.subdomain]<br />
[database]<br />
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance<br />
[glance_store]<br />
stores = file,http<br />
default_store = file<br />
filesystem_store_datadir = /var/lib/glance/images/<br />
[image_format]<br />
[keystone_authtoken]<br />
auth_uri = http://controller:5000<br />
auth_url = http://controller:35357<br />
memcached_servers = controller:11211<br />
auth_type = password<br />
project_domain_name = default<br />
user_domain_name = default<br />
project_name = service<br />
username = glance<br />
password = GLANCE_PASS<br />
[matchmaker_redis]<br />
[oslo_concurrency]<br />
[oslo_messaging_amqp]<br />
[oslo_messaging_notifications]<br />
[oslo_messaging_rabbit]<br />
[oslo_policy]<br />
[paste_deploy]<br />
flavor = keystone<br />
[profiler]<br />
[store_type_location_strategy]<br />
[task]<br />
[taskflow_executor]<br />
EOF<br />
<br />
<br />
<br />
mv /etc/glance/glance-registry.conf /etc/glance/glance-registry.conf.orig<br />
cat > /etc/glance/glance-registry.conf <<EOF<br />
[DEFAULT]<br />
[database]<br />
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance<br />
[glance_store]<br />
[keystone_authtoken]<br />
auth_uri = http://controller:5000<br />
auth_url = http://controller:35357<br />
memcached_servers = controller:11211<br />
auth_type = password<br />
project_domain_name = default<br />
user_domain_name = default<br />
project_name = service<br />
username = glance<br />
password = GLANCE_PASS<br />
[matchmaker_redis]<br />
[oslo_messaging_amqp]<br />
[oslo_messaging_notifications]<br />
[oslo_messaging_rabbit]<br />
[oslo_policy]<br />
[paste_deploy]<br />
flavor = keystone<br />
[profiler]<br />
EOF<br />
<br />
# su -s /bin/sh -c "glance-manage db_sync" glance<br />
systemctl enable openstack-glance-api.service openstack-glance-registry.service<br />
systemctl start openstack-glance-api.service openstack-glance-registry.service <br />
=== Проверка ===<br />
su - admin<br />
$ . admin-openrc<br />
$ wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img <br />
<br />
Загружаем образ в glance.<br />
$ openstack image create "cirros" --file cirros-0.3.4-x86_64-disk.img --disk-format qcow2 --container-format bare --public <br />
<br />
Проверяем успешность загрузки<br />
$ '''openstack image list'''<br />
+--------------------------------------+--------+--------+<br />
| ID | Name | Status |<br />
+--------------------------------------+--------+--------+<br />
| f1008c6a-f86a-4c48-8332-2573321e4be1 | cirros | active |<br />
+--------------------------------------+--------+--------+<br />
<br />
== Установка вычислительного узла ==<br />
<br />
=== Начальная подготовка управляющего узла ===<br />
<br />
Создание БД.<br />
mysql -u root -p<br />
CREATE DATABASE nova_api;<br />
CREATE DATABASE nova;<br />
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';<br />
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';<br />
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';<br />
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';<br />
<br />
<br />
Создаём пользователя nova и указываем пароль, который потом будет использоваться при настройке.<br />
openstack user create --domain default --password NOVA_PASS nova<br />
создаём роль<br />
openstack role add --project service --user nova admin<br />
<br />
Создаём сервис nova<br />
openstack service create --name nova --description "OpenStack Compute" compute<br />
<br />
создаём API endpoint<br />
openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1/%\(tenant_id\)s<br />
openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1/%\(tenant_id\)s<br />
openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1/%\(tenant_id\)s<br />
<br />
Настройка nova <br />
cd /etc/nova/<br />
mv nova.conf nova.conf.orig<br />
<pre><br />
cat >nova.conf <<EOF<br />
[DEFAULT]<br />
log_dir = /var/log/nova<br />
state_path = /var/lib/nova<br />
connection_type = libvirt<br />
compute_driver = libvirt.LibvirtDriver<br />
image_service = nova.image.glance.GlanceImageService<br />
volume_api_class = nova.volume.cinder.API<br />
auth_strategy = keystone<br />
network_api_class = nova.network.neutronv2.api.API<br />
service_neutron_metadata_proxy = True<br />
security_group_api = neutron<br />
injected_network_template = /usr/share/nova/interfaces.template<br />
web=/usr/share/spice-html5<br />
enabled_apis = osapi_compute,metadata<br />
rpc_backend = rabbit<br />
auth_strategy = keystone<br />
my_ip = 10.0.0.11<br />
use_neutron = True<br />
firewall_driver = nova.virt.firewall.NoopFirewallDriver<br />
[api_database]<br />
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api<br />
[barbican]<br />
[cache]<br />
[cells]<br />
[cinder]<br />
[conductor]<br />
[cors]<br />
[cors.subdomain]<br />
[database]<br />
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova<br />
[ephemeral_storage_encryption]<br />
[glance]<br />
api_servers = http://controller:9292<br />
[guestfs]<br />
[hyperv]<br />
[image_file_url]<br />
[ironic]<br />
[keymgr]<br />
[keystone_authtoken]<br />
auth_uri = http://controller:5000<br />
auth_url = http://controller:35357<br />
memcached_servers = controller:11211<br />
auth_type = password<br />
project_domain_name = default<br />
user_domain_name = default<br />
project_name = service<br />
username = nova<br />
password = NOVA_PASS<br />
[libvirt]<br />
[matchmaker_redis]<br />
[metrics]<br />
[neutron]<br />
admin_username = neutron<br />
admin_password = %SERVICE_PASSWORD%<br />
admin_tenant_name = %SERVICE_TENANT_NAME%<br />
url = http://localhost:9696<br />
auth_strategy = keystone<br />
admin_auth_url = http://localhost:35357/v2.0<br />
url = http://controller:9696<br />
auth_url = http://controller:35357<br />
auth_type = password<br />
project_domain_name = default<br />
user_domain_name = default<br />
region_name = RegionOne<br />
project_name = service<br />
username = neutron<br />
password = NEUTRON_PASS<br />
service_metadata_proxy = True<br />
metadata_proxy_shared_secret = METADATA_SECRET<br />
[osapi_v21]<br />
[oslo_concurrency]<br />
lock_path = /var/lib/nova/tmp<br />
[oslo_messaging_amqp]<br />
[oslo_messaging_notifications]<br />
[oslo_messaging_rabbit]<br />
rabbit_host = controller<br />
rabbit_userid = openstack<br />
rabbit_password = RABBIT_PASS<br />
[oslo_middleware]<br />
[oslo_policy]<br />
[rdp]<br />
[serial_console]<br />
[spice]<br />
spicehtml5proxy_host = ::<br />
html5proxy_base_url = https://10.10.3.169:6082/spice_auto.html<br />
enabled = True<br />
keymap = en-us<br />
[ssl]<br />
[trusted_computing]<br />
[upgrade_levels]<br />
[vmware]<br />
[vnc]<br />
vncserver_listen = $my_ip<br />
vncserver_proxyclient_address = $my_ip<br />
[workarounds]<br />
[xenserver]<br />
EOF<br />
</pre><br />
<br />
<br />
<br />
заполнение БД nova <br />
su -s /bin/sh -c "nova-manage api_db sync" nova<br />
su -s /bin/sh -c "nova-manage db sync" nova<br />
<br />
Запуск nova сервиса<br />
# systemctl enable openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service<br />
# systemctl start openstack-nova-api.service openstack-nova-consoleauth.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service<br />
<br />
=== Установка вычислительной ноды ===<br />
Ставим пакеты<br />
apt-get update<br />
apt-get install openstack-nova-compute libvirt-daemon openstack-neutron-linuxbridge ebtables ipset kernel-modules-ipset-std-def<br />
apt-get dist-upgrade <br />
<br />
'''Поменяйте ip 10.0.0.xxx на ip своей вычислительной ноды'''<br />
<br />
cd /etc/nova<br />
mv nova.conf nova.conf.orig<br />
cat >nova.conf <<EOF<br />
[DEFAULT]<br />
log_dir = /var/log/nova<br />
state_path = /var/lib/nova<br />
connection_type = libvirt<br />
compute_driver = libvirt.LibvirtDriver<br />
image_service = nova.image.glance.GlanceImageService<br />
volume_api_class = nova.volume.cinder.API<br />
auth_strategy = keystone<br />
network_api_class = nova.network.neutronv2.api.API<br />
service_neutron_metadata_proxy = True<br />
security_group_api = neutron<br />
injected_network_template = /usr/share/nova/interfaces.template<br />
enabled_apis = osapi_compute,metadata<br />
compute_driver = libvirt.LibvirtDriver<br />
transport_url = rabbit://openstack:RABBIT_PASS@controller<br />
auth_strategy = keystone<br />
my_ip = '''10.0.0.31'''<br />
use_neutron = True<br />
firewall_driver = nova.virt.firewall.NoopFirewallDriver<br />
[api_database]<br />
[barbican]<br />
[cache]<br />
[cells]<br />
[cinder]<br />
[conductor]<br />
[cors]<br />
[cors.subdomain]<br />
[database]<br />
connection = mysql://nova:nova@localhost/nova<br />
[ephemeral_storage_encryption]<br />
[glance]<br />
api_servers = http://controller:9292<br />
[guestfs]<br />
[hyperv]<br />
[image_file_url]<br />
[ironic]<br />
[keymgr]<br />
[keystone_authtoken]<br />
auth_uri = http://controller:5000<br />
auth_url = http://controller:35357<br />
memcached_servers = controller:11211<br />
auth_type = password<br />
project_domain_name = Default<br />
user_domain_name = Default<br />
project_name = service<br />
username = nova<br />
password = NOVA_PASS<br />
[libvirt]<br />
virt_type = qemu<br />
[matchmaker_redis]<br />
[metrics]<br />
[neutron]<br />
url = http://controller:9696<br />
auth_url = http://controller:35357<br />
auth_type = password<br />
project_domain_name = Default<br />
user_domain_name = Default<br />
region_name = RegionOne<br />
project_name = service<br />
username = neutron<br />
password = NEUTRON_PASS<br />
[osapi_v21]<br />
[oslo_concurrency]<br />
lock_path = /var/run/nova<br />
[oslo_messaging_amqp]<br />
[oslo_messaging_notifications]<br />
[oslo_messaging_rabbit]<br />
[oslo_middleware]<br />
[oslo_policy]<br />
[rdp]<br />
[serial_console]<br />
[spice]<br />
spicehtml5proxy_host = ::<br />
html5proxy_base_url = http://controller:6082/spice_auto.html<br />
enabled = True<br />
agent_enabled = True<br />
server_listen = ::<br />
server_proxyclient_address = '''10.0.0.31'''<br />
keymap = en-us<br />
[ssl]<br />
[trusted_computing]<br />
[upgrade_levels]<br />
[vmware]<br />
[vnc]<br />
enabled = false<br />
[workarounds]<br />
[xenserver]<br />
EOF<br />
<br />
Запуск nova <br />
# systemctl enable libvirtd.service openstack-nova-compute.service <br />
# systemctl start libvirtd.service openstack-nova-compute.service<br />
<br />
=== Завершение установки ===<br />
Проверка на аппаратное ускорение.<br />
egrep -c '(vmx|svm)' /proc/cpuinfo<br />
Если вывод не 0 меняем в файле /etc/nova/nova.conf строчку<br />
virt_type = qemu<br />
на <br />
virt_type = kvm<br />
<br />
=== Проверка установки nova ===<br />
На управляющем узле, запускаем команды:<br />
'''# su - admin'''<br />
'''$ . admin-openrc'''<br />
'''$ openstack compute service list'''<br />
+----+------------------+-----------+----------+---------+-------+----------------------------+<br />
| Id | Binary | Host | Zone | Status | State | Updated At |<br />
+----+------------------+-----------+----------+---------+-------+----------------------------+<br />
| 1 | nova-consoleauth | conroller | internal | enabled | up | 2017-05-18T09:09:12.000000 |<br />
| 2 | nova-conductor | conroller | internal | enabled | up | 2017-05-18T09:09:14.000000 |<br />
| 3 | nova-scheduler | conroller | internal | enabled | up | 2017-05-18T09:09:19.000000 |<br />
| 6 | nova-compute | compute3 | nova | enabled | up | 2017-05-18T09:09:16.000000 |<br />
+----+------------------+-----------+----------+---------+-------+----------------------------+<br />
<br />
== Настройка сетевого сервиса neutron ==<br />
<br />
=== Настраиваем управляющий узел ===<br />
<br />
mysql -u root -p<br />
CREATE DATABASE neutron;<br />
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';<br />
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';<br />
<br />
su - admin<br />
. admin-openrc<br />
openstack user create --domain default --password NEUTRON_PASS neutron<br />
openstack role add --project service --user neutron admin<br />
openstack service create --name neutron --description "OpenStack Networking" network<br />
openstack endpoint create --region RegionOne network public http://controller:9696<br />
openstack endpoint create --region RegionOne network internal http://controller:9696<br />
openstack endpoint create --region RegionOne network admin http://controller:9696<br />
<br />
cd /etc/neutron<br />
mv neutron.conf neutron.conf.dist<br />
cat >neutron.conf <<EOF<br />
[DEFAULT]<br />
core_plugin = neutron.plugins.ml2.plugin.Ml2Plugin<br />
service_plugins = neutron.services.l3_router.l3_router_plugin.L3RouterPlugin<br />
state_path = /var/lib/neutron<br />
log_dir = /var/log/neutron<br />
core_plugin = ml2<br />
service_plugins =<br />
rpc_backend = rabbit<br />
notify_nova_on_port_status_changes = True<br />
notify_nova_on_port_data_changes = True<br />
[agent]<br />
root_helper = sudo neutron-rootwrap /etc/neutron/rootwrap.conf<br />
[cors]<br />
[cors.subdomain]<br />
[database]<br />
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron<br />
[keystone_authtoken]<br />
signing_dir = /var/cache/neutron/keystone-signing<br />
auth_uri = http://controller:5000<br />
auth_url = http://controller:35357<br />
memcached_servers = controller:11211<br />
auth_type = password<br />
project_domain_name = default<br />
user_domain_name = default<br />
project_name = service<br />
username = neutron<br />
password = NEUTRON_PASS<br />
[matchmaker_redis]<br />
[nova]<br />
auth_url = http://controller:35357<br />
auth_type = password<br />
project_domain_name = default<br />
user_domain_name = default<br />
region_name = RegionOne<br />
project_name = service<br />
username = nova<br />
password = NOVA_PASS<br />
[oslo_concurrency]<br />
lock_path = /var/lib/neutron/tmp<br />
[oslo_messaging_amqp]<br />
[oslo_messaging_notifications]<br />
[oslo_messaging_rabbit]<br />
rabbit_host = controller<br />
rabbit_userid = openstack<br />
rabbit_password = RABBIT_PASS<br />
[oslo_policy]<br />
[qos]<br />
[quotas]<br />
[ssl]<br />
EOF<br />
<br />
=== Настройка Modular Layer 2 (ML2) ===<br />
<br />
cd /etc/neutron/plugins/ml2/<br />
mv ml2_conf.ini ml2_conf.ini.ORIG<br />
cat > ml2_conf.ini <<EOF<br />
[DEFAULT]<br />
[ml2]<br />
type_drivers = flat,vlan<br />
tenant_network_types =<br />
mechanism_drivers = linuxbridge<br />
extension_drivers = port_security<br />
[ml2_type_flat]<br />
flat_networks = provider<br />
[ml2_type_geneve]<br />
[ml2_type_gre]<br />
[ml2_type_vlan]<br />
[ml2_type_vxlan]<br />
[securitygroup]<br />
enable_ipset = True<br />
EOF<br />
<br />
<br />
<br />
cd /etc/neutron/plugins/ml2/<br />
mv linuxbridge_agent.ini linuxbridge_agent.ini.ORIG<br />
cat >linuxbridge_agent.ini <<EOF<br />
[DEFAULT]<br />
[agent]<br />
[linux_bridge]<br />
physical_interface_mappings = provider:ens20<br />
[securitygroup]<br />
enable_security_group = True<br />
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver<br />
[vxlan]<br />
enable_vxlan = False<br />
EOF<br />
<br />
=== Настройка DHCP агента ===<br />
cd /etc/neutron<br />
mv dhcp_agent.ini dhcp_agent.ini_ORIG<br />
cat >dhcp_agent.ini <<EOF<br />
[DEFAULT]<br />
dhcp_delete_namespaces = True<br />
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver<br />
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq<br />
enable_isolated_metadata = True<br />
[AGENT]<br />
EOF<br />
<br />
=== Наполнение базы neutron ===<br />
<br />
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini<br />
<br />
su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" <br />
<br />
systemctl restart openstack-nova-api.service<br />
systemctl enable neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service<br />
systemctl start neutron-server.service neutron-linuxbridge-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-l3-agent.service<br />
<br />
== Настройка neutron на вычислительном узле ==<br />
<br />
cd /etc/neutron<br />
mv neutron.conf neutron.conf_ORIG<br />
cat >neutron.conf <<EOF<br />
[DEFAULT]<br />
rpc_backend = rabbit<br />
auth_strategy = keystone<br />
[agent]<br />
root_helper = sudo neutron-rootwrap /etc/neutron/rootwrap.conf<br />
[cors]<br />
[cors.subdomain]<br />
[database]<br />
[keystone_authtoken]<br />
auth_uri = http://controller:5000<br />
auth_url = http://controller:35357<br />
memcached_servers = controller:11211<br />
auth_type = password<br />
project_domain_name = default<br />
user_domain_name = default<br />
project_name = service<br />
username = neutron<br />
password = NEUTRON_PASS<br />
[matchmaker_redis]<br />
[nova]<br />
[oslo_concurrency]<br />
lock_path = /var/lib/neutron/tmp<br />
[oslo_messaging_amqp]<br />
[oslo_messaging_notifications]<br />
[oslo_messaging_rabbit]<br />
rabbit_host = controller<br />
rabbit_userid = openstack<br />
rabbit_password = RABBIT_PASS<br />
rabbit_host = controller<br />
rabbit_userid = openstack<br />
[oslo_policy]<br />
[qos]<br />
[quotas]<br />
[ssl]<br />
EOF<br />
<br />
<br />
cd /etc/neutron/plugins/ml2<br />
mv linuxbridge_agent.ini linuxbridge_agent.ini_ORIG<br />
cat >linuxbridge_agent.ini <<EOF<br />
[DEFAULT]<br />
[agent]<br />
[linux_bridge] <br />
physical_interface_mappings = provider:ens20<br />
[securitygroup]<br />
enable_security_group = True<br />
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver<br />
[vxlan]<br />
enable_vxlan = False<br />
EOF<br />
<br />
<br />
systemctl restart openstack-nova-compute.service<br />
systemctl enable neutron-linuxbridge-agent.service<br />
systemctl start neutron-linuxbridge-agent.service<br />
<br />
<br />
=== Проверка neutron ===<br />
<br />
На управляющем узле запускаем<br />
<br />
su - admin<br />
. admin-openrc<br />
neutron ext-list<br />
<pre>+---------------------------+-----------------------------------------------+<br />
| alias | name |<br />
+---------------------------+-----------------------------------------------+<br />
| default-subnetpools | Default Subnetpools |<br />
| network-ip-availability | Network IP Availability |<br />
| network_availability_zone | Network Availability Zone |<br />
| auto-allocated-topology | Auto Allocated Topology Services |<br />
| ext-gw-mode | Neutron L3 Configurable external gateway mode |<br />
| binding | Port Binding |<br />
| agent | agent |<br />
| subnet_allocation | Subnet Allocation |<br />
| l3_agent_scheduler | L3 Agent Scheduler |<br />
| tag | Tag support |<br />
| external-net | Neutron external network |<br />
| net-mtu | Network MTU |<br />
| availability_zone | Availability Zone |<br />
| quotas | Quota management support |<br />
| l3-ha | HA Router extension |<br />
| flavors | Neutron Service Flavors |<br />
| provider | Provider Network |<br />
| multi-provider | Multi Provider Network |<br />
| address-scope | Address scope |<br />
| extraroute | Neutron Extra Route |<br />
| timestamp_core | Time Stamp Fields addition for core resources |<br />
| router | Neutron L3 Router |<br />
| extra_dhcp_opt | Neutron Extra DHCP opts |<br />
| dns-integration | DNS Integration |<br />
| security-group | security-group |<br />
| dhcp_agent_scheduler | DHCP Agent Scheduler |<br />
| router_availability_zone | Router Availability Zone |<br />
| rbac-policies | RBAC Policies |<br />
| standard-attr-description | standard-attr-description |<br />
| port-security | Port Security |<br />
| allowed-address-pairs | Allowed Address Pairs |<br />
| dvr | Distributed Virtual Router |<br />
+---------------------------+-----------------------------------------------+<br />
</pre><br />
<pre><br />
neutron agent-list<br />
+--------------------------------------+--------------------+------------+-------+----------------+---------------------------+<br />
| id | agent_type | host | alive | admin_state_up | binary |<br />
+--------------------------------------+--------------------+------------+-------+----------------+---------------------------+<br />
| 08905043-5010-4b87-bba5-aedb1956e27a | Linux bridge agent | compute1 | :-) | True | neutron-linuxbridge-agent |<br />
| 27eee952-a748-467b-bf71-941e89846a92 | Linux bridge agent | controller | :-) | True | neutron-linuxbridge-agent |<br />
| dd3644c9-1a3a-435a-9282-eb306b4b0391 | DHCP agent | controller | :-) | True | neutron-dhcp-agent |<br />
| f49a4b81-afd6-4b3d-b923-66c8f0517099 | Metadata agent | controller | :-) | True | neutron-metadata-agent |<br />
+--------------------------------------+--------------------+------------+-------+----------------+---------------------------+<br />
</pre><br />
<br />
== Настройка web интерфейса ==<br />
<br />
Включаем spice консоль (необходимые настройки уже имеются в конфигах)<br />
systemctl enable openstack-nova-spicehtml5proxy.service<br />
systemctl start openstack-nova-spicehtml5proxy.service<br />
<br />
<br />
cd /etc/openstack-dashboard<br />
mv local_settings local_settings_ORIG<br />
<br />
cat >local_settings <<EOF<br />
# -*- coding: utf-8 -*-<br />
import os<br />
from django.utils.translation import ugettext_lazy as _<br />
from openstack_dashboard import exceptions<br />
from openstack_dashboard.settings import HORIZON_CONFIG<br />
DEBUG = False<br />
TEMPLATE_DEBUG = DEBUG<br />
OPENSTACK_HOST = "controller"<br />
ALLOWED_HOSTS = ['*', ]<br />
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'<br />
CACHES = {<br />
'default': {<br />
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',<br />
'LOCATION': 'controller:11211',<br />
}<br />
}<br />
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST<br />
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True<br />
OPENSTACK_API_VERSIONS = {<br />
"identity": 3,<br />
"image": 2,<br />
"volume": 2,<br />
}<br />
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "default"<br />
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"<br />
OPENSTACK_NEUTRON_NETWORK = {<br />
'enable_router': False,<br />
'enable_quotas': False,<br />
'enable_distributed_router': False,<br />
'enable_ha_router': False,<br />
'enable_lb': False,<br />
'enable_firewall': False,<br />
'enable_vpn': False,<br />
'enable_fip_topology_check': False,<br />
}<br />
TIME_ZONE = "Europe/Moscow"<br />
WEBROOT = '/dashboard/'<br />
LOCAL_PATH = '/tmp'<br />
SECRET_KEY='da8b52fb799a5319e747'<br />
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'<br />
OPENSTACK_KEYSTONE_BACKEND = {<br />
'name': 'native',<br />
'can_edit_user': True,<br />
'can_edit_group': True,<br />
'can_edit_project': True,<br />
'can_edit_domain': True,<br />
'can_edit_role': True,<br />
}<br />
OPENSTACK_HYPERVISOR_FEATURES = {<br />
'can_set_mount_point': False,<br />
'can_set_password': False,<br />
'requires_keypair': False,<br />
}<br />
OPENSTACK_CINDER_FEATURES = {<br />
'enable_backup': False,<br />
}<br />
OPENSTACK_HEAT_STACK = {<br />
'enable_user_pass': True,<br />
}<br />
IMAGE_CUSTOM_PROPERTY_TITLES = {<br />
"architecture": _("Architecture"),<br />
"image_state": _("Euca2ools state"),<br />
"project_id": _("Project ID"),<br />
"image_type": _("Image Type"),<br />
}<br />
IMAGE_RESERVED_CUSTOM_PROPERTIES = []<br />
API_RESULT_LIMIT = 1000<br />
API_RESULT_PAGE_SIZE = 20<br />
SWIFT_FILE_TRANSFER_CHUNK_SIZE = 512 * 1024<br />
DROPDOWN_MAX_ITEMS = 30<br />
TIME_ZONE = "UTC"<br />
POLICY_FILES_PATH = '/etc/openstack-dashboard'<br />
LOGGING = {<br />
'version': 1,<br />
# When set to True this will disable all logging except<br />
# for loggers specified in this configuration dictionary. Note that<br />
# if nothing is specified here and disable_existing_loggers is True,<br />
# django.db.backends will still log unless it is disabled explicitly.<br />
'disable_existing_loggers': False,<br />
'handlers': {<br />
'null': {<br />
'level': 'DEBUG',<br />
'class': 'logging.NullHandler',<br />
},<br />
'console': {<br />
# Set the level to "DEBUG" for verbose output logging.<br />
'level': 'INFO',<br />
'class': 'logging.StreamHandler',<br />
},<br />
},<br />
'loggers': {<br />
# Logging from django.db.backends is VERY verbose, send to null<br />
# by default.<br />
'django.db.backends': {<br />
'handlers': ['null'],<br />
'propagate': False,<br />
},<br />
'requests': {<br />
'handlers': ['null'],<br />
'propagate': False,<br />
},<br />
'horizon': {<br />
'handlers': ['console'],<br />
'level': 'DEBUG',<br />
'propagate': False,<br />
},<br />
'openstack_dashboard': {<br />
'handlers': ['console'],<br />
'level': 'DEBUG',<br />
'propagate': False,<br />
},<br />
'novaclient': {<br />
'handlers': ['console'],<br />
'level': 'DEBUG',<br />
'propagate': False,<br />
},<br />
'cinderclient': {<br />
'handlers': ['console'],<br />
'level': 'DEBUG',<br />
'propagate': False,<br />
},<br />
'keystoneclient': {<br />
'handlers': ['console'],<br />
'level': 'DEBUG',<br />
'propagate': False,<br />
},<br />
'glanceclient': {<br />
'handlers': ['console'],<br />
'level': 'DEBUG',<br />
'propagate': False,<br />
},<br />
'neutronclient': {<br />
'handlers': ['console'],<br />
'level': 'DEBUG',<br />
'propagate': False,<br />
},<br />
'heatclient': {<br />
'handlers': ['console'],<br />
'level': 'DEBUG',<br />
'propagate': False,<br />
},<br />
'ceilometerclient': {<br />
'handlers': ['console'],<br />
'level': 'DEBUG',<br />
'propagate': False,<br />
},<br />
'swiftclient': {<br />
'handlers': ['console'],<br />
'level': 'DEBUG',<br />
'propagate': False,<br />
},<br />
'openstack_auth': {<br />
'handlers': ['console'],<br />
'level': 'DEBUG',<br />
'propagate': False,<br />
},<br />
'nose.plugins.manager': {<br />
'handlers': ['console'],<br />
'level': 'DEBUG',<br />
'propagate': False,<br />
},<br />
'django': {<br />
'handlers': ['console'],<br />
'level': 'DEBUG',<br />
'propagate': False,<br />
},<br />
'iso8601': {<br />
'handlers': ['null'],<br />
'propagate': False,<br />
},<br />
'scss': {<br />
'handlers': ['null'],<br />
'propagate': False,<br />
},<br />
},<br />
}<br />
SECURITY_GROUP_RULES = {<br />
'all_tcp': {<br />
'name': _('All TCP'),<br />
'ip_protocol': 'tcp',<br />
'from_port': '1',<br />
'to_port': '65535',<br />
},<br />
'all_udp': {<br />
'name': _('All UDP'),<br />
'ip_protocol': 'udp',<br />
'from_port': '1',<br />
'to_port': '65535',<br />
},<br />
'all_icmp': {<br />
'name': _('All ICMP'),<br />
'ip_protocol': 'icmp',<br />
'from_port': '-1',<br />
'to_port': '-1',<br />
},<br />
'ssh': {<br />
'name': 'SSH',<br />
'ip_protocol': 'tcp',<br />
'from_port': '22',<br />
'to_port': '22',<br />
},<br />
'smtp': {<br />
'name': 'SMTP',<br />
'ip_protocol': 'tcp',<br />
'from_port': '25',<br />
'to_port': '25',<br />
},<br />
'dns': {<br />
'name': 'DNS',<br />
'ip_protocol': 'tcp',<br />
'from_port': '53',<br />
'to_port': '53',<br />
},<br />
'http': {<br />
'name': 'HTTP',<br />
'ip_protocol': 'tcp',<br />
'from_port': '80',<br />
'to_port': '80',<br />
},<br />
'pop3': {<br />
'name': 'POP3',<br />
'ip_protocol': 'tcp',<br />
'from_port': '110',<br />
'to_port': '110',<br />
},<br />
'imap': {<br />
'name': 'IMAP',<br />
'ip_protocol': 'tcp',<br />
'from_port': '143',<br />
'to_port': '143',<br />
},<br />
'ldap': {<br />
'name': 'LDAP',<br />
'ip_protocol': 'tcp',<br />
'from_port': '389',<br />
'to_port': '389',<br />
},<br />
'https': {<br />
'name': 'HTTPS',<br />
'ip_protocol': 'tcp',<br />
'from_port': '443',<br />
'to_port': '443',<br />
},<br />
'smtps': {<br />
'name': 'SMTPS',<br />
'ip_protocol': 'tcp',<br />
'from_port': '465',<br />
'to_port': '465',<br />
},<br />
'imaps': {<br />
'name': 'IMAPS',<br />
'ip_protocol': 'tcp',<br />
'from_port': '993',<br />
'to_port': '993',<br />
},<br />
'pop3s': {<br />
'name': 'POP3S',<br />
'ip_protocol': 'tcp',<br />
'from_port': '995',<br />
'to_port': '995',<br />
},<br />
'ms_sql': {<br />
'name': 'MS SQL',<br />
'ip_protocol': 'tcp',<br />
'from_port': '1433',<br />
'to_port': '1433',<br />
},<br />
'mysql': {<br />
'name': 'MYSQL',<br />
'ip_protocol': 'tcp',<br />
'from_port': '3306',<br />
'to_port': '3306',<br />
},<br />
'rdp': {<br />
'name': 'RDP',<br />
'ip_protocol': 'tcp',<br />
'from_port': '3389',<br />
'to_port': '3389',<br />
},<br />
}<br />
REST_API_REQUIRED_SETTINGS = ['OPENSTACK_HYPERVISOR_FEATURES',<br />
'LAUNCH_INSTANCE_DEFAULTS']<br />
EOF<br />
Перезапуск приложений <br />
a2ensite openstack-dashboard<br />
systemctl restart httpd2.service memcached.service<br />
<br />
== Запуск виртуальной машины ==<br />
<br />
<br />
=== Создание сети ===<br />
<pre><br />
su - admin<br />
. admin-openrc<br />
neutron net-create --shared --provider:physical_network provider --provider:network_type flat provider<br />
Created a new network:<br />
+---------------------------+--------------------------------------+<br />
| Field | Value |<br />
+---------------------------+--------------------------------------+<br />
| admin_state_up | True |<br />
| id | 0e62efcd-8cee-46c7-b163-d8df05c3c5ad |<br />
| mtu | 1500 |<br />
| name | provider |<br />
| port_security_enabled | True |<br />
| provider:network_type | flat |<br />
| provider:physical_network | provider |<br />
| provider:segmentation_id | |<br />
| router:external | False |<br />
| shared | True |<br />
| status | ACTIVE |<br />
| subnets | |<br />
| tenant_id | d84313397390425c8ed50b2f6e18d092 |<br />
+---------------------------+--------------------------------------+<br />
</pre><br />
<br />
Заменяем данные выделенные жирным на свой пул адресов, шлюз и DNS сервер.<br />
neutron subnet-create --name provider --allocation-pool '''start=203.0.113.101,end=203.0.113.250''' --dns-nameserver '''8.8.4.4''' --gateway '''203.0.113.1''' provider '''203.0.113.0/24'''<br />
<br />
<br />
su - admin<br />
. admin-openrc <br />
<br />
Создаём новый шаблон оборудования для тестового образа.<br />
openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano<br />
<br />
Многие образы облачных сервисов поддерживают авторизацию через ключи, поэтому создаём ключи и импортируем их.<br />
<br />
. demo-openrc<br />
ssh-keygen -q -N ""<br />
openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey <br />
Проверяем импорт: <br />
openstack keypair list<br />
+-------+-------------------------------------------------+<br />
| Name | Fingerprint |<br />
+-------+-------------------------------------------------+<br />
| mykey | be:68:58:f8:0a:6e:1e:c7:36:1c:8c:ff:c9:30:3f:60 |<br />
+-------+-------------------------------------------------+<br />
<br />
<br />
Создаём групповые политики (group rules)<br />
<br />
openstack security group rule create --proto icmp default<br />
openstack security group rule create --proto tcp --dst-port 22 default<br />
<br />
Проверяем, что образ машины '''cirros''', шаблон '''m1.nano''' и группа безопасности '''default''' создана.<br />
openstack flavor list<br />
openstack image list<br />
openstack security group list<br />
<br />
Отсюда нужно будет взять ID сети provider<br />
<pre>openstack network list<br />
+--------------------------------------+--------------+--------------------------------------+<br />
| ID | Name | Subnets |<br />
+--------------------------------------+--------------+--------------------------------------+<br />
| 4716ddfe-6e60-40e7-b2a8-42e57bf3c31c | selfservice | 2112d5eb-f9d6-45fd-906e-7cabd38b7c7c |<br />
| b5b6993c-ddf9-40e7-91d0-86806a42edb8 | provider | 310911f6-acf0-4a47-824e-3032916582ff |<br />
+--------------------------------------+--------------+--------------------------------------+<br />
</pre><br />
<br />
Создаём виртуальную машины<br />
<pre>openstack server create --flavor m1.tiny --image cirros --nic net-id='''PROVIDER_NET_ID''' --security-group default --key-name mykey provider-instance<br />
+--------------------------------------+-----------------------------------------------+<br />
| Property | Value |<br />
+--------------------------------------+-----------------------------------------------+<br />
| OS-DCF:diskConfig | MANUAL |<br />
| OS-EXT-AZ:availability_zone | nova |<br />
| OS-EXT-STS:power_state | 0 |<br />
| OS-EXT-STS:task_state | scheduling |<br />
| OS-EXT-STS:vm_state | building |<br />
| OS-SRV-USG:launched_at | - |<br />
| OS-SRV-USG:terminated_at | - |<br />
| accessIPv4 | |<br />
| accessIPv6 | |<br />
| adminPass | hdF4LMQqC5PB |<br />
| config_drive | |<br />
| created | 2015-09-17T21:58:18Z |<br />
| flavor | m1.tiny (1) |<br />
| hostId | |<br />
| id | 181c52ba-aebc-4c32-a97d-2e8e82e4eaaf |<br />
| image | cirros (38047887-61a7-41ea-9b49-27987d5e8bb9) |<br />
| key_name | mykey |<br />
| metadata | {} |<br />
| name | provider-instance |<br />
| os-extended-volumes:volumes_attached | [] |<br />
| progress | 0 |<br />
| security_groups | default |<br />
| status | BUILD |<br />
| tenant_id | f5b2ccaa75ac413591f12fcaa096aa5c |<br />
| updated | 2015-09-17T21:58:18Z |<br />
| user_id | 684286a9079845359882afc3aa5011fb |<br />
+--------------------------------------+-----------------------------------------------+<br />
</pre><br />
<br />
Проверяем статус виртуальной машины:<br />
<pre><br />
openstack server list<br />
+--------------------------------------+-------------------+--------+------------------------+------------+<br />
| ID | Name | Status | Networks | Image Name |<br />
+--------------------------------------+-------------------+--------+------------------------+------------+<br />
| 181c52ba-aebc-4c32-a97d-2e8e82e4eaaf | provider-instance | ACTIVE | provider=203.0.113.103 | cirros |<br />
+--------------------------------------+-------------------+--------+------------------------+------------+<br />
</pre><br />
<br />
Проверка доступности шлюза.<br />
<pre><br />
ping -c 4 203.0.113.1<br />
<br />
PING 203.0.113.1 (203.0.113.1) 56(84) bytes of data.<br />
64 bytes from 203.0.113.1: icmp_req=1 ttl=64 time=0.357 ms<br />
64 bytes from 203.0.113.1: icmp_req=2 ttl=64 time=0.473 ms<br />
64 bytes from 203.0.113.1: icmp_req=3 ttl=64 time=0.504 ms<br />
64 bytes from 203.0.113.1: icmp_req=4 ttl=64 time=0.470 ms<br />
<br />
--- 203.0.113.1 ping statistics ---<br />
4 packets transmitted, 4 received, 0% packet loss, time 2998ms<br />
rtt min/avg/max/mdev = 0.357/0.451/0.504/0.055 ms<br />
</pre><br />
Проверка доступности виртуальной машины.<br />
<pre><br />
ping -c 4 203.0.113.103<br />
<br />
PING 203.0.113.103 (203.0.113.103) 56(84) bytes of data.<br />
64 bytes from 203.0.113.103: icmp_req=1 ttl=63 time=3.18 ms<br />
64 bytes from 203.0.113.103: icmp_req=2 ttl=63 time=0.981 ms<br />
64 bytes from 203.0.113.103: icmp_req=3 ttl=63 time=1.06 ms<br />
64 bytes from 203.0.113.103: icmp_req=4 ttl=63 time=0.929 ms<br />
<br />
--- 203.0.113.103 ping statistics ---<br />
4 packets transmitted, 4 received, 0% packet loss, time 3002ms<br />
rtt min/avg/max/mdev = 0.929/1.539/3.183/0.951 ms<br />
</pre><br />
Зайдём на виртуальную машину.<br />
<br />
ssh cirros@203.0.113.103<br />
<br />
{{Category navigation|title=OpenStack|category=OpenStack|sortkey={{SUBPAGENAME}}}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=X2Go&diff=47514
X2Go
2020-01-22T06:27:44Z
<p>217.15.195.17: Добавлено: использование x2gobroker, запуск отдельного графического приложения, общий каталог, печать, звук.</p>
<hr />
<div>= Описание =<br />
<br />
X2Go — свободное программное обеспечение удалённого доступа по протоколу NX.<br />
<br />
Веб-сайт: http://x2go.org<br />
<br />
= Возможности =<br />
<br />
* удалённый доступ к рабочему столу и приложениям на каналах связи даже с узкой полосой пропускания;<br />
* возможность отключения и переподключения в сеанс даже из другого клиента;<br />
* перенаправление звука;<br />
* отсутствие ограничения на количество одновременно работающих пользователей;<br />
* шифрование трафика посредством SSH;<br />
* общие папки с клиента, доступные на сервере;<br />
* использование локального принтера на сервере;<br />
* простой выбор рабочей среды (KDE, Mate, GNOME);<br />
* возможность оказания удалённой технической поддержки;<br />
* запуск отдельного приложения.<br />
<br />
= Установка =<br />
<br />
На сервере:<br />
apt-get update<br />
apt-get install x2goserver x2goserver-printing cups-x2go<br />
systemctl enable x2goserver<br />
systemctl start x2goserver<br />
{{Attention | systemd, начиная с версии {{pkg|238-alt4}}, при разлогинивании по умолчанию завершает пользовательские процессы, поэтому пользовательские сессии будут завершаться даже из состояния Suspended.}}<br />
Чтобы этого не случалось, необходимо на сервере в файле {{path|/etc/systemd/logind.conf}} установить <tt>KillUserProcesses=no</tt> или добавить нужного пользователя в <tt>KillExcludeUsers</tt>.<br />
<br />
На клиенте:<br />
apt-get update<br />
apt-get install x2goclient<br />
<br />
= Использование x2gobroker =<br />
'''x2gobroker''' предоставляет профили сессий, что позволяет не определять их локально на каждом клиенте.<br />
<br />
Настройка '''x2gobroker'''.<br />
<br />
Установить пакеты:<br />
apt-get install x2gobroker x2gobroker-common x2gobroker-ssh x2gobroker-daemon x2gobroker-authservice<br />
<br />
Добавить запись о сервере в {{path|/etc/hosts}}:<br />
echo "server_ip x2goserver" >>/etc/hosts<br />
<br />
В файл {{path|/etc/x2go/broker/x2gobroker-sessionprofiles.conf}} добавить:<br />
[x2goserver-mate]<br />
name=Workstation 9 MATE<br />
host=x2goserver<br />
command=MATE<br />
usebrokerpass=true<br />
<br />
Запись '''[x2goserver-mate]''' - уникальный идентификатор сессии.<br />
<br />
Параметр '''name''' обозначает имя сессии, которое будет отображаться на клиенте, '''command''' - тип сессии (MATE, KDE и т.п.).<br />
<br />
Запустить необходимые сервисы:<br />
systemctl enable --now x2gobroker-authservice<br />
systemctl enable --now x2gobroker-daemon<br />
<br />
Настройка '''x2goserver'''.<br />
<br />
Установить пакеты:<br />
apt-get install x2goserver x2goserver-printing cups-x2go x2goserver-x2goagent x2goserver-xsession<br />
<br />
Добавить запись о брокере в {{path|/etc/hosts}}:<br />
echo "broker_ip x2gobroker" >>/etc/hosts<br />
<br />
Запустить сервис:<br />
systemctl enable --now x2goserver<br />
<br />
Настройка '''x2goclient'''.<br />
<br />
Установить пакет:<br />
apt-get install x2goclient<br />
<br />
Добавить запись о брокере в {{path|/etc/hosts}}:<br />
echo "broker_ip x2gobroker" >>/etc/hosts<br />
<br />
Подключение:<br />
x2goclient --broker-url=http://x2gobroker:8080/plain/<br />
<br />
Вводим логин/пароль пользователя, которым хотим подключиться к серверу и выбираем нужную сессию.<br />
<br />
= Запуск отдельного графического приложения =<br />
На брокере добавить конфигурацию новой сессии (файл {{path|/etc/x2go/broker/x2gobroker-sessionprofiles.conf}}):<br />
[x2goserver-firefox]<br />
name=Firefox<br />
host=x2goserver<br />
command=firefox<br />
usebrokerpass=true<br />
<br />
В данном случае в параметре '''command''' указывается название приложения, которое должно быть запущено вместо графической сессии.<br />
<br />
= Общий каталог =<br />
Для монтирования общего каталога необходимо, чтобы пользователь на сервере был добавлен в группу '''fuse'''.<br />
<br />
Для любого пользователя это можно настроить с помощью модуля '''pam_group'''.<br />
<br />
В файл {{path|/etc/security/group.conf}} добавляем строку:<br />
*;*;*;Al0000-2400;fuse<br />
<br />
В {{path|/etc/pam.d/sshd}} добавляем:<br />
auth required pam_group.so<br />
<br />
На клиенте выбираем нужную сессию, жмём на кнопку "Общий доступ к каталогам" - "Параметры" - "Общие каталоги".<br />
<br />
В строке "Путь" выбираем нужный каталог, жмём "Добавить". Ставим галочку "Соединять автоматически".<br />
<br />
Убедиться, что также выбран параметр "Перенаправлять SSH порт для туннельного подсоединения файловой системы через брандмауэры".<br />
<br />
Подключаемся к серверу. Общий каталог должен быть расположен по следующему пути: {{path|/home/<user>/media/disk}}.<br />
<br />
Если автомонтирование не сработало, то на клиенте в окне "Общий доступ к каталогам" выбрать каталог и нажать "Общий доступ".<br />
<br />
= Печать =<br />
На сервере запустить system-config-printer и добавить принтер '''"Generic CUPS-X2Go"''' (должны быть установлены пакеты x2goserver-printing cups-x2go).<br />
<br />
При печати документа выбрать принтер '''"Generic CUPS-X2Go"''', нажать печать. После этого на клиенте должно открыться окно выбора локального принтера для печати.<br />
<br />
= Звук =<br />
В настройках сессии на клиенте открыть вкладку "Медиа", поставить галочку "Включить звук" и выбрать "PulseAudio".<br />
<br />
= Отладка =<br />
1. Запуск клиента из консоли с параметром --debug:<br />
x2goclient --debug<br />
2. Просмотр в каталоге удалённого пользователя файлов:<br />
.x2go/C-*/session.log<br />
.xsession-x2go-*-errors<br />
<br />
= Решение проблем =<br />
1. При зависании подключения помогает пересоздание базы данных сеансов (под правами root):<br />
x2godbadmin --createdb<br />
<br />
= Сравнение с RX@Etersoft =<br />
* {{есть}} Полностью свободен<br />
* {{есть}} Актуальные, а не 4-х летней давности библиотеки NX<br />
* {{нет}} Не сертифицировано (RX есть в составе [[СПТ]] 7)<br />
* {{нет}} Не умеет пробрасывать смарт-карты<br />
<br />
[[Категория:Удалённый доступ]]<br />
[[Категория:Терминальный сервер]]<br />
{{Category navigation|title=Терминальный сервер|category=Терминальный сервер|sortkey={{SUBPAGENAME}}}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Branches/p9&diff=45810
Branches/p9
2019-08-19T15:49:53Z
<p>217.15.195.17: /* Репозитории */</p>
<hr />
<div>Девятая платформа.<br />
<br />
= Выпуск =<br />
<br />
<!--14 апреля 2016 года объявлено об отделении бранча p9 от Сизифа.<br />
<br />
[https://lists.altlinux.org/pipermail/devel/2016-April/201252.html Письмо о начале бранчевания Девятой платформы] --><br />
<div id="support"></div><br />
== Выпуск репозитория ==<br />
<br />
16 августа 2019 года<br />
<br />
= Поддержка =<br />
<br />
<div style="border-left:3px solid #2590B7;border-right:3px solid #2590B7;padding:7px;margin-top: 7px;margin-bottom: 7px;background-color:#E0EEF3;">В части обновлений по безопасности поддержка репозитория будет закончена '''31 декабря 2023''' года, но не ранее полугода после выпуска следующей платформы (p10). Сроки поддержки продуктов на основе Девятой платформы могут быть иными.</div><br />
<div id="repos"></div><br />
<br />
= Репозитории =<br />
<br />
Для 32-разрядных систем x86 <small>(IA32)</small>:<br />
<pre>rpm [p9] http://ftp.altlinux.org/pub/distributions/ALTLinux p9/branch/i586 classic<br />
rpm [p9] http://ftp.altlinux.org/pub/distributions/ALTLinux p9/branch/noarch classic</pre><br />
<br />
Для 64-разрядных систем x86 <small>(AMD64)</small>:<br />
<pre>rpm [p9] http://ftp.altlinux.org/pub/distributions/ALTLinux p9/branch/x86_64 classic<br />
rpm [p9] http://ftp.altlinux.org/pub/distributions/ALTLinux p9/branch/noarch classic</pre><br />
<br />
Для [[Biarch|запуска 32-разрядных приложений на 64-разрядных системах x86]]:<br />
<pre>rpm http://ftp.altlinux.org/pub/distributions/ALTLinux p9/branch/x86_64-i586 classic</pre><br />
<br />
Для [[ports/aarch64|aarch64]] <small>(64-разрядный ARMv8)</small>:<br />
<pre>rpm [p9] http://ftp.altlinux.org/pub/distributions/ALTLinux p9/branch/aarch64 classic<br />
rpm [p9] http://ftp.altlinux.org/pub/distributions/ALTLinux p9/branch/noarch classic</pre><br />
<br />
Для ppc64le <small>(64-разрядный PowerPC Little Endian)</small>:<br />
<pre>rpm [p9] http://ftp.altlinux.org/pub/distributions/ALTLinux p9/branch/ppc64le classic<br />
rpm [p9] http://ftp.altlinux.org/pub/distributions/ALTLinux p9/branch/noarch classic</pre><br />
<br />
Для [[Ports/mipsel|mipsel]] <small>(32-разрядный MIPS Little Endian)</small>:<br />
<pre>rpm [p9-mipsel] http://ftp.altlinux.org/pub/distributions/ALTLinux ports/mipsel/p9/mipsel classic<br />
rpm [p9-mipsel] http://ftp.altlinux.org/pub/distributions/ALTLinux ports/mipsel/p9/noarch classic</pre><br />
<br />
Для [[ports/arm|armh]] <small>(32-разрядный ARMv7hf)</small>:<br />
<pre>rpm [p9] http://ftp.altlinux.org/pub/distributions/ALTLinux ports/armh/p9/armh classic</pre><br />
<br />
<div id="mirrors"></div><br />
<br />
= Зеркала =<br />
<br />
* '''http://mirror.yandex.ru/altlinux/p9/branch'''<br />
* http://distrib-coffee.ipsl.jussieu.fr/pub/linux/altlinux/p9/branch<br />
<div id="upgrade"></div><br />
<br />
= Переход на Девятую платформу =<br />
{{main|update/p9}}<br />
<div id="updates"></div><br />
= Обновление пакетов Девятой платформы =<br />
<br />
<!--<br />
Пакеты в p9 попадают следующими способами:<br />
# approve заданий мейнтейнеров по их просьбе в p9<br />
<br />
При сборке пакета в ветку p9 [[Git.alt/Справочник#Сборка пакетов|сборочное задание]] должно быть ''одобрено'' службой котроля качества. В данный момент в этой роли выступает руководитель Отдела тестирования Сергей Новиков <sotor ats altlinux dots org>. Для получения одобрения необходимо сообщить ему номер задания.<br />
<br />
Задания, получившие статус EPERM (без опции test-only) попадают на тестирование автоматически. Статус тестирования можно уточнить у руководителя отдела тестирования. Срок тестирования задания составляет до 5 рабочих дней, но может быть увеличен в зависимости от загрузки отдела тестирования и сложности задания. При положительном решении задание одобряется и запускается на выполнение руководителем Отдела тестирования. При отрицательном решении мейтейнеру высылается письмо с результатами тестирования и причинами отказа.<br />
<br />
--><br />
<br />
Репозиторий обновляется раз в сутки примерно к 8:00 по московскому времени.<br />
<br />
<!--<br />
= Предложения пользователей =<br />
* Обсуждение на форуме: http://forum.altlinux.org/index.php/topic,32760.0.html<br />
--><br />
<br />
[[Категория:Девятая платформа]]<br />
<br />
{{Category navigation|title=Девятая платформа|category=Девятая платформа}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=%D0%94%D0%B5%D0%B2%D1%8F%D1%82%D0%B0%D1%8F_%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D0%B0&diff=45696
Девятая платформа
2019-08-15T09:08:03Z
<p>217.15.195.17: /* aarch64 */</p>
<hr />
<div>{{Stub}}<br />
<br />
<!-- ссылки на коллег:<br />
''[http://www.opennet.ru/opennews/art.shtml?num=51041 дебиановские замечания к выпуску] (opennet)''<br />
--><br />
<br />
[[Категория:Branches]]<br />
[[Категория:Миграция]]<br />
[[en:ALT Linux Wiki:NinthPlatform]]<br />
<br />
Девятая платформа p9 (Vaccinium), новая стабильная ветка репозиториев ALT, предназначена для разработки, тестирования, распространения, обновления и поддержки комплексных решений всех уровней — от встроенных устройств до серверов предприятий и датацентров, созданная и развиваемая в рамках проекта Sisyphus командой ALT ([[ALT Linux Team]]). Девятая платформа поддерживается [http://basealt.ru ООО «Базальт СПО»].<br />
<br />
__TOC__<br />
<div id="whatsnew"></div><br />
== Что нового? ==<br />
<br />
=== Поддержка новых архитектур ===<br />
<br />
Наряду с архитектурами x86, ALT p9 поддерживает '''6 новых аппаратных архитектур'''.<br />
<br />
==== Основные архитектуры (параллельная сборка наряду с i586 и x86_64) ====<br />
* <big>[https://ru.wikipedia.org/wiki/ARM_(архитектура)#ARMv8_и_набор_команд_ARM_64_бит aarch64]</big><br />
* <big>[https://ru.wikipedia.org/wiki/POWER8 ppc64le]</big><br />
<br />
==== Дополнительные архитектуры (отдельная «догоняющая» сборка) ====<br />
* <big>[https://ru.wikipedia.org/wiki/ARM_(архитектура)#Набор_команд_Thumb-2 armh]</big><br />
* <big>[https://ru.wikipedia.org/wiki/MIPS_(архитектура) mipsel]</big><br />
<br />
==== Закрытые архитектуры ====<br />
Отдельная сборка, [https://packages.altlinux.org/ru/search?arch=e2k&branch=p9 пакеты] не публикуются, доступны по официальному запросу в [http://basealt.ru/about/contacts ООО «Базальт СПО»]<br />
* <big>[[эльбрус/архитектура|e2k, e2kv4]]</big> <small>(4С, 8С/1С+)</small><br />
<br />
==== Прочие ====<br />
С 2018 года в нестабильном репозитории [[Sisyphus]] поддерживается архитектура [https://ru.wikipedia.org/wiki/RISC-V rv64gc (riscv64)], которая будет добавлена в p9 после появления пользовательских систем на ней.<br />
<br />
Подробнее о проверенных системах на новых архитектурах:<br />
<br />
====aarch64====<br />
APM Mustang (X-Gene1)<br />
<br />
GIGABYTE H270-T71 (Cavium/Marvell ThunderX)<br />
<br />
Huawei TaiShan 2280 (Kunpeng 916)<br />
<br />
Huawei TaiShan 2280V2 (Kunpeng 920)<br />
<br />
====ppc64le====<br />
<br />
====armh====<br />
<br />
====mipsel====<br />
<br />
====e2k и e2kv4====<br />
Поддерживаются серверы [http://ineum.ru/elbrus_804_1u «Эльбрус-804»], «Эльбрус-802» и [http://ineum.ru/server_elbrus-4.4 «Эльбрус-4.4»], а также рабочие станции [http://mcst.ru/elbrus_801-pc «Эльбрус 801-РС»], [http://www.mcst.ru/elbrus_101-pc «Эльбрус 101-РС»] и [http://mcst.ru/vk-elbrus-401pc «Эльбрус 401-РС»]. Проверена работоспособность на [http://akvamarin-npc.ru/notebook/ ноутбуке] и планшете с процессором [http://mcst.ru/elbrus-1c-plus «Эльбрус-1С+»]<ref>поддержка 3D-акселератора в составе 1С+ является экспериментальной, её стабилизация ожидается в будущих выпусках; штатно применяется 2D-драйвер modesetting</ref>.<br />
<br />
Для штатной [[эльбрус/загрузчик|установки]] требуется наличие DVD-привода (как правило, подключенного по USB) и [[write|запись]] ISO-образа на соответствующий носитель.<br />
<br />
===Изменения в rpm и apt===<br />
<br />
В девятой платформе произошли серьёзные изменения в <tt>apt</tt> и <tt>rpm</tt>. Существенно обновлён пакетный менеджер <tt>rpm</tt>: теперь основан на <tt>rpm</tt> 4.13.0.1. <br />
<br />
Изменения в <tt>apt</tt>:<br />
<br />
* появилась поддержка <code>rpmlib(FileDigests)</code>, что позволит устанавливать сторонние пакеты (Яндекс Браузер, Chrome и другие) без переупаковки;<br />
* добавлены команда <code>apt-get autoremove</code>, которая удаляет все автоматически установленные зависимости, которые более не нужны, и утилита <code>apt-mark</code>, с помощью которой можно обозначить пакет как установленный автоматически/вручную;<br />
* по умолчанию запрещена команда <code>apt-get upgrade</code>, как неподдерживаемая (можно включить через опцию в <tt>apt.conf</tt> или через аргумент команды);<br />
* добавлен транспорт <tt>https</tt>;<br />
* значение по умолчанию <tt>APT::Cache-Limit</tt> увеличено в 1,5 раза;<br />
* обновление встроенного командного интерпретатора на <tt>Lua</tt> 5.3;<br />
* многочисленные исправления и доработки.<br />
<br />
Также в пакет <tt>apt-scripts</tt> добавлена команда <code>apt-get dedup</code>, которая удаляет все непозволенные дубликаты пакетов.<br />
<br />
=== Центр приложений ===<br />
<br />
Показ и установка не пакетов, а приложений (с показом снимков экрана, рейтингами, локализованным описанием) — gnome-software и discover.<br />
<br />
=== Политика сборки LibreOffice ===<br />
<br />
Офисный пакет LibreOffice доступен в двух видах:<br />
# {{pkg|LibreOffice}} — версия Fresh (для экспериментаторов и продвинутых пользователей);<br />
# {{pkg|LibreOffice-still}} — версия Still (для корпоративных заказчиков);<br />
<br />
=== Единый пакет samba ===<br />
<br />
Пакет контроллера домена Active Directory {{pkg|samba-dc}} и обычная {{pkg|samba}} собираются из одного исходного пакета. Это означает, что контроллер домена можно установить на любой дистрибутив с любой средой.<br />
<br />
=== Поддержка актуальных алгоритмов ГОСТ ===<br />
<br />
* Новая версия OpenSSL 1.1 поддерживает отечественный криптографический алгоритм [https://ru.wikipedia.org/wiki/ГОСТ_Р_34.11-2012 ГОСТ Р 34.11-2012] с помощью пакета {{pkg|openssl-gost-engine}}. Подробнее: [[ГОСТ в OpenSSL]].<br />
* Также появился новый пакет {{pkg|gostsum}}, вычисляющий контрольную сумму по алгоритму [https://ru.wikipedia.org/wiki/ГОСТ_Р_34.11-2012 ГОСТ Р 34.11-2012]:<source lang="text" highlight="1">$ date | gost12sum<br />
dbdad0e2802c02d7f4cc03e27e24df2806d5d382b6a23a15ecb18f46cebcb2ae -</source><br />
<br />
== Версии подсистем и пакетов ==<br />
Репозитории Девятой платформы будут обновляться в течение срока поддержки. На момент официального анонса '''p9''' они содержат в том числе:<br />
<br />
{|class="standard"<br />
!ПО<br />
!Версия<br />
|-<br />
|Ядро Linux (std-def)||4.19.56<br />
|-<br />
|Ядро Linux (un-def)||5.1.21<br />
|-<br />
|Ядро Linux ([[OpenVZ|ovz-el7]])||3.10.0<br />
|-<br />
|[[systemd]]||242<br />
|-<br />
|GNU Libc||2.27<br />
|-<br />
|GCC||8.3.1<br />
|-<br />
|Python||2.7.16 и 3.7.3<br />
|-<br />
|Perl||5.28.1<br />
|-<br />
|[[Perl 6]]||2017.09<br />
|-<br />
|PHP||7.2.19<br />
|-<br />
|Ruby||2.5.5<br />
|-<br />
|Java||1.8.0.171 ({{pkg|java-1.8.0-openjdk}})<br />
|-<br />
|Mono||5.20.1.19<br />
|-<br />
|.NET Core||2.1.9<br />
|-<br />
|X.Org Server||1.20.4<br />
|-<br />
|Mesa||19.0.5<br />
|-<br />
|[[GNOME]]||3.32.2 <!-- по gnome-shell, спрашивал когда-то aris@ ради changelog регулярок // mike@ --><br />
|-<br />
|[[KDE|KF5/Plasma/KDE SC]]||5.59.0/5.16.2/19.04.2<br />
|-<br />
|[[MATE]]||1.22.1<br />
|-<br />
|[[Xfce]]||4.14<br />
|-<br />
|[[Enlightenment]]||0.22.4<br />
|-<br />
|Cinnamon||4.0.9<br />
|-<br />
|Firefox||66.0.5, {{pkg|firefox-esr}} 60.7.2<br />
|-<br />
|LibreOffice||6.2.4.2 {{pkg|LibreOffice-still}} 6.1.6.3<br />
|-<br />
|[[Samba]]||4.10.3 (с [[SambaDC|samba-dc]])<br />
|-<br />
|Bash||4.4.23<br />
|-<br />
|[[BIND]]||9.11.6<br />
|-<br />
|CUPS||2.2.11<br />
|-<br />
|DHCP||4.4.1<br />
|-<br />
|Apache httpd||2.4.39<br />
|-<br />
|nginx||1.14.2<br />
|-<br />
|MariaDB||10.3.15<br />
|-<br />
|PostgreSQL||11.4, 10.9 (обычная и для [[1C]])<br />
|-<br />
|Postfix||2.11.11<br />
|-<br />
|Dovecot||2.3.5<br />
|-<br />
|[[SOGo]]||4.0.7<br />
|-<br />
|OpenSSL||1.1.1b<br />
|-<br />
|GTK+||2.24.32 и 3.24.9<br />
|-<br />
|Qt||4.8.7 и 5.12.4<br />
|-<br />
|Tomcat||9.0.13<br />
|-<br />
|Wildfly (JBoss)||10.1.0<br />
|-<br />
|[[PVE|Proxmox]]||5.4.6<br />
|-<br />
|[[Kubernetes]]||1.14.1<br />
|-<br />
|[[OpenNebula]]||5.8.2<br />
|-<br />
|[[Ansible]]||2.7.10<br />
|-<br />
|[[Puppet]]||6.6.0<br />
|}<br />
<br />
Состав и версии других пакетов можно посмотреть на сайте [http://packages.altlinux.org/ru/p9/home/ packages.altlinux.org].<br />
<br />
<div id="starterkits"></div><br />
<br />
== Быстрое начало работы с репозиториями Девятой платформы ==<br />
<br />
===Starterkits===<br />
<br />
Многие пользователи, предпочитающие и умеющие самостоятельно определять состав системы и ее оформление, оценят возможность использовать для начала работы с новой платформой небольшие установочные образы с различными окружениями рабочего стола. Для реализации такого стиля работы с репозиториями Девятой платформы созданы и доступны образы комплектов входа (starter kits) для архитектур [http://nightly.altlinux.org/p9/release/ x86_64, i586], [http://nightly.altlinux.org/p9-aarch64/release/ aarch64], [http://nightly.altlinux.org/p9-armh/release/ armh], [http://nightly.altlinux.org/p9-mipsel/beta/ mipsel (beta)] (окружения рабочего стола Cinnamon, GNOME, '''IceWM''', KDE5, '''LXDE''', '''LXQt''', '''MATE''', WindowMaker, '''Xfce''', а также '''минимальный инсталятор (JeOS)''', серверный инсталятор и образ для использования с [[OpenStack]]; выделенные варианты доступны в сборках для всех поддерживаемых архитектур).<br />
<br />
Владельцам ВК «[[Эльбрус]]» доступны стартовые наборы Cinnamon, LXQt, MATE, Xfce для [[ports/e2k|e2k/e2kv4]].<br />
<br />
По сравнению с p8 варианты TDE и KDE4 исключены в связи с прекращением поддержки в репозитории; вариант WindowMaker убран как дублирующий GNUStep, где является по сути основой; вариант Enlightenment отложен для более тщательной [https://bugzilla.altlinux.org/show_bug.cgi?id=36913 проверки].<br />
<br />
Ассортимент образов входа в p9 расширяется с выпуском обновлений, которые поставлены в плановый квартальный режим (с надлежащим тестированием). Экспериментальные сборки бывают доступны [http://nightly.altlinux.org/p9/beta/ здесь] и в аналогичных подкаталогах для иных архитектур.<br />
<br />
Важно заметить, что '''образы для начала работы с p9 не являются дистрибутивами''', так как не содержат ни законченных решений, ни целостного оформления, но предоставляют лишь основу.<br />
<br />
{{main|starterkits}}<br />
<br />
===Официальные образы Docker===<br />
<br />
===Образы lxc/lxd===<br />
<br />
<div id="releases"></div><br />
<br />
== Дистрибутивные решения на Девятой платформе ==<br />
<br />
<br />
=== Другие ===<br />
Ведется разработка новых защищенных решений на Девятой платформе.<br />
<br />
== Скачать образы ==<br />
<br />
Доступны бета-версии дистрибутивов:<br />
* [[Альт Рабочая станция 9]];<br />
<!--* [http://basealt.ru/products/alt-server/ Альт Сервер];--><br />
* [http://basealt.ru/products/alt-education/ Альт Образование]; <!--[[образование]]?--><br />
* а также [[Starterkits/Download|стартовые наборы]].<br />
<br />
При перегрузке основного сервера пользуйтесь [http://mirror.yandex.ru/altlinux/p9/images/ яндекс-зеркалом].<br />
<br />
<!--<big>http://torrent.altlinux.org/</big> --><br />
<br />
== Обновление системы до Девятой платформы ==<br />
При переходе на Девятую платформу с установленной системы внимательно прочитайте [[Update/p9|рекомендации по обновлению]]. В случае затруднений не торопитесь, задайте вопрос в [http://lists.altlinux.org/mailman/listinfo/community/ списке рассылки] или на [http://forum.altlinux.org/ нашем форуме].<br />
<br />
== Известные проблемы ==<br />
<br />
= Пакетная база =<br />
{{:Branches/p9}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=%D0%94%D0%B5%D0%B2%D1%8F%D1%82%D0%B0%D1%8F_%D0%BF%D0%BB%D0%B0%D1%82%D1%84%D0%BE%D1%80%D0%BC%D0%B0&diff=45695
Девятая платформа
2019-08-15T09:07:22Z
<p>217.15.195.17: /* aarch64 */</p>
<hr />
<div>{{Stub}}<br />
<br />
<!-- ссылки на коллег:<br />
''[http://www.opennet.ru/opennews/art.shtml?num=51041 дебиановские замечания к выпуску] (opennet)''<br />
--><br />
<br />
[[Категория:Branches]]<br />
[[Категория:Миграция]]<br />
[[en:ALT Linux Wiki:NinthPlatform]]<br />
<br />
Девятая платформа p9 (Vaccinium), новая стабильная ветка репозиториев ALT, предназначена для разработки, тестирования, распространения, обновления и поддержки комплексных решений всех уровней — от встроенных устройств до серверов предприятий и датацентров, созданная и развиваемая в рамках проекта Sisyphus командой ALT ([[ALT Linux Team]]). Девятая платформа поддерживается [http://basealt.ru ООО «Базальт СПО»].<br />
<br />
__TOC__<br />
<div id="whatsnew"></div><br />
== Что нового? ==<br />
<br />
=== Поддержка новых архитектур ===<br />
<br />
Наряду с архитектурами x86, ALT p9 поддерживает '''6 новых аппаратных архитектур'''.<br />
<br />
==== Основные архитектуры (параллельная сборка наряду с i586 и x86_64) ====<br />
* <big>[https://ru.wikipedia.org/wiki/ARM_(архитектура)#ARMv8_и_набор_команд_ARM_64_бит aarch64]</big><br />
* <big>[https://ru.wikipedia.org/wiki/POWER8 ppc64le]</big><br />
<br />
==== Дополнительные архитектуры (отдельная «догоняющая» сборка) ====<br />
* <big>[https://ru.wikipedia.org/wiki/ARM_(архитектура)#Набор_команд_Thumb-2 armh]</big><br />
* <big>[https://ru.wikipedia.org/wiki/MIPS_(архитектура) mipsel]</big><br />
<br />
==== Закрытые архитектуры ====<br />
Отдельная сборка, [https://packages.altlinux.org/ru/search?arch=e2k&branch=p9 пакеты] не публикуются, доступны по официальному запросу в [http://basealt.ru/about/contacts ООО «Базальт СПО»]<br />
* <big>[[эльбрус/архитектура|e2k, e2kv4]]</big> <small>(4С, 8С/1С+)</small><br />
<br />
==== Прочие ====<br />
С 2018 года в нестабильном репозитории [[Sisyphus]] поддерживается архитектура [https://ru.wikipedia.org/wiki/RISC-V rv64gc (riscv64)], которая будет добавлена в p9 после появления пользовательских систем на ней.<br />
<br />
Подробнее о проверенных системах на новых архитектурах:<br />
<br />
====aarch64====<br />
APM Mustang (X-Gene1)<br />
GIGABYTE H270-T71 (Cavium/Marvell ThunderX)<br />
Huawei TaiShan 2280 (Kunpeng 916)<br />
Huawei TaiShan 2280V2 (Kunpeng 920)<br />
<br />
====ppc64le====<br />
<br />
====armh====<br />
<br />
====mipsel====<br />
<br />
====e2k и e2kv4====<br />
Поддерживаются серверы [http://ineum.ru/elbrus_804_1u «Эльбрус-804»], «Эльбрус-802» и [http://ineum.ru/server_elbrus-4.4 «Эльбрус-4.4»], а также рабочие станции [http://mcst.ru/elbrus_801-pc «Эльбрус 801-РС»], [http://www.mcst.ru/elbrus_101-pc «Эльбрус 101-РС»] и [http://mcst.ru/vk-elbrus-401pc «Эльбрус 401-РС»]. Проверена работоспособность на [http://akvamarin-npc.ru/notebook/ ноутбуке] и планшете с процессором [http://mcst.ru/elbrus-1c-plus «Эльбрус-1С+»]<ref>поддержка 3D-акселератора в составе 1С+ является экспериментальной, её стабилизация ожидается в будущих выпусках; штатно применяется 2D-драйвер modesetting</ref>.<br />
<br />
Для штатной [[эльбрус/загрузчик|установки]] требуется наличие DVD-привода (как правило, подключенного по USB) и [[write|запись]] ISO-образа на соответствующий носитель.<br />
<br />
===Изменения в rpm и apt===<br />
<br />
В девятой платформе произошли серьёзные изменения в <tt>apt</tt> и <tt>rpm</tt>. Существенно обновлён пакетный менеджер <tt>rpm</tt>: теперь основан на <tt>rpm</tt> 4.13.0.1. <br />
<br />
Изменения в <tt>apt</tt>:<br />
<br />
* появилась поддержка <code>rpmlib(FileDigests)</code>, что позволит устанавливать сторонние пакеты (Яндекс Браузер, Chrome и другие) без переупаковки;<br />
* добавлены команда <code>apt-get autoremove</code>, которая удаляет все автоматически установленные зависимости, которые более не нужны, и утилита <code>apt-mark</code>, с помощью которой можно обозначить пакет как установленный автоматически/вручную;<br />
* по умолчанию запрещена команда <code>apt-get upgrade</code>, как неподдерживаемая (можно включить через опцию в <tt>apt.conf</tt> или через аргумент команды);<br />
* добавлен транспорт <tt>https</tt>;<br />
* значение по умолчанию <tt>APT::Cache-Limit</tt> увеличено в 1,5 раза;<br />
* обновление встроенного командного интерпретатора на <tt>Lua</tt> 5.3;<br />
* многочисленные исправления и доработки.<br />
<br />
Также в пакет <tt>apt-scripts</tt> добавлена команда <code>apt-get dedup</code>, которая удаляет все непозволенные дубликаты пакетов.<br />
<br />
=== Центр приложений ===<br />
<br />
Показ и установка не пакетов, а приложений (с показом снимков экрана, рейтингами, локализованным описанием) — gnome-software и discover.<br />
<br />
=== Политика сборки LibreOffice ===<br />
<br />
Офисный пакет LibreOffice доступен в двух видах:<br />
# {{pkg|LibreOffice}} — версия Fresh (для экспериментаторов и продвинутых пользователей);<br />
# {{pkg|LibreOffice-still}} — версия Still (для корпоративных заказчиков);<br />
<br />
=== Единый пакет samba ===<br />
<br />
Пакет контроллера домена Active Directory {{pkg|samba-dc}} и обычная {{pkg|samba}} собираются из одного исходного пакета. Это означает, что контроллер домена можно установить на любой дистрибутив с любой средой.<br />
<br />
=== Поддержка актуальных алгоритмов ГОСТ ===<br />
<br />
* Новая версия OpenSSL 1.1 поддерживает отечественный криптографический алгоритм [https://ru.wikipedia.org/wiki/ГОСТ_Р_34.11-2012 ГОСТ Р 34.11-2012] с помощью пакета {{pkg|openssl-gost-engine}}. Подробнее: [[ГОСТ в OpenSSL]].<br />
* Также появился новый пакет {{pkg|gostsum}}, вычисляющий контрольную сумму по алгоритму [https://ru.wikipedia.org/wiki/ГОСТ_Р_34.11-2012 ГОСТ Р 34.11-2012]:<source lang="text" highlight="1">$ date | gost12sum<br />
dbdad0e2802c02d7f4cc03e27e24df2806d5d382b6a23a15ecb18f46cebcb2ae -</source><br />
<br />
== Версии подсистем и пакетов ==<br />
Репозитории Девятой платформы будут обновляться в течение срока поддержки. На момент официального анонса '''p9''' они содержат в том числе:<br />
<br />
{|class="standard"<br />
!ПО<br />
!Версия<br />
|-<br />
|Ядро Linux (std-def)||4.19.56<br />
|-<br />
|Ядро Linux (un-def)||5.1.21<br />
|-<br />
|Ядро Linux ([[OpenVZ|ovz-el7]])||3.10.0<br />
|-<br />
|[[systemd]]||242<br />
|-<br />
|GNU Libc||2.27<br />
|-<br />
|GCC||8.3.1<br />
|-<br />
|Python||2.7.16 и 3.7.3<br />
|-<br />
|Perl||5.28.1<br />
|-<br />
|[[Perl 6]]||2017.09<br />
|-<br />
|PHP||7.2.19<br />
|-<br />
|Ruby||2.5.5<br />
|-<br />
|Java||1.8.0.171 ({{pkg|java-1.8.0-openjdk}})<br />
|-<br />
|Mono||5.20.1.19<br />
|-<br />
|.NET Core||2.1.9<br />
|-<br />
|X.Org Server||1.20.4<br />
|-<br />
|Mesa||19.0.5<br />
|-<br />
|[[GNOME]]||3.32.2 <!-- по gnome-shell, спрашивал когда-то aris@ ради changelog регулярок // mike@ --><br />
|-<br />
|[[KDE|KF5/Plasma/KDE SC]]||5.59.0/5.16.2/19.04.2<br />
|-<br />
|[[MATE]]||1.22.1<br />
|-<br />
|[[Xfce]]||4.14<br />
|-<br />
|[[Enlightenment]]||0.22.4<br />
|-<br />
|Cinnamon||4.0.9<br />
|-<br />
|Firefox||66.0.5, {{pkg|firefox-esr}} 60.7.2<br />
|-<br />
|LibreOffice||6.2.4.2 {{pkg|LibreOffice-still}} 6.1.6.3<br />
|-<br />
|[[Samba]]||4.10.3 (с [[SambaDC|samba-dc]])<br />
|-<br />
|Bash||4.4.23<br />
|-<br />
|[[BIND]]||9.11.6<br />
|-<br />
|CUPS||2.2.11<br />
|-<br />
|DHCP||4.4.1<br />
|-<br />
|Apache httpd||2.4.39<br />
|-<br />
|nginx||1.14.2<br />
|-<br />
|MariaDB||10.3.15<br />
|-<br />
|PostgreSQL||11.4, 10.9 (обычная и для [[1C]])<br />
|-<br />
|Postfix||2.11.11<br />
|-<br />
|Dovecot||2.3.5<br />
|-<br />
|[[SOGo]]||4.0.7<br />
|-<br />
|OpenSSL||1.1.1b<br />
|-<br />
|GTK+||2.24.32 и 3.24.9<br />
|-<br />
|Qt||4.8.7 и 5.12.4<br />
|-<br />
|Tomcat||9.0.13<br />
|-<br />
|Wildfly (JBoss)||10.1.0<br />
|-<br />
|[[PVE|Proxmox]]||5.4.6<br />
|-<br />
|[[Kubernetes]]||1.14.1<br />
|-<br />
|[[OpenNebula]]||5.8.2<br />
|-<br />
|[[Ansible]]||2.7.10<br />
|-<br />
|[[Puppet]]||6.6.0<br />
|}<br />
<br />
Состав и версии других пакетов можно посмотреть на сайте [http://packages.altlinux.org/ru/p9/home/ packages.altlinux.org].<br />
<br />
<div id="starterkits"></div><br />
<br />
== Быстрое начало работы с репозиториями Девятой платформы ==<br />
<br />
===Starterkits===<br />
<br />
Многие пользователи, предпочитающие и умеющие самостоятельно определять состав системы и ее оформление, оценят возможность использовать для начала работы с новой платформой небольшие установочные образы с различными окружениями рабочего стола. Для реализации такого стиля работы с репозиториями Девятой платформы созданы и доступны образы комплектов входа (starter kits) для архитектур [http://nightly.altlinux.org/p9/release/ x86_64, i586], [http://nightly.altlinux.org/p9-aarch64/release/ aarch64], [http://nightly.altlinux.org/p9-armh/release/ armh], [http://nightly.altlinux.org/p9-mipsel/beta/ mipsel (beta)] (окружения рабочего стола Cinnamon, GNOME, '''IceWM''', KDE5, '''LXDE''', '''LXQt''', '''MATE''', WindowMaker, '''Xfce''', а также '''минимальный инсталятор (JeOS)''', серверный инсталятор и образ для использования с [[OpenStack]]; выделенные варианты доступны в сборках для всех поддерживаемых архитектур).<br />
<br />
Владельцам ВК «[[Эльбрус]]» доступны стартовые наборы Cinnamon, LXQt, MATE, Xfce для [[ports/e2k|e2k/e2kv4]].<br />
<br />
По сравнению с p8 варианты TDE и KDE4 исключены в связи с прекращением поддержки в репозитории; вариант WindowMaker убран как дублирующий GNUStep, где является по сути основой; вариант Enlightenment отложен для более тщательной [https://bugzilla.altlinux.org/show_bug.cgi?id=36913 проверки].<br />
<br />
Ассортимент образов входа в p9 расширяется с выпуском обновлений, которые поставлены в плановый квартальный режим (с надлежащим тестированием). Экспериментальные сборки бывают доступны [http://nightly.altlinux.org/p9/beta/ здесь] и в аналогичных подкаталогах для иных архитектур.<br />
<br />
Важно заметить, что '''образы для начала работы с p9 не являются дистрибутивами''', так как не содержат ни законченных решений, ни целостного оформления, но предоставляют лишь основу.<br />
<br />
{{main|starterkits}}<br />
<br />
===Официальные образы Docker===<br />
<br />
===Образы lxc/lxd===<br />
<br />
<div id="releases"></div><br />
<br />
== Дистрибутивные решения на Девятой платформе ==<br />
<br />
<br />
=== Другие ===<br />
Ведется разработка новых защищенных решений на Девятой платформе.<br />
<br />
== Скачать образы ==<br />
<br />
Доступны бета-версии дистрибутивов:<br />
* [[Альт Рабочая станция 9]];<br />
<!--* [http://basealt.ru/products/alt-server/ Альт Сервер];--><br />
* [http://basealt.ru/products/alt-education/ Альт Образование]; <!--[[образование]]?--><br />
* а также [[Starterkits/Download|стартовые наборы]].<br />
<br />
При перегрузке основного сервера пользуйтесь [http://mirror.yandex.ru/altlinux/p9/images/ яндекс-зеркалом].<br />
<br />
<!--<big>http://torrent.altlinux.org/</big> --><br />
<br />
== Обновление системы до Девятой платформы ==<br />
При переходе на Девятую платформу с установленной системы внимательно прочитайте [[Update/p9|рекомендации по обновлению]]. В случае затруднений не торопитесь, задайте вопрос в [http://lists.altlinux.org/mailman/listinfo/community/ списке рассылки] или на [http://forum.altlinux.org/ нашем форуме].<br />
<br />
== Известные проблемы ==<br />
<br />
= Пакетная база =<br />
{{:Branches/p9}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Packaging_Automation/DistroMap&diff=43431
Packaging Automation/DistroMap
2018-12-24T13:15:06Z
<p>217.15.195.17: /* Введение. */</p>
<hr />
<div>[[Категория:Справочники]]<br />
{{Category navigation|title=Автоматизация работы с пакетами|category=Packaging Automation}}<br />
<br />
__TOC__<br />
<br />
== DistroMap ==<br />
<br />
База данных DISTROMAP предназначена для трансляции пространств имен между дистрибутивами. DISTROMAP включает в себя собственно базы данных, утилиты генерации и сопровождения баз данных, shell интерфейс и perl интерфейс. Для удобства расширения и сопровождения база данных сделана модульной.<br />
<br />
=== Введение. ===<br />
Дистрибутивы различаются в политике именования пакетов, а также деления программного кода на исходные и бинарные пакеты. Различие в пространствах имен приводит к необходимости трансляции имен, а также, при необходимости, и версий, бинарных пакетов в установочных и сборочных зависимостях пакетов, а также трансляции имен исходных пакетов при сравнении пакетной базы репозиториев.<br />
<br />
Также, при портировании сторонних пакетов в Sisyphus возникает проблема трансляции групп пакетов. Это связано с тем, что для попадания пакета в Sisyphus его rpm группа должна принадлежать списку групп, указанных в /usr/lib/rpm/GROUPS.<br />
<br />
Утилиты пакета [[etersoft-build-utils]] поддерживают трансляцию установочных и сборочных зависимостей пакетов Sisyphus. в пакеты широкого круга других дистрибутивов с помощью встроенной базы данных соответствий. Также, предусмотрена возможность трансляция групп rpm, и есть таблица соответствий групп Sisyphus и групп бранчей, используемая для бакпортирования пакетов из Sisyphus в соответствующие бранчи.<br />
<br />
Для трансляции в обратном направлении, предыдущая версия библиотеки RPM::Source::Convert содержала таблицы трансляции установочных и сборочных зависимостей пакетов из репозиториев RHEL и Fedora в репозиторий Sisyphus с помощью встроенной базы данных соответствий. Также, имелись таблицы трансляции rpm групп других репозиториев в rpm группы репозитория пакетов свободного программного обеспечения Sisyphus.<br />
Общим недостатком описанных баз данных являлся незначительный объем, недостаточный для использования в общем случае, а также сложность их расширения и повторного использования, несистематический подход к их разработке.<br />
<br />
Плагинам fedora-package-compare и fedora-сnucnu для системы агрегации оповещений о появлении новой версии программного пакета для реализации всех их возможностей необходима полноценная база данных трансляции имен исходных пакетов из Fedora Rawhide в репозитарий Sisyphus.<br />
<br />
Также, при разработке программного комплекса автоматизации портирования и сопровождения программных пакетов из Fedora Rawhide в Sisyphus, fedoraimport, стало ясно, что для массового использования fedoraimport необходимо иметь как можно более полную база данных трансляции имен бинарных пакетов, которая бы использовалась для трансляции сборочных и установочных зависимостей пакетов. Также, полноценная база данных трансляции имен исходных пакетов из Fedora Rawhide в Sisyphus позволяет явно выделить множество исходных пакетов репозитория Fedora Rawhide, которые отсутствуют в репозитории Sisyphus, позволяя, таким образом, автоматизировать задачу подбора начальных данных для системы fedoraimport.<br />
<br />
Обе эти базы данных достаточно сильно связаны между собой. В частности, имея базу данных трансляции имен исходных пакетов, из нее можно сгенерировать большую часть базы данных трансляции сборочных и установочных зависимостей. К сожалению, из-за различий в разбиении исходных пакетов на бинарные пакеты и различий в зависимостях между бинарными пакетами корректировка вручную необходима, однако эти зависимости связывают обе базы данных в единое целое.<br />
<br />
Эти причины побудили вынести как отдельную подсистему базы данных трансляции пространств имен в репозиториях пакетов из систем, отвечающих за мониторинг upstream-репозитория в случае, когда upstream-репозиторий является сторонним репозиторием пакетов свободного программного обеспечения, и выделить ее в отдельный проект, получивший название DISTROMAP.<br />
<br />
=== Структура проекта DISTROMAP. ===<br />
DISTROMAP предназначен для трансляции пространств имен в репозиториях пакетов свободного программного обеспечения. DISTROMAP включает в себя собственно базы данных, утилиты генерации и сопровождения баз данных, shell интерфейс и интерфейс в виде модуля perl. Структура баз данных и интерфейс спроектированы таким образом, чтобы поддерживать различные репозитории, а также различные релизы (дистрибутивы, ветви) этих репозиториев. В качестве первой цели проекта выбраны БД трансляции пространства имен репозитариев пакетов свободного программного обеспечения Fedora Rawhide и Sisyphus.<br />
<br />
Shell интерфейс представляет собой фильтр конвейера оболочки, в зависимости от опций осуществляющий трансляцию имен исходных либо бинарных пакетов, либо трансляцию сборочных и установочных зависимостей (При трансляции имен пакетов используется трансляция один-к-одному, в то время как при трансляции сборочных и установочных зависимостей используется трансляция один-ко-многим. Это связанно с тем, что при поиске пакета, соответствующего данному, целью является конкретный пакет, например, для сравнения версий. В то же время для удовлетворения сборочных или установочных зависимостей может понадобиться указать сразу несколько пакетов программного обеспечения.<br />
Интерфейсный модуль perl реализует стандартный интерфейс хеш-таблиц perl. Он конфигурируется через указание исходного и целевого репозитариев пакетов свободного программного обеспечения а также их подвидов (релизов, дистрибутивов, бранчей). По умолчанию, это (Fedora, Rawhide) в качестве источника и (ALT Linux, Sisyphus) в качестве репозитория назначения. Также указывается режим соответствия трансляция один-к-одному или трансляция один-ко-многим.<br />
<br />
Утилиты сопровождения позволяют находить потенциальные соответствия по заданным алгоритмам и заносить их в БД после подтверждения оператором, находить устаревшие соответствия и перемещать их в соответствия релизов и т. д.<br />
<br />
Для удобства расширения и сопровождения база данных сделана модульной.<br />
<br />
== внутренние служебные утилиты DistroMap ==<br />
<br />
=== Фильтры ===<br />
<br />
Фильтры distromap работают с табличными текстовыми файлами, где колонки разделяются последовательностью пробельных символов (\s+).<br />
В каждой строке (кроме пустых и #-комментариев) в указанной колонке значение заменяется на значение из базы distromap.<br />
По умолчанию замена производится в первой колонке.<br />
Если замена не найдена, содержимое не меняется.<br />
Примеры:<br />
* замена имен src.rpm fedora -> altlinux (надо установить distromap-fedora-rawhide-altlinux-sisyphus)<br />
echo PyYAML | distromap-filter-translate-source-names --originrepo fedora --destrepo altlinux<br />
python-module-yaml<br />
* обратная замена имен src.rpm fedora <- altlinux. <br />
Если делать как в прошлом примере, то надо иметь обратную базу distromap-altlinux-sisyphus-fedora-rawhide. <br />
Но поскольку такой сейчас нет, можно исхитриться и с имеющейся distromap-fedora-rawhide-altlinux-sisyphus,<br />
вызвав другую утилиту:<br />
echo python-module-yaml | distromap-filter-reverse-translate-source-names --originrepo fedora --destrepo altlinux<br />
PyYAML<br />
* замена имен бинарных rpm fedora -> altlinux (надо установить distromap-fedora-rawhide-altlinux-sisyphus)<br />
echo argtable-devel | distromap-filter-translate-binary-names --originrepo fedora --destrepo altlinux<br />
libargtable2-devel<br />
* CPAN, PyPI. distromap-filter-translate-*-names с ними не работают, для них есть отдельные утилиты.<br />
<br />
distromap-filter-translate-altlinux2cpan<br />
distromap-filter-translate-altlinux2pypi<br />
distromap-filter-translate-cpan2altlinux<br />
distromap-filter-translate-pypi2altlinux<br />
Пример:<br />
echo Arp | distromap-filter-translate-cpan2altlinux <br />
perl-Arp<br />
<br />
== классы данных ==<br />
Основные:<br />
<br />
TODO:<br />
<br />
Дополнительно:<br />
<br />
В структуре описания репозитария:<br />
<br />
* Допустимые группы rpm<br />
* файлы конфигурации pkg-config<br />
* соответствие бинарных и исходных пакетов<br />
<br />
В структуре описания трансляции репозитариев:<br />
<br />
* поддержка несравнимых по версиям соответствий пакетов<br />
* поддержка списка избыточных пакетов, подлежащих удалению из сборочных либо установочных зависимостей<br />
* поддержка списка избыточных пакетов, для которых из сборочных либо установочных зависимостей должны быть удалены версии (несравнимые по версиям пакеты включаются в этот список автоматически).<br />
* точные соответствия групп rpm<br />
* нестрогие соответствия групп rpm.<br />
<br />
Продолжена работа по наполнению БД трансляции пространства имен репозитариев пакетов свободного программного обеспечения Fedora Rawhide и Sisyphus. Текущая БД трансляции содержит 1280 записей для случаев, когда имена пакетов или других сущностей различны. БД трансляции пространства имен репозитариев пакетов свободного программного обеспечения Fedora Rawhide и Sisyphus оформлена в виде программного пакета для нестабильной ветви «Sisyphus» репозитория СПО.<br />
Дополнительно к уже имеющейся БД трансляции пространства имен репозитариев пакетов свободного программного обеспечения Fedora Rawhide и Sisyphus начата работа по наполнению БД трансляции пространств имен из нестабильной ветви «Sisyphus» в стабильную ветвь t6 репозитария пакетов свободного программного обеспечения.<br />
БД состояния репозитория теперь обновляются ежедневно и доступны online: БД текущего состояния нестабильной ветви «Sisyphus» репозитория СПО доступно с сайта http://repocop.altlinux.ru, БД текущего состояния стабильной ветви «t6» репозитория СПО доступно с сайта http://autoports.altlinux.ru.<br />
Интерфейсный модуль perl переписан для использования новых классов данных, добавленых для БД состояния репозитория и БД трансляции пространства имен репозитариев.<br />
<br />
{| class="wide"<br />
| Разработано при поддержке [http://www.fasie.ru/ Фонда содействия развитию МП НТС] в рамках НИОКР 01201066526<br />
| [[Изображение:Logo_FASIE_preview.jpg|200px|rigft]]<br />
|}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D0%B2_PKCS12&diff=42991
Создание сертификатов PKCS12
2018-10-29T14:26:36Z
<p>217.15.195.17: Параметр default_md с md5 изменен на sha256, иначе при попытке создать сертификаты по инструкции openssl выдает ошибку недопустимого digest algorithm</p>
<hr />
<div>== Создание сертификатов PKCS12 ==<br />
<br />
Данная статья содержит краткое руководство для создания сертификатов PKCS12. <br />
<br />
Такие сертификаты используются в качестве ключей на защищённых веб-страницах и в электронной подписи OpenOffice.org.<br />
<br />
Основано на статье: [http://www.flatmtn.com/computer/Linux-SSLCertifcatesPKCS12.html Creating PKCS12 Certificates]<br />
<br />
Для того, чтобы создать сертификат, вам необходимо программное обеспечение '''openssl''' (если нет команды openssl, установите посредством команды ''apt-get install openssl'').<br />
<br />
__TOC__<br />
<br />
<br />
==== Шаг 1. Подготавливаем место ====<br />
Создайте каталог (например, cert) и перейдите в него. Выполните команды: <br />
<br />
<pre>mkdir private<br />
mkdir certs<br />
echo '100001' >serial<br />
touch certindex.txt</pre><br />
<br />
В этом каталоге создаём файл конфигурации '''openssl.conf''' следующего содержимого: <br />
<br />
<pre>#<br />
# OpenSSL configuration file.<br />
#<br />
<br />
# Establish working directory.<br />
dir = .<br />
<br />
[ ca ]<br />
default_ca = CA_default<br />
<br />
[ CA_default ]<br />
serial = $dir/serial<br />
database = $dir/certindex.txt<br />
new_certs_dir = $dir/certs<br />
certificate = $dir/cacert.pem<br />
private_key = $dir/private/cakey.pem<br />
default_days = 365<br />
default_md = sha256<br />
preserve = no<br />
email_in_dn = yes # установите в no если не хотите чтобы поле email присутствовало в сертификате,<br />
# без поля email сертификат нельзя использовать для подписи и шифрования электронной почты!<br />
nameopt = default_ca<br />
certopt = default_ca<br />
policy = policy_match<br />
<br />
[ policy_match ]<br />
countryName = match<br />
stateOrProvinceName = match<br />
organizationName = match<br />
organizationalUnitName = optional<br />
commonName = supplied<br />
emailAddress = optional<br />
<br />
[ req ]<br />
default_bits = 1024 # Size of keys<br />
default_keyfile = key.pem # name of generated keys<br />
default_md = sha256 # message digest algorithm<br />
string_mask = nombstr # permitted characters<br />
distinguished_name = req_distinguished_name<br />
req_extensions = v3_req<br />
<br />
[ req_distinguished_name ]<br />
# Variable name Prompt string<br />
#------------------------- ----------------------------------<br />
0.organizationName = Organization Name (company)<br />
organizationalUnitName = Organizational Unit Name (department, division)<br />
emailAddress = Email Address<br />
emailAddress_max = 40<br />
localityName = Locality Name (city, district)<br />
stateOrProvinceName = State or Province Name (full name)<br />
countryName = Country Name (2 letter code)<br />
countryName_min = 2<br />
countryName_max = 2<br />
commonName = Common Name (hostname, IP, or your name)<br />
commonName_max = 64<br />
<br />
# Default values for the above, for consistency and less typing.<br />
# Variable name Value<br />
#------------------------ ------------------------------<br />
0.organizationName_default = Company<br />
localityName_default = Moscow<br />
stateOrProvinceName_default = Moscow<br />
countryName_default = RU<br />
emailAddress_default = email@domain.ru<br />
commonName_default = Common text<br />
<br />
[ v3_ca ]<br />
basicConstraints = CA:TRUE<br />
subjectKeyIdentifier = hash<br />
authorityKeyIdentifier = keyid:always,issuer:always<br />
<br />
[ v3_req ]<br />
basicConstraints = CA:FALSE<br />
subjectKeyIdentifier = hash</pre><br />
<br />
==== Шаг 2. Создаём сертификат сертифицирующей организации (CA) ====<br />
<pre>openssl req -new -x509 -extensions v3_ca -keyout private/cakey.pem -out cacert.pem -days 365 -config ./openssl.conf</pre><br />
При запросе пароля указывайте пароль не менее 4 символов. На все остальные запросы можно нажать Enter.<br />
<br />
==== Шаг 3. Создаём пользовательский сертификат ====<br />
Сначала зададим имя для файлов сертификата пользовлателя. Так как их может быть много, задание через переменную среды окружения позволит повторять этот шаг очень быстро для каждого пользователя.<br />
<br />
<pre>name='user1'</pre><br />
<br />
Теперь для каждого пользователя создаём сертификат PKCS12. Выполняйте по одной команде:<br />
<br />
<pre>openssl req -new -nodes -out $name-req.pem -keyout private/$name-key.pem -days 365 -config ./openssl.conf</pre><br />
<br />
<pre>openssl ca -out $name-cert.pem -days 365 -config ./openssl.conf -infiles $name-req.pem</pre><br />
<br />
<pre>openssl pkcs12 -export -in $name-cert.pem -inkey private/$name-key.pem -certfile cacert.pem -name "description" -out $name-cert.p12</pre><br />
<br />
При запросе пароля указывайте пароль, заданный при создании сертификата CA. На все остальные запросы можно нажать Enter.<br />
<br />
Готовый файл: '''user1-cert.p12'''<br />
<br />
Этот файл можно импортировать в Firefox или Thunderbird, а потом использовать в OpenOffice.org.<br />
<br />
== См. также ==<br />
<br />
[[cert-sh-functions]]<br />
<br />
== Используемая литература ==<br />
<br />
* http://www.flatmtn.com/article/creating-pkcs12-certificates<br />
<br />
[[Категория:Руководства]]<br />
{{Category navigation|title=Руководства|category=Руководства|sortkey={{SUBPAGENAME}}}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Localization/General_Glossary&diff=42959
Localization/General Glossary
2018-10-26T11:54:33Z
<p>217.15.195.17: /* Глоссарий общих терминов */</p>
<hr />
<div>== '''Глоссарий общих терминов''' ==<br />
<br />
Если Вы заметите ошибку или захотите предложить добавить новый термин или перевод, пишите нам: translation-team@basealt.ru.<br />
<br />
{| class="wikitable sortable"<br />
|-<br />
! English !! Русский !! Примечания<br />
|-<br />
| '''A''' || || <br />
|-<br />
| account || учётная запись || <br />
|-<br />
| activity || комната || <br />
|-<br />
| application for programs || назначение программ || <br />
|-<br />
| application launcher || меню запуска приложений || <br />
|-<br />
| application documentation || руководство пользователя приложения || <br />
|-<br />
| '''B''' || || <br />
|-<br />
| back reference || обратная ссылка || <br />
|-<br />
| binary builds || бинарные сборки || <br />
|-<br />
| binary packages || установочные пакеты || <br />
|-<br />
| binary releases || готовые сборки || <br />
|-<br />
| bookmarked locations || избранные папки || <br />
|-<br />
| '''C''' || || <br />
|-<br />
| click || щёлкнуть по (чему-то) / нажать (что-то) || <br />
|-<br />
| combo box || поле со списком || <br />
|-<br />
| common menu || стандартное меню || <br />
|-<br />
| connection activation was enqueued || запланировано установление соединения || <br />
|-<br />
| contiguous group of files || файлы, расположенные в списке последовательно || <br />
|-<br />
| customization || пользовательские параметры || <br />
|-<br />
| '''D''' || || <br />
|-<br />
| debug || отладка || НЕ «исправление ошибок»<br />
|-<br />
| default application || приложение, назначенное по умолчанию || <br />
|-<br />
| dependencies || зависимости || <br />
|-<br />
| detailed tree view || подробное древовидное представление || <br />
|-<br />
| directory || каталог || НЕ «директория»<br />
|-<br />
| drop down box || раскрывающийся список || <br />
|-<br />
| '''F''' || || <br />
|-<br />
| fallback language || резервный язык || <br />
|-<br />
| file manager || диспетчер файлов || <br />
|-<br />
| folder || папка || <br />
|-<br />
| folder view || область просмотра папок || <br />
|-<br />
| folder view history|| история просмотра папок || <br />
|-<br />
| font style || начертание шрифта || <br />
|-<br />
| found text || найденные вхождения искомого текста || (когда речь идёт о замене текста)<br />
|-<br />
| '''G''' || || <br />
|-<br />
| GUI || графический интерфейс пользователя || It is a GUI frontend = [программа] предоставляет графический интерфейс<br />
|-<br />
| '''H''' || || <br />
|-<br />
| history || журнал || <br />
|-<br />
| hover controlled focus || смена фокуса по наведению мыши || <br />
|-<br />
| '''I''' || || <br />
|-<br />
| icon || значок || НЕ «иконка»<br />
|-<br />
| immediate deletion || удаление без запроса подтверждения || <br />
|-<br />
| '''L''' || || <br />
|-<br />
| label || ярлык || НЕ «ярлычок»<br />
|-<br />
| layout || представление || (представление папки)<br />
|-<br />
| location bar || строка адреса || НЕ «адресная строка»<br />
|-<br />
| lock file || файл блокировки || <br />
|-<br />
| '''M''' || || <br />
|-<br />
| main window || главное окно || НЕ «основное»<br />
|-<br />
| maintainer || сопровождающий || (участник проекта)<br />
|-<br />
| menu bar || строка меню || НЕ «панель»<br />
|-<br />
| mouse gesture || росчерк мыши || <br />
|-<br />
| mouse wheel || колесо мыши || НЕ «колёсико»<br />
|-<br />
| music player || музыкальный проигрыватель || НЕ «плеер»<br />
|-<br />
| '''N''' || || <br />
|-<br />
| natural sorting || естественная алфавитно-числовая сортировка || <br />
|-<br />
| navigation panel || панель навигации || <br />
|-<br />
| note || примечание || <br />
|-<br />
| Note:/Note that: || Внимание: || Вариант: «Важно:»<br />
|-<br />
| '''O''' || || <br />
|-<br />
| options || параметры || <br />
|-<br />
| original author || автор первоначальной версии || <br />
|-<br />
| '''P''' || || <br />
|-<br />
| pixel || пиксел || НЕ «пиксель»<br />
|-<br />
| placeholder || заполнитель || <br />
|-<br />
| Plasma desktop || окружение рабочего стола Plasma || НЕ «оболочка»<br />
|-<br />
| plugin || расширение, модуль || <br />
|-<br />
| private key || закрытый ключ || <br />
|-<br />
| public key || открытый ключ || <br />
|-<br />
| '''R''' || || <br />
|-<br />
| radio group || группа переключателей || <br />
|-<br />
| recent files || последние файлы || НЕ «недавние»<br />
|-<br />
| '''S''' || || <br />
|-<br />
| screenshot || снимок экрана || НЕ «скриншот»<br />
|-<br />
| search bar || строка поиска || <br />
|-<br />
| search box || строка поиска || <br />
|-<br />
| settings || параметры || НЕ «настройки»<br />
|-<br />
| slider || ползунок || НЕ «бегунок»<br />
|-<br />
| sloppy focus || нечёткий фокус || <br />
|-<br />
| sort || сортировка (пункт меню) / упорядочить (элементы в списке) || <br />
|-<br />
| spin box || счётчик || <br />
|-<br />
| sub-property || вложенное условие || Вариант: «дополнительный параметр»<br />
|-<br />
| submenu || вложенное меню || НЕ «подменю»<br />
|-<br />
| System Settings || приложение «Параметры системы» || <br />
|-<br />
| system tray || системный лоток || <br />
|-<br />
| '''T''' || || <br />
|-<br />
| task bar || панель задач || <br />
|-<br />
| task manager || диспетчер задач || <br />
|-<br />
| text area || поле редактирования текста || <br />
|-<br />
| text box || текстовое поле || НЕ «блок»<br />
|-<br />
| text label || подпись || <br />
|-<br />
| tip || подсказка || <br />
|-<br />
| tool tip || всплывающая подсказка || <br />
|-<br />
| toolbar || панель инструментов || <br />
|-<br />
| tree || дерево || <br />
|-<br />
| tree menu || древовидное меню || <br />
|-<br />
| tree view || разворачиваемый список || <br />
|-<br />
| '''U''' || || <br />
|-<br />
| uncheck || снять отметку с флажка ||<br />
|-<br />
| unmounting || размонтирование / удаление || <br />
|-<br />
| '''W''' || || <br />
|-<br />
| windows manager || диспетчер окон || <br />
|-<br />
| writeback memory || обратно записываемая память ||<br />
|}<br />
<br />
{{Category navigation|title=Localization|category=Localization|sortkey=*}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Localization/General_Glossary&diff=42954
Localization/General Glossary
2018-10-26T08:32:02Z
<p>217.15.195.17: /* Глоссарий общих терминов */</p>
<hr />
<div>== '''Глоссарий общих терминов''' ==<br />
<br />
Если Вы заметите ошибку или захотите предложить добавить новый термин или перевод, пишите нам: translation-team@basealt.ru.<br />
<br />
{| class="wikitable sortable"<br />
|-<br />
! English !! Русский !! Примечания<br />
|-<br />
| '''A''' || || <br />
|-<br />
| account || учётная запись || <br />
|-<br />
| activity || комната || <br />
|-<br />
| application for programs || назначение программ || <br />
|-<br />
| application launcher || меню запуска приложений || <br />
|-<br />
| application documentation || руководство пользователя приложения || <br />
|-<br />
| '''B''' || || <br />
|-<br />
| back reference || обратная ссылка || <br />
|-<br />
| binary builds || бинарные сборки || <br />
|-<br />
| binary packages || установочные пакеты || <br />
|-<br />
| binary releases || готовые сборки || <br />
|-<br />
| bookmarked locations || избранные папки || <br />
|-<br />
| '''C''' || || <br />
|-<br />
| click || щёлкнуть по (чему-то) / нажать (что-то) || <br />
|-<br />
| combo box || поле со списком || <br />
|-<br />
| common menu || стандартное меню || <br />
|-<br />
| connection activation was enqueued || запланировано установление соединения || <br />
|-<br />
| contiguous group of files || файлы, расположенные в списке последовательно || <br />
|-<br />
| customization || пользовательские параметры || <br />
|-<br />
| '''D''' || || <br />
|-<br />
| debug || отладка || НЕ «исправление ошибок»<br />
|-<br />
| default application || приложение, назначенное по умолчанию || <br />
|-<br />
| dependencies || зависимости || <br />
|-<br />
| detailed tree view || подробное древовидное представление || <br />
|-<br />
| directory || каталог || НЕ «директория»<br />
|-<br />
| drop down box || раскрывающийся список || <br />
|-<br />
| '''F''' || || <br />
|-<br />
| fallback language || резервный язык || <br />
|-<br />
| file manager || диспетчер файлов || <br />
|-<br />
| folder || папка || <br />
|-<br />
| folder view || область просмотра папок || <br />
|-<br />
| font style || начертание шрифта || <br />
|-<br />
| found text || найденные вхождения искомого текста || (когда речь идёт о замене текста)<br />
|-<br />
| '''G''' || || <br />
|-<br />
| GUI || графический интерфейс пользователя || It is a GUI frontend = [программа] предоставляет графический интерфейс<br />
|-<br />
| '''H''' || || <br />
|-<br />
| history || журнал || <br />
|-<br />
| hover controlled focus || смена фокуса по наведению мыши || <br />
|-<br />
| '''I''' || || <br />
|-<br />
| icon || значок || НЕ «иконка»<br />
|-<br />
| immediate deletion || удаление без запроса подтверждения || <br />
|-<br />
| '''L''' || || <br />
|-<br />
| label || ярлык || НЕ «ярлычок»<br />
|-<br />
| layout || представление || (представление папки)<br />
|-<br />
| location bar || строка адреса || НЕ «адресная строка»<br />
|-<br />
| lock file || файл блокировки || <br />
|-<br />
| '''M''' || || <br />
|-<br />
| main window || главное окно || НЕ «основное»<br />
|-<br />
| maintainer || сопровождающий || (участник проекта)<br />
|-<br />
| menu bar || строка меню || НЕ «панель»<br />
|-<br />
| mouse gesture || росчерк мыши || <br />
|-<br />
| mouse wheel || колесо мыши || НЕ «колёсико»<br />
|-<br />
| music player || музыкальный проигрыватель || НЕ «плеер»<br />
|-<br />
| '''N''' || || <br />
|-<br />
| natural sorting || естественная алфавитно-числовая сортировка || <br />
|-<br />
| navigation panel || панель навигации || <br />
|-<br />
| note || примечание || <br />
|-<br />
| Note:/Note that: || Внимание: || Вариант: «Важно:»<br />
|-<br />
| '''O''' || || <br />
|-<br />
| options || параметры || <br />
|-<br />
| original author || автор первоначальной версии || <br />
|-<br />
| '''P''' || || <br />
|-<br />
| pixel || пиксел || НЕ «пиксель»<br />
|-<br />
| placeholder || заполнитель || <br />
|-<br />
| Plasma desktop || окружение рабочего стола Plasma || НЕ «оболочка»<br />
|-<br />
| plugin || расширение, модуль || <br />
|-<br />
| private key || закрытый ключ || <br />
|-<br />
| public key || открытый ключ || <br />
|-<br />
| '''R''' || || <br />
|-<br />
| radio group || группа переключателей || <br />
|-<br />
| recent files || последние файлы || НЕ «недавние»<br />
|-<br />
| '''S''' || || <br />
|-<br />
| screenshot || снимок экрана || НЕ «скриншот»<br />
|-<br />
| search bar || строка поиска || <br />
|-<br />
| search box || строка поиска || <br />
|-<br />
| settings || параметры || НЕ «настройки»<br />
|-<br />
| slider || ползунок || НЕ «бегунок»<br />
|-<br />
| sloppy focus || нечёткий фокус || <br />
|-<br />
| sort || сортировка (пункт меню) / упорядочить (элементы в списке) || <br />
|-<br />
| spin box || счётчик || <br />
|-<br />
| sub-property || вложенное условие || Вариант: «дополнительный параметр»<br />
|-<br />
| submenu || вложенное меню || НЕ «подменю»<br />
|-<br />
| System Settings || приложение «Параметры системы» || <br />
|-<br />
| system tray || системный лоток || <br />
|-<br />
| '''T''' || || <br />
|-<br />
| task bar || панель задач || <br />
|-<br />
| task manager || диспетчер задач || <br />
|-<br />
| text area || поле редактирования текста || <br />
|-<br />
| text box || текстовое поле || НЕ «блок»<br />
|-<br />
| text label || подпись || <br />
|-<br />
| tip || подсказка || <br />
|-<br />
| tool tip || всплывающая подсказка || <br />
|-<br />
| toolbar || панель инструментов || <br />
|-<br />
| tree || дерево || <br />
|-<br />
| tree menu || древовидное меню || <br />
|-<br />
| tree view || разворачиваемый список || <br />
|-<br />
| '''U''' || || <br />
|-<br />
| uncheck || снять отметку с флажка ||<br />
|-<br />
| unmounting || размонтирование / удаление || <br />
|-<br />
| '''W''' || || <br />
|-<br />
| windows manager || диспетчер окон || <br />
|-<br />
| writeback memory || обратно записываемая память ||<br />
|}<br />
<br />
{{Category navigation|title=Localization|category=Localization|sortkey=*}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Features/Core&diff=42900
Features/Core
2018-10-16T09:34:39Z
<p>217.15.195.17: </p>
<hr />
<div>== Файлы core ==<br />
<br />
По умолчанию в ALT Linux механизм coredump отключен для уменьшения уязвимости обычных систем (по причине неоднократных серьёзных проблем с ним; см. тж. {{altbug|9780}}).<br />
<br />
Предпринятые меры:<br />
* <tt>kernel.core_pattern = /</tt> в {{path|/etc/sysctl.conf}} см. тж. {{altbug|32029}}<br />
* <tt>soft core 0</tt> в {{path|/etc/security/limits.d/50-defaults.conf}}<br />
* <tt>limited</tt> в ряде инитскриптов<br />
* <tt>ulimit -Sc 0 >/dev/null 2>&1</tt> в {{path|/etc/rc.d/rc.sysinit}}<br />
* <tt>ulimit -Sc 0 >/dev/null 2>&1</tt> в {{path|/etc/profile}}<br />
<br />
Теперь осталось убрать лишние места выключения, чтобы была возможность включить.<br />
<br />
Для появления корок (в процессах-наследниках того, в котором вызывается ulimit) надо как минимум:<br />
* {{cmd|<nowiki>sysctl -w kernel.core_pattern=core</nowiki>}}<br />
* {{cmd|ulimit -Sc unlimited}}<br />
и, возможно, посмотреть {{path|/etc/sysconfig/limits}} да создать нужный {{path|/etc/sysconfig/limits.d/*}} (см. тж. [http://lists.altlinux.org/pipermail/sysadmins/2014-June/036782.html это письмо] насчёт apache2<ref>[[Apache2/Coredump]]</ref>).<br />
<br />
== Как включить сохранение coredump с systemd ==<br />
<br />
Установить пакет systemd-coredump: <br />
<br />
# apt-get install systemd-coredump<br />
<br />
Включить coredump: <br />
# systemctl start systemd-coredump.socket<br />
<br />
Отключить soft limit на core dump size: закомментировать следующую строку в '''/etc/profile''': 'ulimit -Sc 0 >/dev/null 2>&1', закомментрировать в файле '''/etc/security/limits.d/50-defaults.conf''' строку:<br />
'* soft core 0'<br />
<br />
Перелогиниться, чтобы новый core limit вступил в силу для всех приложений по мере их запуска. ulimit -c должен после этого выдавать не 0, а unlimited. Для неграфической сессии можно вместо этого выполнить "ulimit -c unlimited".<br />
<br />
После этого coredump-ы можно смотреть с помощью утилиты coredumpctl <br />
$ coredumpctl list<br />
$ coredumpctl info<br />
и сохранять с помощью <br />
$ coredumpctl dump -o filename<br />
<br />
Стоит учитывать, что coredump - это снимок всей доступной памяти процесса на момент его падения. Если в памяти приложения есть важная информация (например, пароли), то эта информация будет присутствовать и в coredump-файле.<br />
<br />
Проверить, что всё настроено правильно, можно, например, с помощью следующей программы:<br />
<br />
int main(int argc, char **argv)<br />
{<br />
char *r;<br />
do<br />
{<br />
r = *argv;<br />
} while (++argv);<br />
return 0;<br />
}<br />
<br />
Собрав её <br />
$ gcc segfault.c -g -o segfault<br />
и запустив <br />
$ ./segfault<br />
В итоге, в coredumpctl должна появиться информация о сегфолте с доступным coredump'ом.<br />
<br />
Пример вывода<br />
<br />
$ coredumpctl <br />
TIME PID UID GID SIG COREFILE EXE<br />
Mon 2018-10-15 18:53:41 MSK 26285 500 500 11 present /home/test/segfault<br />
<br />
$ coredumpctl info 26285<br />
PID: 26285 (segfault)<br />
UID: 500 (test)<br />
GID: 500 (test)<br />
Signal: 11 (SEGV)<br />
Timestamp: Mon 2018-10-15 18:53:40 MSK (8s ago)<br />
Command Line: ./segfault<br />
Executable: /home/test/segfault<br />
Control Group: /user.slice/user-500.slice/session-4.scope<br />
Unit: session-4.scope<br />
Slice: user-500.slice<br />
Session: 4<br />
Owner UID: 500 (test)<br />
Boot ID: d93a5fb5f9f44f25838f9d6d4e9486dc<br />
Machine ID: 30878809ed378edf3a2b36e25ad5fa70<br />
Hostname: kwork-x86-64.localdomain<br />
Storage: /var/lib/systemd/coredump/core.segfault.500.d93a5fb5f9f44f25838f9d6d4e9486dc.26285.1539618820000000.lz4<br />
Message: Process 26285 (segfault) of user 500 dumped core.<br />
Stack trace of thread 26285:<br />
#0 0x00000000004004e5 n/a (/home/test/segfault)<br />
<br />
<br />
== Примечания ==<br />
{{примечания}}<br />
<br />
[[Категория:Features]]<br />
{{Category navigation|title=Features|category=Features|sortkey={{SUBPAGENAME}}}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Features/Core&diff=42898
Features/Core
2018-10-16T06:40:36Z
<p>217.15.195.17: </p>
<hr />
<div>== Файлы core ==<br />
<br />
По умолчанию в ALT Linux механизм coredump отключен для уменьшения уязвимости обычных систем (по причине неоднократных серьёзных проблем с ним; см. тж. {{altbug|9780}}).<br />
<br />
Предпринятые меры:<br />
* <tt>kernel.core_pattern = /</tt> в {{path|/etc/sysctl.conf}} см. тж. {{altbug|32029}}<br />
* <tt>soft core 0</tt> в {{path|/etc/security/limits.d/50-defaults.conf}}<br />
* <tt>limited</tt> в ряде инитскриптов<br />
* <tt>ulimit -Sc 0 >/dev/null 2>&1</tt> в {{path|/etc/rc.d/rc.sysinit}}<br />
* <tt>ulimit -Sc 0 >/dev/null 2>&1</tt> в {{path|/etc/profile}}<br />
<br />
Теперь осталось убрать лишние места выключения, чтобы была возможность включить.<br />
<br />
Для появления корок (в процессах-наследниках того, в котором вызывается ulimit) надо как минимум:<br />
* {{cmd|<nowiki>sysctl -w kernel.core_pattern=core</nowiki>}}<br />
* {{cmd|ulimit -Sc unlimited}}<br />
и, возможно, посмотреть {{path|/etc/sysconfig/limits}} да создать нужный {{path|/etc/sysconfig/limits.d/*}} (см. тж. [http://lists.altlinux.org/pipermail/sysadmins/2014-June/036782.html это письмо] насчёт apache2<ref>[[Apache2/Coredump]]</ref>).<br />
<br />
== Как включить сохранение coredump с systemd ==<br />
<br />
Установить пакет systemd-coredump: <br />
<br />
# apt-get install systemd-coredump<br />
<br />
Включить coredump: <br />
# systemctl start systemd-coredump.socket<br />
<br />
Отключить soft limit на core dump size: закомментировать следующую строку в '''/etc/profile''': 'ulimit -Sc 0 >/dev/null 2>&1'<br />
<br />
Перелогиниться, чтобы новый core limit вступил в силу для всех приложений по мере их запуска. ulimit -c должен после этого выдавать не 0, а unlimited. Для неграфической сессии можно вместо этого выполнить "ulimit -c unlimited".<br />
<br />
После этого coredump-ы можно смотреть с помощью утилиты coredumpctl <br />
$ coredumpctl list<br />
$ coredumpctl info<br />
и сохранять с помощью <br />
$ coredumpctl dump -o filename<br />
<br />
Стоит учитывать, что coredump - это снимок всей доступной памяти процесса на момент его падения. Если в памяти приложения есть важная информация (например, пароли), то эта информация будет присутствовать и в coredump-файле.<br />
<br />
Проверить, что всё настроено правильно, можно, например, с помощью следующей программы:<br />
<br />
int main(int argc, char **argv)<br />
{<br />
char *r;<br />
do<br />
{<br />
r = *argv;<br />
} while (++argv);<br />
return 0;<br />
}<br />
<br />
Собрав её <br />
$ gcc segfault.c -g -o segfault<br />
и запустив <br />
$ ./segfault<br />
В итоге, в coredumpctl должна появиться информация о сегфолте с доступным coredump'ом.<br />
<br />
Пример вывода<br />
<br />
$ coredumpctl <br />
TIME PID UID GID SIG COREFILE EXE<br />
Mon 2018-10-15 18:53:41 MSK 26285 500 500 11 present /home/test/segfault<br />
<br />
$ coredumpctl info 26285<br />
PID: 26285 (segfault)<br />
UID: 500 (test)<br />
GID: 500 (test)<br />
Signal: 11 (SEGV)<br />
Timestamp: Mon 2018-10-15 18:53:40 MSK (8s ago)<br />
Command Line: ./segfault<br />
Executable: /home/test/segfault<br />
Control Group: /user.slice/user-500.slice/session-4.scope<br />
Unit: session-4.scope<br />
Slice: user-500.slice<br />
Session: 4<br />
Owner UID: 500 (test)<br />
Boot ID: d93a5fb5f9f44f25838f9d6d4e9486dc<br />
Machine ID: 30878809ed378edf3a2b36e25ad5fa70<br />
Hostname: kwork-x86-64.localdomain<br />
Storage: /var/lib/systemd/coredump/core.segfault.500.d93a5fb5f9f44f25838f9d6d4e9486dc.26285.1539618820000000.lz4<br />
Message: Process 26285 (segfault) of user 500 dumped core.<br />
Stack trace of thread 26285:<br />
#0 0x00000000004004e5 n/a (/home/test/segfault)<br />
<br />
<br />
== Примечания ==<br />
{{примечания}}<br />
<br />
[[Категория:Features]]<br />
{{Category navigation|title=Features|category=Features|sortkey={{SUBPAGENAME}}}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Features/Core&diff=42897
Features/Core
2018-10-16T06:23:16Z
<p>217.15.195.17: </p>
<hr />
<div>== Файлы core ==<br />
<br />
По умолчанию в ALT Linux механизм coredump отключен для уменьшения уязвимости обычных систем (по причине неоднократных серьёзных проблем с ним; см. тж. {{altbug|9780}}).<br />
<br />
Предпринятые меры:<br />
* <tt>kernel.core_pattern = /</tt> в {{path|/etc/sysctl.conf}} см. тж. {{altbug|32029}}<br />
* <tt>soft core 0</tt> в {{path|/etc/security/limits.d/50-defaults.conf}}<br />
* <tt>limited</tt> в ряде инитскриптов<br />
* <tt>ulimit -Sc 0 >/dev/null 2>&1</tt> в {{path|/etc/rc.d/rc.sysinit}}<br />
* <tt>ulimit -Sc 0 >/dev/null 2>&1</tt> в {{path|/etc/profile}}<br />
<br />
Теперь осталось убрать лишние места выключения, чтобы была возможность включить.<br />
<br />
Для появления корок (в процессах-наследниках того, в котором вызывается ulimit) надо как минимум:<br />
* {{cmd|<nowiki>sysctl -w kernel.core_pattern=core</nowiki>}}<br />
* {{cmd|ulimit -Sc unlimited}}<br />
и, возможно, посмотреть {{path|/etc/sysconfig/limits}} да создать нужный {{path|/etc/sysconfig/limits.d/*}} (см. тж. [http://lists.altlinux.org/pipermail/sysadmins/2014-June/036782.html это письмо] насчёт apache2<ref>[[Apache2/Coredump]]</ref>).<br />
<br />
== Как включить сохранение coredump с systemd ==<br />
<br />
Установить пакет systemd-coredump: <br />
<br />
# apt-get install systemd-coredump<br />
<br />
Включить coredump: <br />
# systemctl start systemd-coredump.socket<br />
<br />
Отключить soft limit на core dump size: закомментировать следующую строку в '''/etc/profile''': 'ulimit -Sc 0 >/dev/null 2>&1'<br />
<br />
Перелогиниться, чтобы новый core limit вступил в силу для всех приложений по мере их запуска. ulimit -c должен после этого выдавать не 0, а unlimited. Для неграфической сессии можно вместо этого выполнить "ulimit -c unlimited".<br />
<br />
После этого coredump-ы можно смотреть с помощью утилиты coredumpctl <br />
$ coredumpctl list<br />
$ coredumpctl info<br />
и сохранять с помощью <br />
$ coredumpctl dump -o filename<br />
<br />
Стоит учитывать, что coredump - это снимок всей доступной памяти процесса на момент его падения. Если в памяти приложения есть важная информация (например, пароли), то эта информация будет присутствовать и в coredump-файле.<br />
<br />
Проверить, что всё настроено правильно, можно, например, с помощью следующей программы:<br />
<br />
int main(int argc, char **argv)<br />
{<br />
char *r;<br />
<br />
do<br />
{<br />
r = *argv;<br />
} while (++argv);<br />
<br />
return 0;<br />
}<br />
<br />
Собрав её <br />
$ gcc segfault.c -g -o segfault<br />
и запустив <br />
$ ./segfault<br />
В итоге, в coredumpctl должна появиться информация о сегфолте с доступным coredump'ом.<br />
<br />
Пример вывода<br />
<br />
$ coredumpctl <br />
TIME PID UID GID SIG COREFILE EXE<br />
Mon 2018-10-15 18:53:41 MSK 26285 500 500 11 present /home/test/segfault<br />
<br />
$ coredumpctl info 26285<br />
PID: 26285 (segfault)<br />
UID: 500 (test)<br />
GID: 500 (test)<br />
Signal: 11 (SEGV)<br />
Timestamp: Mon 2018-10-15 18:53:40 MSK (8s ago)<br />
Command Line: ./segfault<br />
Executable: /home/test/segfault<br />
Control Group: /user.slice/user-500.slice/session-4.scope<br />
Unit: session-4.scope<br />
Slice: user-500.slice<br />
Session: 4<br />
Owner UID: 500 (test)<br />
Boot ID: d93a5fb5f9f44f25838f9d6d4e9486dc<br />
Machine ID: 30878809ed378edf3a2b36e25ad5fa70<br />
Hostname: kwork-x86-64.localdomain<br />
Storage: /var/lib/systemd/coredump/core.segfault.500.d93a5fb5f9f44f25838f9d6d4e9486dc.26285.1539618820000000.lz4<br />
Message: Process 26285 (segfault) of user 500 dumped core.<br />
<br />
Stack trace of thread 26285:<br />
#0 0x00000000004004e5 n/a (/home/test/segfault)<br />
<br />
<br />
== Примечания ==<br />
{{примечания}}<br />
<br />
[[Категория:Features]]<br />
{{Category navigation|title=Features|category=Features|sortkey={{SUBPAGENAME}}}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Localization/General_Glossary&diff=42806
Localization/General Glossary
2018-10-02T07:23:04Z
<p>217.15.195.17: /* Глоссарий общих терминов */</p>
<hr />
<div>== '''Глоссарий общих терминов''' ==<br />
{| class="wikitable sortable"<br />
|-<br />
! English !! Русский !! Примечания<br />
|-<br />
| '''A''' || || <br />
|-<br />
| account || учётная запись || <br />
|-<br />
| activity || комната || <br />
|-<br />
| application for programs || назначение программ || <br />
|-<br />
| application launcher || меню запуска приложений || <br />
|-<br />
| application documentation || руководство пользователя приложения || <br />
|-<br />
| '''B''' || || <br />
|-<br />
| back reference || обратная ссылка || <br />
|-<br />
| binary builds || бинарные сборки || <br />
|-<br />
| binary packages || установочные пакеты || <br />
|-<br />
| binary releases || готовые сборки || <br />
|-<br />
| bookmarked locations || избранные папки || <br />
|-<br />
| '''C''' || || <br />
|-<br />
| click || щёлкнуть по (чему-то) / нажать (что-то) || <br />
|-<br />
| combo box || поле со списком || <br />
|-<br />
| common menu || стандартное меню || <br />
|-<br />
| connection activation was enqueued || запланировано установление соединения || <br />
|-<br />
| contiguous group of files || файлы, расположенные в списке последовательно || <br />
|-<br />
| customization || пользовательские параметры || <br />
|-<br />
| '''D''' || || <br />
|-<br />
| debug || отладка || НЕ «исправление ошибок»<br />
|-<br />
| default application || приложение, назначенное по умолчанию || <br />
|-<br />
| dependencies || зависимости || <br />
|-<br />
| detailed tree view || подробное древовидное представление || <br />
|-<br />
| directory || каталог || НЕ «директория»<br />
|-<br />
| drop down box || раскрывающийся список || <br />
|-<br />
| '''F''' || || <br />
|-<br />
| fallback language || резервный язык || <br />
|-<br />
| file manager || диспетчер файлов || <br />
|-<br />
| folder || папка || <br />
|-<br />
| folder view || область просмотра папок || <br />
|-<br />
| font style || начертание шрифта || <br />
|-<br />
| found text || найденные вхождения искомого текста || (когда речь идёт о замене текста)<br />
|-<br />
| '''G''' || || <br />
|-<br />
| GUI || графический интерфейс пользователя || It is a GUI frontend = [программа] предоставляет графический интерфейс<br />
|-<br />
| '''H''' || || <br />
|-<br />
| history || журнал || <br />
|-<br />
| hover controlled focus || смена фокуса по наведению мыши || <br />
|-<br />
| '''I''' || || <br />
|-<br />
| icon || значок || НЕ «иконка»<br />
|-<br />
| immediate deletion || удаление без запроса подтверждения || <br />
|-<br />
| '''L''' || || <br />
|-<br />
| label || ярлык || НЕ «ярлычок»<br />
|-<br />
| layout || представление || (представление папки)<br />
|-<br />
| location bar || строка адреса || НЕ «адресная строка»<br />
|-<br />
| lock file || файл блокировки || <br />
|-<br />
| '''M''' || || <br />
|-<br />
| main window || главное окно || НЕ «основное»<br />
|-<br />
| maintainer || сопровождающий || (участник проекта)<br />
|-<br />
| menu bar || строка меню || НЕ «панель»<br />
|-<br />
| mouse gesture || росчерк мыши || <br />
|-<br />
| mouse wheel || колесо мыши || НЕ «колёсико»<br />
|-<br />
| music player || музыкальный проигрыватель || НЕ «плеер»<br />
|-<br />
| '''N''' || || <br />
|-<br />
| natural sorting || естественная алфавитно-числовая сортировка || <br />
|-<br />
| navigation panel || панель навигации || <br />
|-<br />
| note || примечание || <br />
|-<br />
| Note:/Note that: || Внимание: || Вариант: «Важно:»<br />
|-<br />
| '''O''' || || <br />
|-<br />
| options || параметры || <br />
|-<br />
| original author || автор первоначальной версии || <br />
|-<br />
| '''P''' || || <br />
|-<br />
| pixel || пиксел || НЕ «пиксель»<br />
|-<br />
| placeholder || заполнитель || <br />
|-<br />
| Plasma desktop || окружение рабочего стола Plasma || НЕ «оболочка»<br />
|-<br />
| plugin || расширение, модуль || <br />
|-<br />
| private key || закрытый ключ || <br />
|-<br />
| public key || открытый ключ || <br />
|-<br />
| '''R''' || || <br />
|-<br />
| radio group || группа переключателей || <br />
|-<br />
| recent files || последние файлы || НЕ «недавние»<br />
|-<br />
| '''S''' || || <br />
|-<br />
| screenshot || снимок экрана || НЕ «скриншот»<br />
|-<br />
| search bar || строка поиска || <br />
|-<br />
| search box || строка поиска || <br />
|-<br />
| settings || параметры || НЕ «настройки»<br />
|-<br />
| slider || ползунок || НЕ «бегунок»<br />
|-<br />
| sloppy focus || нечёткий фокус || <br />
|-<br />
| sort || сортировка (пункт меню) / упорядочить (элементы в списке) || <br />
|-<br />
| spin box || счётчик || <br />
|-<br />
| sub-property || вложенное условие || Вариант: «дополнительный параметр»<br />
|-<br />
| submenu || вложенное меню || НЕ «подменю»<br />
|-<br />
| System Settings || приложение «Параметры системы» || <br />
|-<br />
| system tray || системный лоток || <br />
|-<br />
| '''T''' || || <br />
|-<br />
| task bar || панель задач || <br />
|-<br />
| task manager || диспетчер задач || <br />
|-<br />
| text area || поле редактирования текста || <br />
|-<br />
| text box || текстовое поле || НЕ «блок»<br />
|-<br />
| text label || подпись || <br />
|-<br />
| tip || подсказка || <br />
|-<br />
| tool tip || всплывающая подсказка || <br />
|-<br />
| toolbar || панель инструментов || <br />
|-<br />
| tree || дерево || <br />
|-<br />
| tree menu || древовидное меню || <br />
|-<br />
| tree view || разворачиваемый список || <br />
|-<br />
| '''U''' || || <br />
|-<br />
| uncheck || снять отметку с флажка ||<br />
|-<br />
| unmounting || размонтирование / удаление || <br />
|-<br />
| '''W''' || || <br />
|-<br />
| windows manager || диспетчер окон || <br />
|-<br />
| writeback memory || обратно записываемая память ||<br />
|}<br />
<br />
{{Category navigation|title=Localization|category=Localization|sortkey=*}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Localization/Styleguide&diff=42695
Localization/Styleguide
2018-09-14T12:27:11Z
<p>217.15.195.17: /* Рукодводство по стилю */</p>
<hr />
<div>''Страница находится в стадии разработки''<br><br />
<br />
'''РУКОВОДСТВО ПО СТИЛЮ'''<br><br />
Приведённое ниже руководство по стилю будет полезно как переводчикам, так и техническим писателям.<br />
<br />
=== Заголовки ===<br />
Заголовок должен обладать смысловой и синтаксической полнотой, а также лаконичностью. Не рекомендуется начинать заголовки со слов, не относящихся к самому содержанию, а характеризующих изложение. Заголовки структурных элементов следующего уровня и заголовок исходного структурного элемента должны соответствовать друг другу по смыслу. Следующим друг за другом однородным по смыслу элементам даются заголовки, однородные по форме и содержанию.<br />
<br />
{| class="wikitable"<br />
|-<br />
! РЕКОМЕНДУЕТСЯ !! НЕ РЕКОМЕНДУЕТСЯ<br />
|-<br />
| Пользовательский интерфейс || Описание пользовательского интерфейса<br />
|-<br />
| Функциональные возможности || Сведения о функциональных возможностях программы<br />
|-<br />
| Передача данных из компонента «Расчёт» в компонент «Анализ» || Передача данных <br />
Передача данных в «Анализ»<br />
|-<br />
| Заголовок раздела «Действия с объектом» для подразделов: «Создание объекта»; «Редактирование объекта»; «Удаление объекта». <br />
|| Заголовок раздела «Объект и его свойства» для подразделов: «Создание объекта»; «Редактирование объекта»; «Удаление объекта».<br />
|-<br />
| «Создание объекта»; «Редактирование объекта»; «Удаление объекта».<br />
|| «Создание объекта»; «Объект и его редактирование»; «Удаление».<br />
|}<br />
<br />
=== Структурированное описание однородных объектов, действий, процессов ===<br />
Изложение при перечислении однородных объектов строится следующим образом: <br />
Титульная фраза с собирательным словом в именительном падеже: перечисление через запятую.<br />
{| class="wikitable"<br />
|-<br />
! ПРАВИЛЬНО !! НЕПРАВИЛЬНО<br />
|-<br />
| В базовую комплектацию программного комплекса входят следующие компоненты: компонент «а», компонент «б» и компонент «в». <br />
|| Базовая комплектация программного комплекса состоит из следующих компонентов: компонента «а», компонента «б» и компонента «в».<br />
|}<br />
<br />
=== Оформление списков ===<br />
Уровни списка:<br><br />
уровень 1 — разделы;<br><br />
уровень 2 — подразделы;<br><br />
уровень 3 — пункты;<br><br />
уровень 4 — подпункты.<br />
<br />
==== Пункты ====<br />
Пунктами перечисления могут быть однородные члены предложения, отдельные предложения или абзацы из нескольких предложений. Если пунктами перечисления являются однородные члены, они согласуются в падеже с собирательным словом в именительном падеже.<br />
<br />
==== Знаки препинания при перечислении ====<br />
{| class="wikitable"<br />
|-<br />
! Однородные члены предложения (I) <br />
| Все пункты записываются со строчной буквы, после каждого пункта ставится «;», после последнего пункта ставится «.».<br />
|-<br />
! Абзацы из нескольких предложений (II) <br />
| Все пункты записываются с прописной буквы, конце каждого предложения ставится точка.<br />
|-<br />
! Отдельные предложения <br />
| Возможны оба варианта (I) и (II).<br />
|}<br />
<br />
=== Описание действий в пользовательском интерфейсе ===<br />
При описании одношагового действия цель и предпринимаемое действие описываются в одном предложении, начинающемся со слов «Для того чтобы...», «Чтобы...» или «Для...». При этом действие описывается глаголом в повелительном наклонении. Далее после слов «В результате этого действия...» описывается результат действия. <br><br />
'''Пример''': ''Чтобы сохранить данные в файле, нажмите кнопку «Сохранить». В результате этого действия данные сохраняются в файле.<br><br />
<br />
При описании многошагового действия используется титульная фраза и перечисление шагов процедуры.''<br><br />
'''Пример''': ''Чтобы переместить объект из одного списка в другой, выполните следующие действия: 1) Подведите указатель мыши к значку объекта в левом списке. 2) Щёлкните левой кнопкой мыши и, не отпуская её, переместите указатель мыши в область правого списка. 3) Отпустите левую клавишу мыши. Объект добавлен в список выбранных объектов.''<br />
<br />
=== Правила включения в текст иллюстраций, таблиц и других специализированных видов подачи информации ===<br />
Текст наименования таблицы или иллюстрации имеет следующую форму: имя существительное в именительном падеже и его зависимые слова или несколько именных групп подобной структуры, соединённых сочинительной связью.<br><br />
'''Пример''': ''Снимок экрана 2. Форматирование дискеты и выбор различных видов форматирования''.<br><br />
'''Пример''': ''Таблица 5. Функциональные возможности настройки печати.''<br />
<br />
=== Употребление терминологии для обозначения специализированных понятий ===<br />
Не допускается варьирование терминологии на протяжении отдельных документов и всего комплекта документации пользователя в целом. Употребление терминологии подчиняется правилам единообразного изложения.<br><br />
Не допускается употребление вместо специализированных терминов слов и выражений, заимствованных из профессионального жаргона.<br><br />
В том числе исключаются из употребления следующие слова и выражения:<br><br />
- обиходные заимствования и транслитерации англоязычных выражений (например, «иконка» вместо правильного «значок», «чекбокс» вместо «флажок», «бэкап» вместо «резервное копирование» и т.д.);<br><br />
- обиходные сложносокращённые образования (например, «сисадмин» вместо «системный администратор»);<br><br />
- разговорные усечённые формы терминов (например, «операционка» вместо «операционная система», «поисковик» вместо «поисковая машина» и т.д.).<br />
<br />
<br />
''Страница находится в стадии разработки''<br />
<br />
<br />
{{Category navigation|title=Localization|category=Localization|sortkey=*}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Puppetdb&diff=42278
Puppetdb
2018-07-31T12:54:26Z
<p>217.15.195.17: Добавлено описание настройки postgresql для puppetdb, a также расширено описание настройки puppetdb.</p>
<hr />
<div>{{Stub}}<br />
<br />
= Описание =<br />
<br />
PuppetDB - быстрое, масштабируемое и надежное хранилище данных для [[Puppet]]. PuppetDB кэширует данные, созданные Puppet, а также предоставляет расширенные функции на основе мощного API. Используется с СУБД PostgreSQL.<br />
<br />
= Установка =<br />
<br />
Для установки чистого puppetdb достаточно:<br />
<source lang="bash">$ apt-get install puppetdb</source><br />
<br />
= Настройка =<br />
<br />
Предварительно, для корректной работы puppetdb требует сконфигурированные и запущенные puppet server и puppet client на вашем хосте. Информация об установке и настройке puppet server и puppet client находится в [[Puppet| соответствующей статье]].<br />
<br />
Для примера настройки puppetdb возьмем следующую конфигурацию:<br />
* Хост: '''puppet.server.local'''<br />
* IP: '''192.168.0.2'''<br />
<br />
== Настройка postgresql ==<br />
<br />
Для работы puppetdb необходимы доступная по сети [[PostgreSQL|сервер PostgreSQL]], а также расширение pg_trgm.<br />
<br />
Выполним вход в учетную запись postgresql:<br />
<source lang="bash">$ psql -U postgresql</source><br />
<br />
Установим расширение pg_trgm:<br />
<source lang="sql"># CREATE EXTENSION pg_trgm;</source><br />
<br />
Предварительно установим дополнительные компоненты:<br />
<source lang="bash">$ apt-get install postgresql10 postgresql10-server postgresql10-contrib</source><br />
<br />
Перед запуском postgresql необходимо создать системные базы данных:<br />
<source lang="bash">$ /etc/init.d/postgresql initdb</source><br />
<br />
Запустим службу postgresql:<br />
<source lang="bash">$ service postgresql start</source><br />
<br />
Для включения службы по умолчанию, выполним:<br />
<source lang="bash">$ systemctl enable postgresql.service</source><br />
<br />
Создадим пользователя и базу данных puppetdb:<br />
<source lang="bash"><br />
$ createuser -U postgres -DRSP puppetdb<br />
$ createdb -U postgres -O puppetdb puppetdb<br />
</source><br />
<br />
Проверим доступ к созданной базе данных:<br />
<source lang="bash">$ psql -h 127.0.0.1 -p 5432 -U puppetdb -W puppetdb</source><br />
<br />
При правильной настройки должен появиться доступ к базе:<br />
<source lang="bash"><br />
Пароль пользователя puppetdb: <br />
psql (10.4)<br />
Введите "help", чтобы получить справку.<br />
<br />
puppetdb=><br />
</source><br />
<br />
Предварительная настройка postgresql закончена и можно перейти к настройки puppetdb.<br />
<br />
== Настройка puppetdb ==<br />
<br />
Установим дополнительный пакеты для puppetdb:<br />
<source lang="bash">$ apt-get install puppet puppetdb-terminus</source><br />
<br />
Укажем информацию о нашей базе данных в файле {{path|/etc/puppetdb/conf.d/database.ini}}<br />
<source lang="ini"><br />
[database]<br />
classname = org.postgresql.Driver<br />
subprotocol = postgresql<br />
<br />
# The database address, i.e. //HOST:PORT/DATABASE_NAME<br />
subname = //127.0.0.1:5432/puppetdb<br />
<br />
# Connect as a specific user<br />
username = puppetdb<br />
<br />
# Use a specific password<br />
password = YOURPASSWORD<br />
<br />
# How often (in minutes) to compact the database<br />
# gc-interval = 60<br />
<br />
# Number of seconds before any SQL query is considered 'slow'; offending<br />
# queries will not be interrupted, but will be logged at the WARN log level.<br />
log-slow-statements = 10<br />
</source><br />
<br />
Добавим наш ip-адрес в {{path|/etc/puppetdb/conf.d/jetty.ini}}<br />
<source lang="ini"><br />
# Default is `localhost`.<br />
host = 192.168.0.2<br />
</source><br />
<br />
Добавим в секцию '''[main]''' в {{path|/etc/puppet/puppet.conf}}:<br />
<source lang="ini"><br />
[main]<br />
pluginsync = true<br />
storeconfigs = true<br />
storeconfigs_backend = puppetdb<br />
reports = store,puppetdb<br />
</source><br />
<br />
Создадим файл {{path|/etc/puppet/routes.yaml}} со следующим содержимым:<br />
<source land="ini"><br />
---<br />
master:<br />
facts:<br />
terminus: puppetdb<br />
cache: yaml<br />
</source><br />
<br />
Так же создадим {{path|/etc/puppet/puppetdb.conf}}:<br />
<source lang="ini"><br />
[main]<br />
server = puppet.server.local<br />
port = 8081<br />
soft_write_failure = false<br />
</source><br />
<br />
{{Note|В соответствии с [https://docs.puppet.com/puppetdb/1/connect_puppet_master.html официальной документацией], не рекомендуется использовать порт 8080.}}<br />
== Запуск puppetdb ==<br />
<br />
Запустим ssl-setup:<br />
<source lang="bash">$ puppetdb ssl-setup</source><br />
<br />
Перезапустим службы puppet:<br />
<source lang="bash"><br />
$ service puppetdb restart<br />
$ service puppetmaster restart<br />
$ service puppet restart<br />
</source><br />
<br />
Так же для включения служб по умолчанию:<br />
<source lang="bash"><br />
$ systemctl enable puppetdb<br />
$ systemctl enable puppetmaster<br />
$ systemctl enable puppet<br />
</source><br />
<br />
Протестируем после запуска, создадим пример для установки пакетов {{path|/etc/puppet/manifests/site.pp}}:<br />
<source lang="ini"><br />
node 'puppet-server.off.local' {<br />
Package { ensure => installed }<br />
package { 'telnet': }<br />
package { 'openssh-clients': }<br />
package { 'tcpdump': }<br />
}<br />
</source><br />
<br />
..и запустим:<br />
<source lang="bash">$ puppet agent -t</source><br />
<br />
[[Категория:Управление конфигурациями]]</div>
217.15.195.17
https://www.altlinux.org/index.php?title=%D0%A0%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B8_ALT_Linux&diff=42270
Репозитории ALT Linux
2018-07-30T09:16:00Z
<p>217.15.195.17: /* Synapic->Synaptic */</p>
<hr />
<div>{| style="border:1px solid #AAA; background:#F9F9F9; width:250px; margin: 0 0 1em 1em; padding:.2em; float: right;" class=noprint<br />
|-<br />
|[[Image:Information.svg|20x20px]] Полезные ссылки:<br />
* [[Управление_пакетами|Управление пакетами]]<br />
* [[Где_и_как_искать_программы|Где и как искать программы]]<br />
----<br />
* [[Репозиторий_СПО|Что такое репозиторий]]<br />
|}<br />
== Главные правила ==<br />
<br />
* Не следует смешивать несовместимые репозитории, например, репозитории разных версий (следует заметить, что в Synaptic достаточно легко отметить лишнее).<br />
* Обновляя систему с версии на версию, следует отключать старые репозитории при подключении новых. Кроме того, рекомендуется прочитать замечания по обновлению, которые, скорее всего, уже будут доступны на этом сайте. Прыгать через версию не рекомендуется.<br />
<br />
Подключение репозиториев осуществляется записью соответствующей строки в файл /etc/apt/sources.list, либо в произвольный файл, соответствующий шаблону *.list в каталоге /etc/apt/sources.list.d/. C 2011 года существует утилита [[apt-repo]], которая упрощает манипулирование репозиториями в коммандной строке. Так же, подключение и смену репозиториев можно осуществлять посредством графической утилиты [[Synaptic]]. Подробнее это описано в статье [[Управление_пакетами|Управление пакетами]], формат строки-источника описан в разделе "[[Управление_пакетами#src_list_format|Источники репозиториев]]" этой же статьи.<br />
<br />
== Дистрибутивы ==<br />
<br />
Процесс формирования [[Branches|стабильных веток]] и [[Releases|дистрибутивов ALT Linux]] на их основе выглядит так:<br />
<br />
* в рамках [[Sisyphus]] осуществляется текущая разработка (unstable);<br />
* когда приходит время очередной стабильной ветки — сизиф притормаживается;<br />
* альфа-сборки происходят на «медленном» unstable;<br />
* одновременно с фиксацией беты дистрибутива происходит отделение бранча;<br />
* далее некоторое время бранч и сизиф идут почти шаг-в-шаг (происходит копирование);<br />
* когда в сизифе начинают меняться ABI или иная функциональность, бранч уходит «в автоном»;<br />
* дистрибутивы выпускаются на бранче (x.0 и далее x.0.y).<br />
<br />
Например, дистрибутивы семейства 7.0 выпускаются на базе [[Branches/p7|p7/branch]].<br />
<br />
До версии 4.1 включительно для дистрибутивов формировались соответвующие опубликованным образам репозитории — например, для ALT Linux Server 4.0 доступен [http://ftp.altlinux.org/pub/distributions/ALTLinux/4.0/Server/current/ здесь].<br />
<br />
== Стабильные ветки ==<br />
{{main|Branches}}<br />
Каждая [[Branches|стабильная ветка]] (branch) разработки имеет APT-репозиторий. Поскольку стабильные ветки достаточно консервативны по измененениям, то эти репозитории достаточно безопасны для использования вместе с дистрибутивами (совпадающими по мажорной и минорной цифре в версии). Репозитории стабильных веток можно также использовать для обновления на следующие минорные и мажорные версии.<br />
<br />
Начиная с Пятой и Шестой платформы, для платформы сопровождается сразу две ветви: ветвь для выпуска дистрибутивов (p5, p6) и ветвь сообщества (5.1, t6). Ветвь для выпуска дистрибутивов делает упор на стабильность, надежность и тестирование, а ветвь сообщества отличается более свободным допуском и расширяет ветвь для выпуска дистрибутивов новыми пакетами и новыми версиями имеющихся пакетов, оставаясь, в целом, бинарно совместимой с ветвью для выпуска дистрибутивов.<br />
<br />
Для Восьмой платформы по состоянию на первый квартал 2017 года ветка t8 [https://lists.altlinux.org/pipermail/devel/2016-October/201832.html пока не создавалась], текущие задачи решаются в рамках p8.<br />
<br />
p8/branch:<br />
# 32-bit x86<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/i586 classic<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/noarch classic<br />
<br />
# 64-bit x86<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/x86_64 classic<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/x86_64-i586 classic<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux p8/branch/noarch classic<br />
<br />
p7/branch:<br />
# 32-bit x86<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch i586 classic<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch noarch classic<br />
<br />
# 64-bit x86<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch x86_64 classic<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch noarch classic<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch x86_64-i586 classic<br />
<br />
t7/branch:<br />
# 32-bit x86<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch i586 classic<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch noarch classic<br />
<br />
# 64-bit x86<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch x86_64 classic<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch noarch classic<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/t7/branch x86_64-i586 classic<br />
<br />
Наличие третьего репозитория для x86_64 обусловлено необходимостью [[Biarch|поддержки 32-разрядных приложений в 64-разрядной системе]]. Если такая поддержка не требуется, репозиторий x86_64-i586 тоже не нужен.<br />
<br />
== Debuginfo ==<br />
{{main|RPM/debuginfo}}<br />
Начиная с шестой платформы, появился специфический репозиторий [[RPM/debuginfo|debuginfo]]. Репозиторий содержит отладочную информацию для бинарных исполняемых файлов и библиотек. Обычным пользователям может быть полезен для формирования отчётов о проблемах в [http://bugzilla.altlinux.ru багтрекере]. Например, для branch/p7, для x86_64 его можно подключить так:<br />
<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/p7/branch/ x86_64 debuginfo<br />
<br />
== Autoports ==<br />
{{main|Autoports}}<br />
Начиная с ветвей p5/5.1, в качестве частичной замены backports появились репозитории [[Autoports]],<br />
которые содержат автоматически пересобираемые под текущую стабильную ветвь свежие пакеты из Sisyphus.<br />
<br />
Настройка apt для использования [[Autoports]] для ветвей p7/t7 описана в [[Autoports/p7]].<br />
<br />
== Autoimports ==<br />
{{main|Autoimports}}<br />
Пакеты из репозиториев Autoimports отличаются от пакетов в основном репозитории тем, что они получены с помощью систем автоматической конвертации и сборки пакетов и, соответственно, к ним было применено только автоматическое тестирование. Источником для этих репозиториев являются другие дистрибутивы. Перенос заключается в преобразовании spec-файла в соответствии с правилами в ALT Linux и пересборке в соответствующем окружении.<br />
<br />
== Карманы ==<br />
{{main|Карманы}}<br />
Это отдельные мини-репозитории сборочницы ALT Linux, то есть, задания, которые собраны, но не были отправлены в основной репозиторий. Имеют ограниченное время жизни. Удаляются сборочницей либо после помещения в репозиторий, либо в случае длительной неактивности. Не стоит использовать такие репозитории, если о них не было где-то объявлено (рассылки, форум).<br />
<br />
== Sisyphus ==<br />
{{main|Branches/Sisyphus}}<br />
Sisyphus - нестабильный репозиторий, предназначенный для разработчиков решений (приблизительно сравним с Fedora Rawhide, Mandrake Cooker, Debian unstable+experimental в других проектах), а не для пользователей.<br />
<br />
'''x86'''<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus i586 classic<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus noarch classic<br />
<br />
'''x86-64'''<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus x86_64 classic<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus noarch classic<br />
<br />
'''ARM'''<br />
{{main|Ports/arm}}<br />
{{main|Ports/aarch64}}<br />
<br />
== Зеркала ==<br />
<br />
Также, существуют зеркала репозиториев. <br />
<br />
Вот пример зеркала на яндексе для ветки 5.1:<br />
rpm ftp://mirror.yandex.ru/altlinux/5.1/branch/ i586 classic <br />
rpm ftp://mirror.yandex.ru/altlinux/5.1/branch/ noarch classic<br />
<br />
[http://www.altlinux.ru/go/download/ Список доступных зеркал]<br />
<br />
== Устаревшие репозитории ==<br />
=== Updates ===<br />
<br />
Для каждой стабильной ветки и дистрибутивов вплоть до 4.1 существовали<br />
обновления (updates), содержащие критичные исправления по безопасности и функционалу. Обратите внимание: в updates отсутствуют отдельные репозитории для noarch-пакетов: noarch-пакеты включены в архитектурно-зависимые репозитории.<br />
<br />
В настоящее время в качестве Updates используются стабильные ветви.<br />
<br />
Для дистрибутивов, выпущенных на ветке 4.0:<br />
# x86<br />
rpm http://updates.altlinux.com/4.0/ i586 classic<br />
<br />
# x86-64<br />
rpm http://updates.altlinux.com/4.0/ x86_64 classic<br />
<br />
=== Backports ===<br />
<br />
Для каждой стабильной ветки вплоть до 4.1 существовали [[BackPorts|backports]]: репозитории, в которые майнтайнеры переносят (пересобирают) более свежие пакеты, которые нельзя переложить в сами ветки из-за политики подготовки веток. Эта работа производится и тестируется вручную и в последнее время практически заглохла.<br />
<br />
В настоящее время вместо backports используются [[Autoports]] и ветви, сопровождаемые Team (branch/5.1, branch/t6).<br />
<br />
branch/4.0:<br />
# x86<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/backports/4.0 i586 classic<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/backports/4.0 noarch classic<br />
<br />
# x86-64<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/backports/4.0 x86_64 classic<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/backports/4.0 noarch classic<br />
branch/4.1 (на данный момент - только для x86)<br />
# x86<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/backports/4.1 i586 classic<br />
rpm http://ftp.altlinux.org/pub/distributions/ALTLinux/backports/4.1 noarch classic<br />
[[Категория:Repositories|*]]<br />
{{Category navigation|title=Репозитории|category=Repositories|sortkey={{SUBPAGENAME}}}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=%D0%9F%D0%BE%D1%87%D1%82%D0%BE%D0%B2%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_Postfix_Dovecot&diff=42255
Почтовый сервер Postfix Dovecot
2018-07-26T14:56:18Z
<p>217.15.195.17: /* Установка и предварительная настройка */</p>
<hr />
<div>{{stub}}<br />
В этой статье описывается минимальная настройка почтового сервера на основе Postfix (SMTP) и Dovecot (IMAP, POP3) c авторизаций пользователей через LDAP в Samba4 DC.<br><br />
Предполагается что уже есть настройенная Samba4 в роли контроллера домена. Исходные данные:<br />
*Домен: '''test.alt'''<br />
*Контроллер домена: '''dc.test.alt'''<br />
*Почтовый сервер: '''mail.test.alt'''<br />
*Сгенерированные сертификаты и ключи для Dovecot и Postfix<br />
*Пользователь для доступа к LDAP серверу: ldapbind<br />
Как самостоятельно сгенерировать SSL сертификаты можно посмотреть [[Nextcloud#Создание_самоподписных_SSL_сертификатов|тут]]<br />
== Установка и предварительная настройка ==<br />
Для работы почтового сервера необходимо установить следующие пакеты:<br />
<source lang="bash"># apt-get install postfix-dovecot postfix-ldap postfix dovecot postfix-tls</source><br />
Проверим работу DNS:<br />
<pre># dig +short -t A dc.test.alt<br />
10.10.105.1<br />
# dig +short -t A mail.test.alt<br />
10.10.105.2</pre><br />
Проверим доступ к LDAP-серверу:<br />
<pre># ldapsearch -h dc.test.alt -p 389 -W -D "ldapbind@test.alt" -b "cn=Users,dc=test,dc=alt"</pre><br />
Если подключения не произошло и появилась ошибка связанная с безопасностью подключения:<br><br />
<pre>ldap_bind: Strong(er) authentication required (8) <br> <br />
additional info: BindSimple: Transport encryption required. </pre><br />
То необходимо добавить строчку в smb.conf:<br><br />
<pre> ldap server require strong auth = No </pre><br />
Это команда должна выдать информацию о пользователях.<br />
Все почтовые ящики пользователей будут хранится в директории {{path|/var/vmail}} и обрабатываться системным пользователем vmail c домашней директорией {{path|/var/vmail}}.<br><br />
Создадим пользователя vmail и его домашнюю директорию:<br />
<pre># useradd -b /var -m -s /bin/false vmail</pre><br />
<br />
== Настройка Dovecot ==<br />
Создадим файл {{path|/etc/dovecot/dovecot-ldap.conf.ext}} параметров подключения Dovecot к LDAP:<br />
<pre># Контроллер домена (сервер LDAP)<br />
hosts = dc.test.alt<br />
<br />
# Пользователь и пароль для подключения к LDAP<br />
dn = ldapbind@test.alt<br />
dnpass = 'PaSSword'<br />
<br />
# Следующая опция позволяет аутентифицировать пользователей с помощью подключения к серверу LDAP с их аутентификационными данными<br />
auth_bind = yes<br />
<br />
# Преобразуем все имена пользователей в нижний регистр<br />
auth_bind_userdn = %Lu<br />
<br />
# Используем защищенное LDAP соединение<br />
tls = yes<br />
<br />
# Версия протокола LDAP<br />
ldap_version = 3<br />
<br />
# Где искать в LDAP<br />
base = cn=Users,dc=test,dc=alt<br />
deref = never<br />
<br />
# Искать во всех вложенных объектах<br />
scope = subtree<br />
<br />
# Использовать фильтр для поиска пользователей - искать только пользователей (sAMAccountType=805306368),<br />
# у которых совпадает c переданным логином IMAP или имя пользователя (userPrincipalName=%Lu) или электронная почта (mail=%Lu)<br />
user_filter = (&(sAMAccountType=805306368)(|(userPrincipalName=%Lu)(mail=%Lu)))<br />
<br />
# Указываем расположение домашнего каталога подсоединенного пользователя, параметр "%$" будет заменен на значение userPrincipalName (формата user@domain)<br />
user_attrs = userPrincipalName=home=/var/vmail/%$<br />
<br />
# Использовать фильтр для паролей<br />
pass_filter = (&(sAMAccountType=805306368)(userPrincipalName=%Lu))<br />
<br />
# Указываем имя пользователя найденное в LDAP<br />
pass_attrs = userPrincipalName=user</pre><br />
Ссылка на этот конфигурационный файл есть в файле {{path|/etc/dovecot/conf.d/auth-ldap.conf.ext}}:<br />
<pre>passdb {<br />
driver = ldap<br />
args = /etc/dovecot/dovecot-ldap.conf.ext<br />
}<br />
userdb {<br />
driver = ldap<br />
args = /etc/dovecot/dovecot-ldap.conf.ext<br />
}<br />
</pre><br />
Далее настраиваем параметры аутентификации в файле {{path|/etc/dovecot/conf.d/10-auth.conf}}:<br />
<pre># Добавляемое к имени пользователю имя домена по умочанию (если пользователь введет имя user, то для dovecot он будет user@test.alt)<br />
auth_default_realm = test.alt<br />
<br />
# Преобразуем все имена пользователей в нижний регистр<br />
auth_username_format = %Lu<br />
<br />
# Указываем методы аутентификации<br />
auth_mechanisms = plain login<br />
<br />
# Добавляем поддержку аутентификации в LDAP<br />
!include auth-ldap.conf.ext</pre><br />
Далее настраиваем параметры работы с почтой в файле {{path|/etc/dovecot/conf.d/10-mail.conf}}:<br />
<pre># Настроим формат и расположение почты пользователей, %h - указывает, что почта располагается в домашнем каталоге пользователя установленном в параметре user_attrs файла dovecot-ldap.conf.ext<br />
mail_location = maildir:%h<br />
<br />
# Указываем системного пользователя, созданного реннее, для работы с почтой и минимальные/максимальные gid/uid пользователей имеющих право работать с почтой (id vmail)<br />
mail_uid = vmail<br />
mail_gid = vmail<br />
first_valid_uid = 1001<br />
last_valid_uid = 1001<br />
first_valid_gid = 1001<br />
last_valid_gid = 1001<br />
<br />
# Метод блокировок записи<br />
mbox_write_locks = fcntl</pre><br />
Далее настраваем параметра SSL Dovecot в файле {{path|/etc/dovecot/conf.d/10-ssl.conf}}:<br />
<pre>ssl = required<br />
ssl_cert = </etc/dovecot/imap.test.alt.crt<br />
ssl_key = </etc/dovecot/imap.test.alt.key</pre><br />
Далее настраиваем сокет авторизации для postfix. Он настраивается в файле {{path|/etc/dovecot/conf.d/10-master.conf}} секция {{path|service auth}}:<br />
<pre>service auth {<br />
unix_listener auth-userdb {<br />
mode = 0660<br />
user = vmail<br />
}<br />
unix_listener /var/spool/postfix/private/auth {<br />
mode = 0660<br />
user = postfix<br />
group = postfix<br />
}<br />
}</pre><br />
В этом же файле настроим сокет для приема писем из postfix-a - секция {{path|service lmtp}}:<br />
<pre>service lmtp {<br />
unix_listener /var/spool/postfix/private/dovecot-lmtp {<br />
group = postfix<br />
mode = 0600<br />
user = postfix<br />
}<br />
user = vmail<br />
}</pre><br />
В файле {{path|/etc/dovecot/dovecot.conf}} можно все оставить по умолчанию, например он может выглядеть так:<br />
<pre>protocols = imap pop3 lmtp<br />
listen = *<br />
base_dir = /var/run/dovecot/<br />
login_greeting = Dovecot ready.<br />
dict {<br />
}<br />
!include conf.d/*.conf</pre><br />
Теперь можно запускать и добавлять в автозагрузку сервис dovecot:<br />
<pre># systemctl enable dovecot<br />
# systemctl start dovecot</pre><br />
<br />
== Настройка Postfix ==<br />
Настраиваем параметры postfix в файле {{path|/etc/postfix/main.cf}}:<br />
<pre># Использовать ipv4 и слушать на всех интерфейсах<br />
inet_protocols = ipv4<br />
inet_interfaces = all<br />
<br />
# Следующие параметры оставляем без изменения<br />
queue_directory = /var/spool/postfix<br />
command_directory = /usr/sbin<br />
daemon_directory = /usr/libexec/postfix<br />
data_directory = /var/lib/postfix<br />
mail_owner = postfix<br />
<br />
# Задаем полное имя сервера, которым postfix будет представляться при отправке/получении почты<br />
myhostname = mail.test.alt<br />
<br />
# Задаем имя нашего домена<br />
mydomain = test.alt<br />
<br />
# Имя от которого будут посылаться письма с локальной машины<br />
myorigin = mail.test.alt<br />
<br />
# Параметр указывает для каких доменов почта будет доставляться локально без пересылки на другие сервера<br />
mydestination = $myhostname, localhost.$mydomain, localhost<br />
<br />
# Указываем как доставляется локальная почта<br />
local_transport = virtual<br />
<br />
# Указываем как определять локальных пользователей<br />
local_recipient_maps = $virtual_mailbox_maps<br />
<br />
# Номер ошибки посылаемый оправителю при отказе<br />
unknown_local_recipient_reject_code = 550<br />
<br />
# Задаем список виртуальных доменов<br />
virtual_mailbox_domains = test.alt<br />
<br />
# Список разрешенных пользователей<br />
virtual_mailbox_maps = ldap:/etc/postfix/ldap/local_recipients.cf<br />
<br />
# Указываем сокет для доставки писем в dovecot<br />
virtual_transport = lmtp:unix:private/dovecot-lmtp<br />
<br />
# Указываем сертификаты, ключи SSL и включаем безопасные соединения и аутентификацию <br />
smtpd_tls_cert_file = /etc/postfix/smtp.test.alt.crt<br />
smtpd_tls_key_file = /etc/postfix/smtp.test.alt.key<br />
smtpd_use_tls = yes<br />
smtpd_tls_auth_only = yes<br />
<br />
# Настраиваем правила фильтрации писем<br />
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access<br />
<br />
# Указываем опции SASL аутентификации через dovecot<br />
smtpd_sasl_auth_enable = yes<br />
smtpd_sasl_security_options = noanonymous<br />
broken_sasl_auth_clients = yes<br />
smtpd_sasl_type = dovecot<br />
smtpd_sasl_path = private/auth<br />
smtpd_sasl_local_domain = $myorigin</pre><br />
Для работы smtps раскоментируем следующие строки в файле {{path|/etc/postfix/master.cf}}:<br />
<pre>smtps inet n - - - - smtpd<br />
-o smtpd_tls_wrappermode=yes<br />
-o smtpd_sasl_auth_enable=yes<br />
-o smtpd_client_restrictions=permit_sasl_authenticated,reject<br />
</pre><br />
Далее создадим каталог ldap и добавим файлы с правилами, указанные выше:<br />
<pre># mkdir /etc/postfix/ldap</pre><br />
В этом каталоге создадим файл {{path|local_recipients.cf}}, который проверяет считать ли пользователя локальным:<br />
<pre>debuglevel = 0<br />
version = 3<br />
server_host = dc.test.alt<br />
bind_dn = ldapbind@test.alt<br />
bind_pw = PaSSword<br />
search_base = dc=test,dc=alt<br />
search_scope = subtree<br />
query_filter = (&(|(userPrincipalName=%u@%d)(mail=%u@%d)(otherMailbox=%u@%d))(sAMAccountType=805306368))<br />
result_attribute = userPrincipalName<br />
cache = no</pre><br />
Запускаем и добавляем в автозагрузку сервис postfix:<br />
<pre># systemctl enable postfix<br />
# systemctl start postfix</pre><br />
<br />
== Проверка работоспособности ==<br />
Создадим в домене двух пользователей u01test (u01test@test.alt) и u02test (u02test@test.alt). Настроим почтовый клиент и попробуем посылать письма от одного пользователя другому.</div>
217.15.195.17
https://www.altlinux.org/index.php?title=%D0%9F%D0%BE%D1%87%D1%82%D0%BE%D0%B2%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_Postfix_Dovecot&diff=42240
Почтовый сервер Postfix Dovecot
2018-07-25T11:34:20Z
<p>217.15.195.17: /* Настройка Postfix */</p>
<hr />
<div>{{stub}}<br />
В этой статье описывается минимальная настройка почтового сервера на основе Postfix (SMTP) и Dovecot (IMAP, POP3) c авторизаций пользователей через LDAP в Samba4 DC.<br><br />
Предполагается что уже есть настройенная Samba4 в роли контроллера домена. Исходные данные:<br />
*Домен: '''test.alt'''<br />
*Контроллер домена: '''dc.test.alt'''<br />
*Почтовый сервер: '''mail.test.alt'''<br />
*Сгенерированные сертификаты и ключи для Dovecot и Postfix<br />
*Пользователь для доступа к LDAP серверу: ldapbind<br />
Как самостоятельно сгенерировать SSL сертификаты можно посмотреть [[Nextcloud#Создание_самоподписных_SSL_сертификатов|тут]]<br />
== Установка и предварительная настройка ==<br />
Для работы почтового сервера необходимо установить следующие пакеты:<br />
<source lang="bash"># apt-get install postfix-dovecot postfix-ldap postfix dovecot</source><br />
Проверим работу DNS:<br />
<pre># dig +short -t A dc.test.alt<br />
10.10.105.1<br />
# dig +short -t A mail.test.alt<br />
10.10.105.2</pre><br />
Проверим доступ к LDAP-серверу:<br />
<pre># ldapsearch -h dc.test.alt -p 389 -W -D "ldapbind@test.alt" -b "cn=Users,dc=test,dc=alt"</pre><br />
Если подключения не произошло и появилась ошибка связанная с безопасностью подключения:<br><br />
<pre>ldap_bind: Strong(er) authentication required (8) <br> <br />
additional info: BindSimple: Transport encryption required. </pre><br />
То необходимо добавить строчку в smb.conf:<br><br />
<pre> ldap server require strong auth = No </pre><br />
Это команда должна выдать информацию о пользователях.<br />
Все почтовые ящики пользователей будут хранится в директории {{path|/var/vmail}} и обрабатываться системным пользователем vmail c домашней директорией {{path|/var/vmail}}.<br><br />
Создадим пользователя vmail и его домашнюю директорию:<br />
<pre># useradd -b /var -m -s /bin/false vmail</pre><br />
<br />
== Настройка Dovecot ==<br />
Создадим файл {{path|/etc/dovecot/dovecot-ldap.conf.ext}} параметров подключения Dovecot к LDAP:<br />
<pre># Контроллер домена (сервер LDAP)<br />
hosts = dc.test.alt<br />
<br />
# Пользователь и пароль для подключения к LDAP<br />
dn = ldapbind@test.alt<br />
dnpass = 'PaSSword'<br />
<br />
# Следующая опция позволяет аутентифицировать пользователей с помощью подключения к серверу LDAP с их аутентификационными данными<br />
auth_bind = yes<br />
<br />
# Преобразуем все имена пользователей в нижний регистр<br />
auth_bind_userdn = %Lu<br />
<br />
# Используем защищенное LDAP соединение<br />
tls = yes<br />
<br />
# Версия протокола LDAP<br />
ldap_version = 3<br />
<br />
# Где искать в LDAP<br />
base = cn=Users,dc=test,dc=alt<br />
deref = never<br />
<br />
# Искать во всех вложенных объектах<br />
scope = subtree<br />
<br />
# Использовать фильтр для поиска пользователей - искать только пользователей (sAMAccountType=805306368),<br />
# у которых совпадает c переданным логином IMAP или имя пользователя (userPrincipalName=%Lu) или электронная почта (mail=%Lu)<br />
user_filter = (&(sAMAccountType=805306368)(|(userPrincipalName=%Lu)(mail=%Lu)))<br />
<br />
# Указываем расположение домашнего каталога подсоединенного пользователя, параметр "%$" будет заменен на значение userPrincipalName (формата user@domain)<br />
user_attrs = userPrincipalName=home=/var/vmail/%$<br />
<br />
# Использовать фильтр для паролей<br />
pass_filter = (&(sAMAccountType=805306368)(userPrincipalName=%Lu))<br />
<br />
# Указываем имя пользователя найденное в LDAP<br />
pass_attrs = userPrincipalName=user</pre><br />
Ссылка на этот конфигурационный файл есть в файле {{path|/etc/dovecot/conf.d/auth-ldap.conf.ext}}:<br />
<pre>passdb {<br />
driver = ldap<br />
args = /etc/dovecot/dovecot-ldap.conf.ext<br />
}<br />
userdb {<br />
driver = ldap<br />
args = /etc/dovecot/dovecot-ldap.conf.ext<br />
}<br />
</pre><br />
Далее настраиваем параметры аутентификации в файле {{path|/etc/dovecot/conf.d/10-auth.conf}}:<br />
<pre># Добавляемое к имени пользователю имя домена по умочанию (если пользователь введет имя user, то для dovecot он будет user@test.alt)<br />
auth_default_realm = test.alt<br />
<br />
# Преобразуем все имена пользователей в нижний регистр<br />
auth_username_format = %Lu<br />
<br />
# Указываем методы аутентификации<br />
auth_mechanisms = plain login<br />
<br />
# Добавляем поддержку аутентификации в LDAP<br />
!include auth-ldap.conf.ext</pre><br />
Далее настраиваем параметры работы с почтой в файле {{path|/etc/dovecot/conf.d/10-mail.conf}}:<br />
<pre># Настроим формат и расположение почты пользователей, %h - указывает, что почта располагается в домашнем каталоге пользователя установленном в параметре user_attrs файла dovecot-ldap.conf.ext<br />
mail_location = maildir:%h<br />
<br />
# Указываем системного пользователя, созданного реннее, для работы с почтой и минимальные/максимальные gid/uid пользователей имеющих право работать с почтой (id vmail)<br />
mail_uid = vmail<br />
mail_gid = vmail<br />
first_valid_uid = 1001<br />
last_valid_uid = 1001<br />
first_valid_gid = 1001<br />
last_valid_gid = 1001<br />
<br />
# Метод блокировок записи<br />
mbox_write_locks = fcntl</pre><br />
Далее настраваем параметра SSL Dovecot в файле {{path|/etc/dovecot/conf.d/10-ssl.conf}}:<br />
<pre>ssl = required<br />
ssl_cert = </etc/dovecot/imap.test.alt.crt<br />
ssl_key = </etc/dovecot/imap.test.alt.key</pre><br />
Далее настраиваем сокет авторизации для postfix. Он настраивается в файле {{path|/etc/dovecot/conf.d/10-master.conf}} секция {{path|service auth}}:<br />
<pre>service auth {<br />
unix_listener auth-userdb {<br />
mode = 0660<br />
user = vmail<br />
}<br />
unix_listener /var/spool/postfix/private/auth {<br />
mode = 0660<br />
user = postfix<br />
group = postfix<br />
}<br />
}</pre><br />
В этом же файле настроим сокет для приема писем из postfix-a - секция {{path|service lmtp}}:<br />
<pre>service lmtp {<br />
unix_listener /var/spool/postfix/private/dovecot-lmtp {<br />
group = postfix<br />
mode = 0600<br />
user = postfix<br />
}<br />
user = vmail<br />
}</pre><br />
В файле {{path|/etc/dovecot/dovecot.conf}} можно все оставить по умолчанию, например он может выглядеть так:<br />
<pre>protocols = imap pop3 lmtp<br />
listen = *<br />
base_dir = /var/run/dovecot/<br />
login_greeting = Dovecot ready.<br />
dict {<br />
}<br />
!include conf.d/*.conf</pre><br />
Теперь можно запускать и добавлять в автозагрузку сервис dovecot:<br />
<pre># systemctl enable dovecot<br />
# systemctl start dovecot</pre><br />
<br />
== Настройка Postfix ==<br />
Настраиваем параметры postfix в файле {{path|/etc/postfix/main.cf}}:<br />
<pre># Использовать ipv4 и слушать на всех интерфейсах<br />
inet_protocols = ipv4<br />
inet_interfaces = all<br />
<br />
# Следующие параметры оставляем без изменения<br />
queue_directory = /var/spool/postfix<br />
command_directory = /usr/sbin<br />
daemon_directory = /usr/libexec/postfix<br />
data_directory = /var/lib/postfix<br />
mail_owner = postfix<br />
<br />
# Задаем полное имя сервера, которым postfix будет представляться при отправке/получении почты<br />
myhostname = mail.test.alt<br />
<br />
# Задаем имя нашего домена<br />
mydomain = test.alt<br />
<br />
# Имя от которого будут посылаться письма с локальной машины<br />
myorigin = mail.test.alt<br />
<br />
# Параметр указывает для каких доменов почта будет доставляться локально без пересылки на другие сервера<br />
mydestination = $myhostname, localhost.$mydomain, localhost<br />
<br />
# Указываем как доставляется локальная почта<br />
local_transport = virtual<br />
<br />
# Указываем как определять локальных пользователей<br />
local_recipient_maps = $virtual_mailbox_maps<br />
<br />
# Номер ошибки посылаемый оправителю при отказе<br />
unknown_local_recipient_reject_code = 550<br />
<br />
# Задаем список виртуальных доменов<br />
virtual_mailbox_domains = test.alt<br />
<br />
# Список разрешенных пользователей<br />
virtual_mailbox_maps = ldap:/etc/postfix/ldap/local_recipients.cf<br />
<br />
# Указываем сокет для доставки писем в dovecot<br />
virtual_transport = lmtp:unix:private/dovecot-lmtp<br />
<br />
# Указываем сертификаты, ключи SSL и включаем безопасные соединения и аутентификацию <br />
smtpd_tls_cert_file = /etc/postfix/smtp.test.alt.crt<br />
smtpd_tls_key_file = /etc/postfix/smtp.test.alt.key<br />
smtpd_use_tls = yes<br />
smtpd_tls_auth_only = yes<br />
<br />
# Настраиваем правила фильтрации писем<br />
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access<br />
<br />
# Указываем опции SASL аутентификации через dovecot<br />
smtpd_sasl_auth_enable = yes<br />
smtpd_sasl_security_options = noanonymous<br />
broken_sasl_auth_clients = yes<br />
smtpd_sasl_type = dovecot<br />
smtpd_sasl_path = private/auth<br />
smtpd_sasl_local_domain = $myorigin</pre><br />
Для работы smtps раскоментируем следующие строки в файле {{path|/etc/postfix/master.cf}}:<br />
<pre>smtps inet n - - - - smtpd<br />
-o smtpd_tls_wrappermode=yes<br />
-o smtpd_sasl_auth_enable=yes<br />
-o smtpd_client_restrictions=permit_sasl_authenticated,reject<br />
</pre><br />
Далее создадим каталог ldap и добавим файлы с правилами, указанные выше:<br />
<pre># mkdir /etc/postfix/ldap</pre><br />
В этом каталоге создадим файл {{path|local_recipients.cf}}, который проверяет считать ли пользователя локальным:<br />
<pre>debuglevel = 0<br />
version = 3<br />
server_host = dc.test.alt<br />
bind_dn = ldapbind@test.alt<br />
bind_pw = PaSSword<br />
search_base = dc=test,dc=alt<br />
search_scope = subtree<br />
query_filter = (&(|(userPrincipalName=%u@%d)(mail=%u@%d)(otherMailbox=%u@%d))(sAMAccountType=805306368))<br />
result_attribute = userPrincipalName<br />
cache = no</pre><br />
Запускаем и добавляем в автозагрузку сервис postfix:<br />
<pre># systemctl enable postfix<br />
# systemctl start postfix</pre><br />
<br />
== Проверка работоспособности ==<br />
Создадим в домене двух пользователей u01test (u01test@test.alt) и u02test (u02test@test.alt). Настроим почтовый клиент и попробуем посылать письма от одного пользователя другому.</div>
217.15.195.17
https://www.altlinux.org/index.php?title=%D0%9F%D0%BE%D1%87%D1%82%D0%BE%D0%B2%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_Postfix_Dovecot&diff=42239
Почтовый сервер Postfix Dovecot
2018-07-25T07:46:02Z
<p>217.15.195.17: /* Настройка Dovecot */</p>
<hr />
<div>{{stub}}<br />
В этой статье описывается минимальная настройка почтового сервера на основе Postfix (SMTP) и Dovecot (IMAP, POP3) c авторизаций пользователей через LDAP в Samba4 DC.<br><br />
Предполагается что уже есть настройенная Samba4 в роли контроллера домена. Исходные данные:<br />
*Домен: '''test.alt'''<br />
*Контроллер домена: '''dc.test.alt'''<br />
*Почтовый сервер: '''mail.test.alt'''<br />
*Сгенерированные сертификаты и ключи для Dovecot и Postfix<br />
*Пользователь для доступа к LDAP серверу: ldapbind<br />
Как самостоятельно сгенерировать SSL сертификаты можно посмотреть [[Nextcloud#Создание_самоподписных_SSL_сертификатов|тут]]<br />
== Установка и предварительная настройка ==<br />
Для работы почтового сервера необходимо установить следующие пакеты:<br />
<source lang="bash"># apt-get install postfix-dovecot postfix-ldap postfix dovecot</source><br />
Проверим работу DNS:<br />
<pre># dig +short -t A dc.test.alt<br />
10.10.105.1<br />
# dig +short -t A mail.test.alt<br />
10.10.105.2</pre><br />
Проверим доступ к LDAP-серверу:<br />
<pre># ldapsearch -h dc.test.alt -p 389 -W -D "ldapbind@test.alt" -b "cn=Users,dc=test,dc=alt"</pre><br />
Если подключения не произошло и появилась ошибка связанная с безопасностью подключения:<br><br />
<pre>ldap_bind: Strong(er) authentication required (8) <br> <br />
additional info: BindSimple: Transport encryption required. </pre><br />
То необходимо добавить строчку в smb.conf:<br><br />
<pre> ldap server require strong auth = No </pre><br />
Это команда должна выдать информацию о пользователях.<br />
Все почтовые ящики пользователей будут хранится в директории {{path|/var/vmail}} и обрабатываться системным пользователем vmail c домашней директорией {{path|/var/vmail}}.<br><br />
Создадим пользователя vmail и его домашнюю директорию:<br />
<pre># useradd -b /var -m -s /bin/false vmail</pre><br />
<br />
== Настройка Dovecot ==<br />
Создадим файл {{path|/etc/dovecot/dovecot-ldap.conf.ext}} параметров подключения Dovecot к LDAP:<br />
<pre># Контроллер домена (сервер LDAP)<br />
hosts = dc.test.alt<br />
<br />
# Пользователь и пароль для подключения к LDAP<br />
dn = ldapbind@test.alt<br />
dnpass = 'PaSSword'<br />
<br />
# Следующая опция позволяет аутентифицировать пользователей с помощью подключения к серверу LDAP с их аутентификационными данными<br />
auth_bind = yes<br />
<br />
# Преобразуем все имена пользователей в нижний регистр<br />
auth_bind_userdn = %Lu<br />
<br />
# Используем защищенное LDAP соединение<br />
tls = yes<br />
<br />
# Версия протокола LDAP<br />
ldap_version = 3<br />
<br />
# Где искать в LDAP<br />
base = cn=Users,dc=test,dc=alt<br />
deref = never<br />
<br />
# Искать во всех вложенных объектах<br />
scope = subtree<br />
<br />
# Использовать фильтр для поиска пользователей - искать только пользователей (sAMAccountType=805306368),<br />
# у которых совпадает c переданным логином IMAP или имя пользователя (userPrincipalName=%Lu) или электронная почта (mail=%Lu)<br />
user_filter = (&(sAMAccountType=805306368)(|(userPrincipalName=%Lu)(mail=%Lu)))<br />
<br />
# Указываем расположение домашнего каталога подсоединенного пользователя, параметр "%$" будет заменен на значение userPrincipalName (формата user@domain)<br />
user_attrs = userPrincipalName=home=/var/vmail/%$<br />
<br />
# Использовать фильтр для паролей<br />
pass_filter = (&(sAMAccountType=805306368)(userPrincipalName=%Lu))<br />
<br />
# Указываем имя пользователя найденное в LDAP<br />
pass_attrs = userPrincipalName=user</pre><br />
Ссылка на этот конфигурационный файл есть в файле {{path|/etc/dovecot/conf.d/auth-ldap.conf.ext}}:<br />
<pre>passdb {<br />
driver = ldap<br />
args = /etc/dovecot/dovecot-ldap.conf.ext<br />
}<br />
userdb {<br />
driver = ldap<br />
args = /etc/dovecot/dovecot-ldap.conf.ext<br />
}<br />
</pre><br />
Далее настраиваем параметры аутентификации в файле {{path|/etc/dovecot/conf.d/10-auth.conf}}:<br />
<pre># Добавляемое к имени пользователю имя домена по умочанию (если пользователь введет имя user, то для dovecot он будет user@test.alt)<br />
auth_default_realm = test.alt<br />
<br />
# Преобразуем все имена пользователей в нижний регистр<br />
auth_username_format = %Lu<br />
<br />
# Указываем методы аутентификации<br />
auth_mechanisms = plain login<br />
<br />
# Добавляем поддержку аутентификации в LDAP<br />
!include auth-ldap.conf.ext</pre><br />
Далее настраиваем параметры работы с почтой в файле {{path|/etc/dovecot/conf.d/10-mail.conf}}:<br />
<pre># Настроим формат и расположение почты пользователей, %h - указывает, что почта располагается в домашнем каталоге пользователя установленном в параметре user_attrs файла dovecot-ldap.conf.ext<br />
mail_location = maildir:%h<br />
<br />
# Указываем системного пользователя, созданного реннее, для работы с почтой и минимальные/максимальные gid/uid пользователей имеющих право работать с почтой (id vmail)<br />
mail_uid = vmail<br />
mail_gid = vmail<br />
first_valid_uid = 1001<br />
last_valid_uid = 1001<br />
first_valid_gid = 1001<br />
last_valid_gid = 1001<br />
<br />
# Метод блокировок записи<br />
mbox_write_locks = fcntl</pre><br />
Далее настраваем параметра SSL Dovecot в файле {{path|/etc/dovecot/conf.d/10-ssl.conf}}:<br />
<pre>ssl = required<br />
ssl_cert = </etc/dovecot/imap.test.alt.crt<br />
ssl_key = </etc/dovecot/imap.test.alt.key</pre><br />
Далее настраиваем сокет авторизации для postfix. Он настраивается в файле {{path|/etc/dovecot/conf.d/10-master.conf}} секция {{path|service auth}}:<br />
<pre>service auth {<br />
unix_listener auth-userdb {<br />
mode = 0660<br />
user = vmail<br />
}<br />
unix_listener /var/spool/postfix/private/auth {<br />
mode = 0660<br />
user = postfix<br />
group = postfix<br />
}<br />
}</pre><br />
В этом же файле настроим сокет для приема писем из postfix-a - секция {{path|service lmtp}}:<br />
<pre>service lmtp {<br />
unix_listener /var/spool/postfix/private/dovecot-lmtp {<br />
group = postfix<br />
mode = 0600<br />
user = postfix<br />
}<br />
user = vmail<br />
}</pre><br />
В файле {{path|/etc/dovecot/dovecot.conf}} можно все оставить по умолчанию, например он может выглядеть так:<br />
<pre>protocols = imap pop3 lmtp<br />
listen = *<br />
base_dir = /var/run/dovecot/<br />
login_greeting = Dovecot ready.<br />
dict {<br />
}<br />
!include conf.d/*.conf</pre><br />
Теперь можно запускать и добавлять в автозагрузку сервис dovecot:<br />
<pre># systemctl enable dovecot<br />
# systemctl start dovecot</pre><br />
<br />
== Настройка Postfix ==<br />
Настраиваем параметры postfix в файле {{path|/etc/postfix/main.cf}}:<br />
<pre># Использовать ipv4 и слушать на всех интерфейсах<br />
inet_protocols = ipv4<br />
inet_interfaces = all<br />
<br />
# Следующие параметры оставляем без изменения<br />
queue_directory = /var/spool/postfix<br />
command_directory = /usr/sbin<br />
daemon_directory = /usr/libexec/postfix<br />
data_directory = /var/lib/postfix<br />
mail_owner = postfix<br />
<br />
# Задаем полное имя сервера, которым postfix будет представляться при отправке/получении почты<br />
myhostname = mail.test.alt<br />
<br />
# Задаем имя нашего домена<br />
mydomain = test.alt<br />
<br />
# Имя от которого будут посылаться письма с локальной машины<br />
myorigin = mail.test.alt<br />
<br />
# Параметр указывает для каких доменов почта будет доставляться локально без пересылки на другие сервера<br />
mydestination = $myhostname, localhost.$mydomain, localhost<br />
<br />
# Указываем как доставляется локальная почта<br />
local_transport = virtual<br />
<br />
# Указываем как определять локальных пользователей<br />
local_recipient_maps = $virtual_mailbox_maps<br />
<br />
# Номер ошибки посылаемый оправителю при отказе<br />
unknown_local_recipient_reject_code = 550<br />
<br />
# Задаем список виртуальных доменов<br />
virtual_mailbox_domains = test.alt<br />
<br />
# Список разрешенных пользователей<br />
virtual_mailbox_maps = ldap:/etc/postfix/ldap/local_recipients.cf<br />
<br />
# Указываем сокет для доставки писем в dovecot<br />
virtual_transport = lmtp:unix:private/dovecot-lmtp<br />
<br />
# Указываем сертификаты, ключи SSL и включаем безопасные соединения и аутентификацию <br />
smtpd_tls_cert_file = /etc/postfix/smtp.zoros.alt.crt<br />
smtpd_tls_key_file = /etc/postfix/smtp.zoros.alt.key<br />
smtpd_use_tls = yes<br />
smtpd_tls_auth_only = yes<br />
<br />
# Настраиваем правила фильтрации писем<br />
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access<br />
<br />
# Указываем опции SASL аутентификации через dovecot<br />
smtpd_sasl_auth_enable = yes<br />
smtpd_sasl_security_options = noanonymous<br />
broken_sasl_auth_clients = yes<br />
smtpd_sasl_type = dovecot<br />
smtpd_sasl_path = private/auth<br />
smtpd_sasl_local_domain = $myorigin</pre><br />
Для работы smtps раскоментируем следующие строки в файле {{path|/etc/postfix/master.cf}}:<br />
<pre>smtps inet n - - - - smtpd<br />
-o smtpd_tls_wrappermode=yes<br />
-o smtpd_sasl_auth_enable=yes<br />
-o smtpd_client_restrictions=permit_sasl_authenticated,reject<br />
</pre><br />
Далее создадим каталог ldap и добавим файлы с правилами, указанные выше:<br />
<pre># mkdir /etc/postfix/ldap</pre><br />
В этом каталоге создадим файл {{path|local_recipients.cf}}, который проверяет считать ли пользователя локальным:<br />
<pre>debuglevel = 0<br />
version = 3<br />
server_host = dc.test.alt<br />
bind_dn = ldapbind@test.alt<br />
bind_pw = PaSSword<br />
search_base = dc=test,dc=alt<br />
search_scope = subtree<br />
query_filter = (&(|(userPrincipalName=%u@%d)(mail=%u@%d)(otherMailbox=%u@%d))(sAMAccountType=805306368))<br />
result_attribute = userPrincipalName<br />
cache = no</pre><br />
Запускаем и добавляем в автозагрузку сервис postfix:<br />
<pre># systemctl enable postfix<br />
# systemctl start postfix</pre><br />
== Проверка работоспособности ==<br />
Создадим в домене двух пользователей u01test (u01test@test.alt) и u02test (u02test@test.alt). Настроим почтовый клиент и попробуем посылать письма от одного пользователя другому.</div>
217.15.195.17
https://www.altlinux.org/index.php?title=%D0%9F%D0%BE%D1%87%D1%82%D0%BE%D0%B2%D1%8B%D0%B9_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_Postfix_Dovecot&diff=42238
Почтовый сервер Postfix Dovecot
2018-07-25T07:35:45Z
<p>217.15.195.17: /* Настройка Dovecot */</p>
<hr />
<div>{{stub}}<br />
В этой статье описывается минимальная настройка почтового сервера на основе Postfix (SMTP) и Dovecot (IMAP, POP3) c авторизаций пользователей через LDAP в Samba4 DC.<br><br />
Предполагается что уже есть настройенная Samba4 в роли контроллера домена. Исходные данные:<br />
*Домен: '''test.alt'''<br />
*Контроллер домена: '''dc.test.alt'''<br />
*Почтовый сервер: '''mail.test.alt'''<br />
*Сгенерированные сертификаты и ключи для Dovecot и Postfix<br />
*Пользователь для доступа к LDAP серверу: ldapbind<br />
Как самостоятельно сгенерировать SSL сертификаты можно посмотреть [[Nextcloud#Создание_самоподписных_SSL_сертификатов|тут]]<br />
== Установка и предварительная настройка ==<br />
Для работы почтового сервера необходимо установить следующие пакеты:<br />
<source lang="bash"># apt-get install postfix-dovecot postfix-ldap postfix dovecot</source><br />
Проверим работу DNS:<br />
<pre># dig +short -t A dc.test.alt<br />
10.10.105.1<br />
# dig +short -t A mail.test.alt<br />
10.10.105.2</pre><br />
Проверим доступ к LDAP-серверу:<br />
<pre># ldapsearch -h dc.test.alt -p 389 -W -D "ldapbind@test.alt" -b "cn=Users,dc=test,dc=alt"</pre><br />
Если подключения не произошло и появилась ошибка связанная с безопасностью подключения:<br><br />
<pre>ldap_bind: Strong(er) authentication required (8) <br> <br />
additional info: BindSimple: Transport encryption required. </pre><br />
То необходимо добавить строчку в smb.conf:<br><br />
<pre> ldap server require strong auth = No </pre><br />
Это команда должна выдать информацию о пользователях.<br />
Все почтовые ящики пользователей будут хранится в директории {{path|/var/vmail}} и обрабатываться системным пользователем vmail c домашней директорией {{path|/var/vmail}}.<br><br />
Создадим пользователя vmail и его домашнюю директорию:<br />
<pre># useradd -b /var -m -s /bin/false vmail</pre><br />
<br />
== Настройка Dovecot ==<br />
Создадим файл {{path|/etc/dovecot/dovecot-ldap.conf.ext}} параметров подключения Dovecot к LDAP:<br />
<pre># Контроллер домена (сервер LDAP)<br />
hosts = dc.test.alt<br />
<br />
# Пользователь и пароль для подключения к LDAP<br />
dn = ldapbind@test.alt<br />
dnpass = 'PaSSword'<br />
<br />
# Следующая опция позволяет аутентифицировать пользователей с помощью подключения к серверу LDAP с их аутентификационными данными<br />
auth_bind = yes<br />
<br />
# Преобразуем все имена пользователей в нижний регистр<br />
auth_bind_userdn = %Lu<br />
<br />
# Используем защищенное LDAP соединение<br />
tls = yes<br />
<br />
# Версия протокола LDAP<br />
ldap_version = 3<br />
<br />
# Где искать в LDAP<br />
base = cn=Users,dc=test,dc=alt<br />
deref = never<br />
<br />
# Искать во всех вложенных объектах<br />
scope = subtree<br />
<br />
# Использовать фильтр для поиска пользователей - искать только пользователей (sAMAccountType=805306368),<br />
# у которых совпадает c переданным логином IMAP или имя пользователя (userPrincipalName=%Lu) или электронная почта (mail=%Lu)<br />
user_filter = (&(sAMAccountType=805306368)(|(userPrincipalName=%Lu)(mail=%Lu)))<br />
<br />
# Указываем расположение домашнего каталога подсоединенного пользователя, параметр "%$" будет заменен на значение userPrincipalName (формата user@domain)<br />
user_attrs = userPrincipalName=home=/var/vmail/%$<br />
<br />
# Использовать фильтр для паролей<br />
pass_filter = (&(sAMAccountType=805306368)(userPrincipalName=%Lu))<br />
<br />
# Указываем имя пользователя найденное в LDAP<br />
pass_attrs = userPrincipalName=user</pre><br />
Ссылка на этот конфигурационный файл есть в файле {{path|/etc/dovecot/conf.d/auth-ldap.conf.ext}}:<br />
<pre>passdb {<br />
driver = ldap<br />
args = /etc/dovecot/dovecot-ldap.conf.ext<br />
}<br />
userdb {<br />
driver = ldap<br />
args = /etc/dovecot/dovecot-ldap.conf.ext<br />
}<br />
</pre><br />
Далее настраиваем параметры аутентификации в файле {{path|/etc/dovecot/conf.d/10-auth.conf}}:<br />
<pre># Добавляемое к имени пользователю имя домена по умочанию (если пользователь введет имя user, то для dovecot он будет user@test.alt)<br />
auth_default_realm = test.alt<br />
<br />
# Преобразуем все имена пользователей в нижний регистр<br />
auth_username_format = %Lu<br />
<br />
# Указываем методы аутентификации<br />
auth_mechanisms = plain login<br />
<br />
# Добавляем поддержку аутентификации в LDAP<br />
!include auth-ldap.conf.ext</pre><br />
Далее настраиваем параметры работы с почтой в файле {{path|/etc/dovecot/conf.d/10-mail.conf}}:<br />
<pre># Настроим формат и расположение почты пользователей, %h - указывает, что почта располагается в домашнем каталоге пользователя установленном в параметре user_attrs файла dovecot-ldap.conf.ext<br />
mail_location = maildir:%h<br />
<br />
# Указываем системного пользователя, созданного реннее, для работы с почтой и минимальные/максимальные gid/uid пользователей имеющих право работать с почтой (id vmail)<br />
mail_uid = vmail<br />
mail_gid = vmail<br />
first_valid_uid = 1001<br />
last_valid_uid = 1001<br />
first_valid_gid = 1001<br />
last_valid_gid = 1001<br />
<br />
# Метод блокировок записи<br />
mbox_write_locks = fcntl</pre><br />
Далее настраваем параметра SSL Dovecot в файле {{path|/etc/dovecot/conf.d10-ssl.conf}}:<br />
<pre>ssl = required<br />
ssl_cert = </etc/dovecot/imap.test.alt.crt<br />
ssl_key = </etc/dovecot/imap.test.alt.key</pre><br />
Далее настраиваем сокет авторизации для postfix. Он настраивается в файле {{path|/etc/dovecot/conf.d/10-master.conf}} секция {{path|service auth}}:<br />
<pre>service auth {<br />
unix_listener auth-userdb {<br />
mode = 0660<br />
user = vmail<br />
}<br />
unix_listener /var/spool/postfix/private/auth {<br />
mode = 0660<br />
user = postfix<br />
group = postfix<br />
}<br />
}</pre><br />
В этом же файле настроим сокет для приема писем из postfix-a - секция {{path|service lmtp}}:<br />
<pre>service lmtp {<br />
unix_listener /var/spool/postfix/private/dovecot-lmtp {<br />
group = postfix<br />
mode = 0600<br />
user = postfix<br />
}<br />
user = vmail<br />
}</pre><br />
В файле {{path|/etc/dovecot/dovecot.conf}} можно все оставить по умолчанию, например он может выглядеть так:<br />
<pre>protocols = imap pop3 lmtp<br />
listen = *<br />
base_dir = /var/run/dovecot/<br />
login_greeting = Dovecot ready.<br />
dict {<br />
}<br />
!include conf.d/*.conf</pre><br />
Теперь можно запускать и добавлять в автозагрузку сервис dovecot:<br />
<pre># systemctl enable dovecot<br />
# systemctl start dovecot</pre><br />
<br />
== Настройка Postfix ==<br />
Настраиваем параметры postfix в файле {{path|/etc/postfix/main.cf}}:<br />
<pre># Использовать ipv4 и слушать на всех интерфейсах<br />
inet_protocols = ipv4<br />
inet_interfaces = all<br />
<br />
# Следующие параметры оставляем без изменения<br />
queue_directory = /var/spool/postfix<br />
command_directory = /usr/sbin<br />
daemon_directory = /usr/libexec/postfix<br />
data_directory = /var/lib/postfix<br />
mail_owner = postfix<br />
<br />
# Задаем полное имя сервера, которым postfix будет представляться при отправке/получении почты<br />
myhostname = mail.test.alt<br />
<br />
# Задаем имя нашего домена<br />
mydomain = test.alt<br />
<br />
# Имя от которого будут посылаться письма с локальной машины<br />
myorigin = mail.test.alt<br />
<br />
# Параметр указывает для каких доменов почта будет доставляться локально без пересылки на другие сервера<br />
mydestination = $myhostname, localhost.$mydomain, localhost<br />
<br />
# Указываем как доставляется локальная почта<br />
local_transport = virtual<br />
<br />
# Указываем как определять локальных пользователей<br />
local_recipient_maps = $virtual_mailbox_maps<br />
<br />
# Номер ошибки посылаемый оправителю при отказе<br />
unknown_local_recipient_reject_code = 550<br />
<br />
# Задаем список виртуальных доменов<br />
virtual_mailbox_domains = test.alt<br />
<br />
# Список разрешенных пользователей<br />
virtual_mailbox_maps = ldap:/etc/postfix/ldap/local_recipients.cf<br />
<br />
# Указываем сокет для доставки писем в dovecot<br />
virtual_transport = lmtp:unix:private/dovecot-lmtp<br />
<br />
# Указываем сертификаты, ключи SSL и включаем безопасные соединения и аутентификацию <br />
smtpd_tls_cert_file = /etc/postfix/smtp.zoros.alt.crt<br />
smtpd_tls_key_file = /etc/postfix/smtp.zoros.alt.key<br />
smtpd_use_tls = yes<br />
smtpd_tls_auth_only = yes<br />
<br />
# Настраиваем правила фильтрации писем<br />
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, reject_non_fqdn_sender, reject_unknown_sender_domain, reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, check_helo_access<br />
<br />
# Указываем опции SASL аутентификации через dovecot<br />
smtpd_sasl_auth_enable = yes<br />
smtpd_sasl_security_options = noanonymous<br />
broken_sasl_auth_clients = yes<br />
smtpd_sasl_type = dovecot<br />
smtpd_sasl_path = private/auth<br />
smtpd_sasl_local_domain = $myorigin</pre><br />
Для работы smtps раскоментируем следующие строки в файле {{path|/etc/postfix/master.cf}}:<br />
<pre>smtps inet n - - - - smtpd<br />
-o smtpd_tls_wrappermode=yes<br />
-o smtpd_sasl_auth_enable=yes<br />
-o smtpd_client_restrictions=permit_sasl_authenticated,reject<br />
</pre><br />
Далее создадим каталог ldap и добавим файлы с правилами, указанные выше:<br />
<pre># mkdir /etc/postfix/ldap</pre><br />
В этом каталоге создадим файл {{path|local_recipients.cf}}, который проверяет считать ли пользователя локальным:<br />
<pre>debuglevel = 0<br />
version = 3<br />
server_host = dc.test.alt<br />
bind_dn = ldapbind@test.alt<br />
bind_pw = PaSSword<br />
search_base = dc=test,dc=alt<br />
search_scope = subtree<br />
query_filter = (&(|(userPrincipalName=%u@%d)(mail=%u@%d)(otherMailbox=%u@%d))(sAMAccountType=805306368))<br />
result_attribute = userPrincipalName<br />
cache = no</pre><br />
Запускаем и добавляем в автозагрузку сервис postfix:<br />
<pre># systemctl enable postfix<br />
# systemctl start postfix</pre><br />
== Проверка работоспособности ==<br />
Создадим в домене двух пользователей u01test (u01test@test.alt) и u02test (u02test@test.alt). Настроим почтовый клиент и попробуем посылать письма от одного пользователя другому.</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Mkimage-profiles/objects&diff=42104
Mkimage-profiles/objects
2018-06-19T10:45:46Z
<p>217.15.195.17: исправлен путь conf/*.mk -> conf.d/*.mk</p>
<hr />
<div>= Объекты [[Mkimage/Profiles/m-p|mkimage-profiles]] =<br />
Как правило, более тщательно задокументированы в README из каталога с реализацией.<br />
<br />
Обратите внимание: список приведён в порядке убывающей ''суммарной'' сложности объекта; если надо добавить пакет — достаточно добавить пакет (например, в <tt>THE_PACKAGES</tt>); если несколько — можно и в подходящий список; устойчивую группу настроек можно вынести в <tt>mixin</tt>-цель; а фичу следует заводить тогда, когда необходимо добавить скрипты либо сгруппировать конфигурацию под предметную область для повторного использования (как, например, в фиче server).<br />
<br />
== образ ==<br />
Цель вида <tt>distro/%</tt>, <tt>ve/%</tt> либо <tt>vm/%</tt>, выполнение которой приводит к созданию конфигурации соответствующего дистрибутива или виртуального окружения, достаточной для построения его образа. Описываются в {{path|conf.d/*.mk}} (базовые заданы в {{path|lib/distro.mk}}, {{path|lib/ve.mk}}, {{path|lib/vm.mk}}); могут наследовать друг другу. Пример — <tt>distro/server-ovz</tt>.<br />
<br />
Для своего образа (или группы образов) рекомендуется создать новый файл по образцу имеющихся {{path|conf.d/*.mk}} и описывать конфигурацию в нём; это позволит избежать конфликтов при обновлении базового репозитория (например, по {{cmd|git pull}}).<br />
<br />
== субпрофиль ==<br />
Цель вида <tt>sub/%</tt>, выполнение которой приводит к созданию базовой конфигурации соответствующего цельного блока для укладки в образ дистрибутива (например, <tt>sub/install2</tt>). Описаны в {{path|lib/distro.mk}} в общем виде, размещаются в {{path|sub.in/}}.<br />
<br />
Обратите внимание: <tt>sub/stage2</tt> является базовым, а не самостоятельным, и используется посредством <tt>use/stage2/*</tt> для получения итоговых субпрофилей <tt>install2</tt>, <tt>live</tt>, <tt>rescue</tt>; цели <tt>sub/stage2/*</tt> являются техническими, не следует ставить их в зависимости дистрибутивов.<br />
<br />
== фича ==<br />
Цель вида <tt>use/%</tt>, снабжённая подкаталогом в {{path|features.in/}}. В подкаталоге может быть:<br />
* кусочек конфигурации в виде {{path|config.mk}}, автоматически включаемый в toplevel {{path|Makefile}};<br />
* подкаталоги по имени нужных субпрофилей, содержимое которых добавляется к содержимому включённых в дистрибутив субпрофилей ({{path|rootfs}} является особым случаем, см. {{path|sub.in/rootfs/README}};<br />
* подкаталоги {{path|image-scripts.d/}} и {{path|scripts.d/}}, скрипты из которых добавляются в toplevel-каталог сборки (см. пример в {{path|features.in/syslinux/scripts.d/}});<br />
* {{path|generate.sh}} и/или {{path|generate.mk}} для постобработки;<br />
* включаемый в сборочный каталог {{path|lib/}} для фич, определяющих сборку образа (<tt>build-*</tt>).<br />
<br />
== пакаджлист ==<br />
Файл со списком пакетов, размещённый в {{path|pkg.in/lists/}}. Упоминается в генерируемом файле конфигурации дистрибутива ({{path|distcfg.mk}}) в переменных <tt>%_LISTS</tt>; перечисленные списки копируются в создаваемый профиль дистрибутива на стадии порождения дистрибутивного профиля.<br />
<br />
Может быть ''тегированным'' ({{path|tagged/}}) — см. {{path|lib/functions.mk}}<tt>::tags()</tt>, {{path|bin/tags2lists}}, {{path|features.in/rescue/config.mk}} по реализации и применению.<br />
<br />
Списки пакетов обычно есть смысл выделять в файлы либо при повторном использовании, либо при заметном объёме, когда перечисление прямо в конфигурации сильно снижает её читаемость (предлагаемое «правило большого пальца» — если набралось больше пары строк добавок в одну переменную вроде <tt>THE_PACKAGES</tt>, стоит обдумать вынесение в файл).<br />
<br />
{{Category navigation|title=mkimage-profiles|category=mkimage-profiles|sortkey=*}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Mkimage-profiles/objects&diff=42103
Mkimage-profiles/objects
2018-06-19T10:41:42Z
<p>217.15.195.17: исправлен путь conf/*.mk -> conf.d/*.mk</p>
<hr />
<div>= Объекты [[Mkimage/Profiles/m-p|mkimage-profiles]] =<br />
Как правило, более тщательно задокументированы в README из каталога с реализацией.<br />
<br />
Обратите внимание: список приведён в порядке убывающей ''суммарной'' сложности объекта; если надо добавить пакет — достаточно добавить пакет (например, в <tt>THE_PACKAGES</tt>); если несколько — можно и в подходящий список; устойчивую группу настроек можно вынести в <tt>mixin</tt>-цель; а фичу следует заводить тогда, когда необходимо добавить скрипты либо сгруппировать конфигурацию под предметную область для повторного использования (как, например, в фиче server).<br />
<br />
== образ ==<br />
Цель вида <tt>distro/%</tt>, <tt>ve/%</tt> либо <tt>vm/%</tt>, выполнение которой приводит к созданию конфигурации соответствующего дистрибутива или виртуального окружения, достаточной для построения его образа. Описываются в {{path|conf.d/*.mk}} (базовые заданы в {{path|lib/distro.mk}}, {{path|lib/ve.mk}}, {{path|lib/vm.mk}}); могут наследовать друг другу. Пример — <tt>distro/server-ovz</tt>.<br />
<br />
Для своего образа (или группы образов) рекомендуется создать новый файл по образцу имеющихся {{path|conf/*.mk}} и описывать конфигурацию в нём; это позволит избежать конфликтов при обновлении базового репозитория (например, по {{cmd|git pull}}).<br />
<br />
== субпрофиль ==<br />
Цель вида <tt>sub/%</tt>, выполнение которой приводит к созданию базовой конфигурации соответствующего цельного блока для укладки в образ дистрибутива (например, <tt>sub/install2</tt>). Описаны в {{path|lib/distro.mk}} в общем виде, размещаются в {{path|sub.in/}}.<br />
<br />
Обратите внимание: <tt>sub/stage2</tt> является базовым, а не самостоятельным, и используется посредством <tt>use/stage2/*</tt> для получения итоговых субпрофилей <tt>install2</tt>, <tt>live</tt>, <tt>rescue</tt>; цели <tt>sub/stage2/*</tt> являются техническими, не следует ставить их в зависимости дистрибутивов.<br />
<br />
== фича ==<br />
Цель вида <tt>use/%</tt>, снабжённая подкаталогом в {{path|features.in/}}. В подкаталоге может быть:<br />
* кусочек конфигурации в виде {{path|config.mk}}, автоматически включаемый в toplevel {{path|Makefile}};<br />
* подкаталоги по имени нужных субпрофилей, содержимое которых добавляется к содержимому включённых в дистрибутив субпрофилей ({{path|rootfs}} является особым случаем, см. {{path|sub.in/rootfs/README}};<br />
* подкаталоги {{path|image-scripts.d/}} и {{path|scripts.d/}}, скрипты из которых добавляются в toplevel-каталог сборки (см. пример в {{path|features.in/syslinux/scripts.d/}});<br />
* {{path|generate.sh}} и/или {{path|generate.mk}} для постобработки;<br />
* включаемый в сборочный каталог {{path|lib/}} для фич, определяющих сборку образа (<tt>build-*</tt>).<br />
<br />
== пакаджлист ==<br />
Файл со списком пакетов, размещённый в {{path|pkg.in/lists/}}. Упоминается в генерируемом файле конфигурации дистрибутива ({{path|distcfg.mk}}) в переменных <tt>%_LISTS</tt>; перечисленные списки копируются в создаваемый профиль дистрибутива на стадии порождения дистрибутивного профиля.<br />
<br />
Может быть ''тегированным'' ({{path|tagged/}}) — см. {{path|lib/functions.mk}}<tt>::tags()</tt>, {{path|bin/tags2lists}}, {{path|features.in/rescue/config.mk}} по реализации и применению.<br />
<br />
Списки пакетов обычно есть смысл выделять в файлы либо при повторном использовании, либо при заметном объёме, когда перечисление прямо в конфигурации сильно снижает её читаемость (предлагаемое «правило большого пальца» — если набралось больше пары строк добавок в одну переменную вроде <tt>THE_PACKAGES</tt>, стоит обдумать вынесение в файл).<br />
<br />
{{Category navigation|title=mkimage-profiles|category=mkimage-profiles|sortkey=*}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Autoports&diff=41804
Autoports
2018-04-12T10:16:09Z
<p>217.15.195.17: /* Что такое Autoports? */</p>
<hr />
<div>== Что такое Autoports? ==<br />
<br />
Autoports - это постоянно обновляемый репозиторий свежих версий пакетов из [[Что_такое_Sisyphus%3F|Sisyphus]],<br />
которые автоматически пересобраны для установки в текущую стабильную ветвь (в настоящее время это p8, также поддерживается p7/t7).<br />
Всегда самые свежие gear и hasher, freeciv и wesnoth, новые игры, которых еще нет в бранчах, и еще множество других пакетов, уже собранных, и тех, которые еще собираются.<br />
<br />
Репозиторий Autoports предназначен для точечных обновлений.<br/><br />
Репозитории [[Autoports]] появились начиная с ветвей p5/5.1 в качестве частичной замены backports.<br/><br />
Autoports дает возможность попробовать какой-нибудь пакет, собранный для сизифа без полного перехода на репозиторий [[Что_такое_Sisyphus%3F|Sisyphus]].<br />
<br />
СтОит попробовать новый пакет из Autoports, только если в бранче такого пакета нет или имеющийся не устраивает вас функциональностью или наличием ошибок.<br />
Однако нужно знать, что репозиторий Autoports обновляется роботом, который пытается в автоматическом режиме собирать пакеты из репозитория [[Что_такое_Sisyphus%3F|Sisyphus]] в окружении текущего бранча.<br />
Как следствие, '''пакеты из Autoports не тестируются'''. Поэтому будьте готовы к тому, что не все пакеты могут оказаться рабочими.<br />
Установка пакета из Autoports -- лотерея, вам может как повезти, так и не повезти. <br />
В случае каких-либо проблем, просто удалите пакет, взятый из Autoports, и замените его старым пакетом из бранча.<br />
Пакеты из Autoports легко узнать благодаря характерному суффиксу вида .A80.1 (для p8) .A70.1 (для p7/t7), .A60.1 (для p6/t6) или .A51.1 (для p5/5.1).<br />
<br />
Также не все пакеты из Сизифа могут быть просто пересобраны под текущую стабильную ветвь.<br />
<br />
===Заявки на сборку новых пакетов ===<br />
<br />
Чтобы понять, как работает робот, есть списки (пример для p6/t6):<br />
/pub/ALTLinux/autoports/t6/files/list.covered<br />
/pub/ALTLinux/autoports/t6/files/list.failed<br />
list.covered -- это список покрываемых роботом пакетов (которые робот просматривает).<br><br />
list.failed -- это те, которые робот пытался собрать, да сборка не удалась.<br />
<br />
Если интересующего вас пакета нет в list.covered, вы можете <br />
создать заявку на добавление в autoports нового пакета, откртыв ее<br />
в https://bugzilla.altlinux.org/enter_bug.cgi?product=Infrastructure на компоненту autoports.altlinux.org.<br />
<br />
Пожалуйста, не присылайте заявки на пакеты, перечисленные в list.failed.<br />
<br />
=== настройка ===<br />
<br />
Настройка apt для использования [[Autoports]] для ветвей p5/5.1 описана в [[Autoports/5.1]].<br />
<br />
Настройка apt для использования [[Autoports]] для ветвей p6/t6 описана в [[Autoports/t6]].<br />
<br />
Настройка apt для использования [[Autoports]] для ветвей p7/t7 описана в [[Autoports/p7]].<br />
<br />
Настройка apt для использования [[Autoports]] для ветвей p8/t8 описана в [[Autoports/p8]].<br />
<br />
{{Category navigation|title=Branches|category=Branches|sortkey={{SUBPAGENAME}}}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=L2TP_VPN_Client_Server&diff=41644
L2TP VPN Client Server
2018-03-23T11:30:16Z
<p>217.15.195.17: /* Настройка Сервера */</p>
<hr />
<div>{{stub}}В данной статье будет описана настройка L2TP VPN-тунеля между двумя машинами:<br />
*VPN-сервер 10.10.170.1<br />
*VPN-клиент 10.10.170.10<br />
== Установка ==<br />
В качестве клиента и cервера мы будем успользовать xl2tpd. Установим необходимые пакеты:<br />
<pre># apt-get install l2tpd ppp</pre><br />
== Настройка Сервера ==<br />
Внесём изменения в конфигурационный файл xl2tpd ({{path|/etc/xl2tpd/xl2tpd.conf}}).<br><br />
Общие настройки находяися в секции '''global''':<br />
<pre>[global]<br />
<br />
port = 1701 ; Сервер будет слушать 1701 порт<br />
<br />
access control = yes ; Проверяет соответсвие IP настройкам доступа</pre><br />
Настройки сервера находятся в секции '''lns''':<br />
<pre> [lns servername] ; Название сервера<br />
<br />
ip range = 192.168.173.2-192.168.173.20 ; Диапазон выдаваемых IP адресов<br />
<br />
lac = 10.10.170.0 - 10.10.170.255 ; Диапазон IP адресов, которые могут присоединяться к этому серверу<br />
<br />
local ip = 192.168.173.1 ; IP адрес сервера в VPN сети<br />
<br />
require chap = yes ; Требовать у клиентов CHAP аутентификацию<br />
<br />
refuse pap = yes ; Не разрешать клиентам PAP аутентификацию<br />
<br />
require authentication = yes ; Требовать аутентификацию клиентов<br />
<br />
name = server ; Передавать клиентам имя сервера<br />
<br />
pppoptfile = /etc/ppp/options.xl2tpd; Файл с опциями ppp</pre><br />
В файле {{path|/etc/ppp/options.xl2tpd}} можно указать необходимые опции ppp, файл должен существовать.<br><br />
В файле {{path|/etc/ppp/chap-secrets}} указываются аутентификационные данные пользователей для CHAP аутентификации:<br />
<pre>client server Pa$$word *</pre><br />
*'''client''' - логин<br />
*'''server''' - указывается имя сервера к которому можно подсоединиться (параметр '''name'''), можно заменить на *<br />
*'''Pa$$word''' - пароль клиента<br />
*'''*''' - Разрешает соединения с любых IP<br />
Добавляем сервис в автозапуск и запускаем его:<br />
<pre># systemctl enable xl2tpd<br />
# systemctl start xl2tpd</pre><br />
<br />
== Настройка Клиента ==<br />
Настройка клиента производится в том же файле ({{path|/etc/xl2tpd/xl2tpd.conf}}), но в секции lac:<br />
<pre> [lac client] ; Название клиента<br />
<br />
lns = 10.10.170.1 ; Указывается адрес сервера к которому подсоединямся<br />
<br />
redial = yes ; Перподключаться при потере соединения<br />
<br />
redial timeout = 15 ; Сколько ждать между попытками соединиться<br />
<br />
require chap = yes ; Использовать CHAP аутентификацию<br />
<br />
refuse pap = yes ; Не использовать PAP аутентификацию<br />
<br />
require authentication = yes ; Требовать аутентификацию<br />
<br />
name = client ; Указываем имя с которым подсоединяемся<br />
<br />
pppoptfile = /etc/ppp/options.l2tpd ; Файл с опциями ppp<br />
<br />
autodial = yes ; Автоматически устанавливать связь при старте сервиса</pre><br />
Далее редактируем {{path|/etc/ppp/chap-secrets}} указывая сервер, имя и пароль:<br />
<pre>client server Pa$$word *</pre><br />
В файле {{path|/etc/ppp/options.l2tpd}} указываем опцию noauth:<br />
<pre>noauth</pre><br />
Пробуем подключиться к серверу:<br />
<pre># xl2tpd -D</pre><br />
Если подключение прошло успешно то добавляем сервис в автозапуск и запускаем его:<br />
<pre># systemctl enable xl2tpd<br />
# systemctl start xl2tpd</pre><br />
В системе должен появиться интерфейс ppp0:<br />
<pre># ip a | grep ppp0<br />
74: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 3<br />
inet 192.168.173.3 peer 192.168.173.1/32 scope global ppp0</pre></div>
217.15.195.17
https://www.altlinux.org/index.php?title=L2TP_VPN_Client_Server&diff=41643
L2TP VPN Client Server
2018-03-23T11:29:48Z
<p>217.15.195.17: /* Настройка Клиента */</p>
<hr />
<div>{{stub}}В данной статье будет описана настройка L2TP VPN-тунеля между двумя машинами:<br />
*VPN-сервер 10.10.170.1<br />
*VPN-клиент 10.10.170.10<br />
== Установка ==<br />
В качестве клиента и cервера мы будем успользовать xl2tpd. Установим необходимые пакеты:<br />
<pre># apt-get install l2tpd ppp</pre><br />
== Настройка Сервера ==<br />
Внесём изменения в конфигурационный файл xl2tpd ({{path|/etc/xl2tpd/xl2tpd.conf}}).<br><br />
Общие настройки находяися в секции '''global''':<br />
<pre>[global]<br />
<br />
port = 1701 ; Сервер будет слушать 1701 порт<br />
<br />
access control = yes ; Проверяет соответсвие IP настройкам доступа</pre><br />
Настройки сервера находятся в секции '''lns''':<br />
<pre> [lns servername] ; Название сервера<br />
<br />
ip range = 192.168.173.2-192.168.173.20 ; Диапазон выдаваемых IP адресов<br />
<br />
lac = 10.10.170.0 - 10.10.170.255 ; Диапазон IP адресов, которые могут присоединяться к этому серверу<br />
<br />
local ip = 192.168.173.1 ; IP адрес сервера в VPN сети<br />
<br />
require chap = yes ; Требовать у клиентов CHAP аутентификацию<br />
<br />
refuse pap = yes ; Не разрешать клиентам PAP аутентификацию<br />
<br />
require authentication = yes ; Требовать аутентификацию клиентов<br />
<br />
name = server ; Передавать клиентам имя сервера<br />
<br />
pppoptfile = /etc/ppp/options.xl2tpd; Файл с опциями ppp</pre><br />
В файле {{path|/etc/ppp/options.l2tpd}} можно указать необходимые опции ppp, файл должен существовать.<br><br />
В файле {{path|/etc/ppp/chap-secrets}} указываются аутентификационные данные пользователей для CHAP аутентификации:<br />
<pre>client server Pa$$word *</pre><br />
*'''client''' - логин<br />
*'''server''' - указывается имя сервера к которому можно подсоединиться (параметр '''name'''), можно заменить на *<br />
*'''Pa$$word''' - пароль клиента<br />
*'''*''' - Разрешает соединения с любых IP<br />
Добавляем сервис в автозапуск и запускаем его:<br />
<pre># systemctl enable xl2tpd<br />
# systemctl start xl2tpd</pre><br />
<br />
== Настройка Клиента ==<br />
Настройка клиента производится в том же файле ({{path|/etc/xl2tpd/xl2tpd.conf}}), но в секции lac:<br />
<pre> [lac client] ; Название клиента<br />
<br />
lns = 10.10.170.1 ; Указывается адрес сервера к которому подсоединямся<br />
<br />
redial = yes ; Перподключаться при потере соединения<br />
<br />
redial timeout = 15 ; Сколько ждать между попытками соединиться<br />
<br />
require chap = yes ; Использовать CHAP аутентификацию<br />
<br />
refuse pap = yes ; Не использовать PAP аутентификацию<br />
<br />
require authentication = yes ; Требовать аутентификацию<br />
<br />
name = client ; Указываем имя с которым подсоединяемся<br />
<br />
pppoptfile = /etc/ppp/options.l2tpd ; Файл с опциями ppp<br />
<br />
autodial = yes ; Автоматически устанавливать связь при старте сервиса</pre><br />
Далее редактируем {{path|/etc/ppp/chap-secrets}} указывая сервер, имя и пароль:<br />
<pre>client server Pa$$word *</pre><br />
В файле {{path|/etc/ppp/options.l2tpd}} указываем опцию noauth:<br />
<pre>noauth</pre><br />
Пробуем подключиться к серверу:<br />
<pre># xl2tpd -D</pre><br />
Если подключение прошло успешно то добавляем сервис в автозапуск и запускаем его:<br />
<pre># systemctl enable xl2tpd<br />
# systemctl start xl2tpd</pre><br />
В системе должен появиться интерфейс ppp0:<br />
<pre># ip a | grep ppp0<br />
74: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 3<br />
inet 192.168.173.3 peer 192.168.173.1/32 scope global ppp0</pre></div>
217.15.195.17
https://www.altlinux.org/index.php?title=L2TP_VPN_Client_Server&diff=41642
L2TP VPN Client Server
2018-03-23T11:28:41Z
<p>217.15.195.17: /* Настройка Клиента */</p>
<hr />
<div>{{stub}}В данной статье будет описана настройка L2TP VPN-тунеля между двумя машинами:<br />
*VPN-сервер 10.10.170.1<br />
*VPN-клиент 10.10.170.10<br />
== Установка ==<br />
В качестве клиента и cервера мы будем успользовать xl2tpd. Установим необходимые пакеты:<br />
<pre># apt-get install l2tpd ppp</pre><br />
== Настройка Сервера ==<br />
Внесём изменения в конфигурационный файл xl2tpd ({{path|/etc/xl2tpd/xl2tpd.conf}}).<br><br />
Общие настройки находяися в секции '''global''':<br />
<pre>[global]<br />
<br />
port = 1701 ; Сервер будет слушать 1701 порт<br />
<br />
access control = yes ; Проверяет соответсвие IP настройкам доступа</pre><br />
Настройки сервера находятся в секции '''lns''':<br />
<pre> [lns servername] ; Название сервера<br />
<br />
ip range = 192.168.173.2-192.168.173.20 ; Диапазон выдаваемых IP адресов<br />
<br />
lac = 10.10.170.0 - 10.10.170.255 ; Диапазон IP адресов, которые могут присоединяться к этому серверу<br />
<br />
local ip = 192.168.173.1 ; IP адрес сервера в VPN сети<br />
<br />
require chap = yes ; Требовать у клиентов CHAP аутентификацию<br />
<br />
refuse pap = yes ; Не разрешать клиентам PAP аутентификацию<br />
<br />
require authentication = yes ; Требовать аутентификацию клиентов<br />
<br />
name = server ; Передавать клиентам имя сервера<br />
<br />
pppoptfile = /etc/ppp/options.xl2tpd; Файл с опциями ppp</pre><br />
В файле {{path|/etc/ppp/options.l2tpd}} можно указать необходимые опции ppp, файл должен существовать.<br><br />
В файле {{path|/etc/ppp/chap-secrets}} указываются аутентификационные данные пользователей для CHAP аутентификации:<br />
<pre>client server Pa$$word *</pre><br />
*'''client''' - логин<br />
*'''server''' - указывается имя сервера к которому можно подсоединиться (параметр '''name'''), можно заменить на *<br />
*'''Pa$$word''' - пароль клиента<br />
*'''*''' - Разрешает соединения с любых IP<br />
Добавляем сервис в автозапуск и запускаем его:<br />
<pre># systemctl enable xl2tpd<br />
# systemctl start xl2tpd</pre><br />
<br />
== Настройка Клиента ==<br />
Настройка клиента производится в том же файле ({{path|/etc/xl2tpd/xl2tpd.conf}}), но в секции lac:<br />
<pre> [lac client] ; Название клиента<br />
<br />
lns = 10.10.170.1 ; Указывается адрес сервера к которому подсоединямся<br />
<br />
redial = yes ; Перподключаться при потере соединения<br />
<br />
redial timeout = 15 ; Сколько ждать между попытками соединиться<br />
<br />
require chap = yes ; Использовать CHAP аутентификацию<br />
<br />
refuse pap = yes ; Не использовать PAP аутентификацию<br />
<br />
require authentication = yes ; Требовать аутентификацию<br />
<br />
name = client ; Указываем имя с которым подсоединяемся<br />
<br />
pppoptfile = /etc/ppp/options.xl2tpd ; Файл с опциями ppp<br />
<br />
autodial = yes ; Автоматически устанавливать связь при старте сервиса</pre><br />
Далее редактируем {{path|/etc/ppp/chap-secrets}} указывая сервер, имя и пароль:<br />
<pre>client server Pa$$word *</pre><br />
В файле {{path|/etc/ppp/options.l2tpd}} указываем опцию noauth:<br />
<pre>noauth</pre><br />
Пробуем подключиться к серверу:<br />
<pre># xl2tpd -D</pre><br />
Если подключение прошло успешно то добавляем сервис в автозапуск и запускаем его:<br />
<pre># systemctl enable xl2tpd<br />
# systemctl start xl2tpd</pre><br />
В системе должен появиться интерфейс ppp0:<br />
<pre># ip a | grep ppp0<br />
74: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 3<br />
inet 192.168.173.3 peer 192.168.173.1/32 scope global ppp0</pre></div>
217.15.195.17
https://www.altlinux.org/index.php?title=L2TP_VPN_Client_Server&diff=41641
L2TP VPN Client Server
2018-03-23T11:19:00Z
<p>217.15.195.17: /* Настройка Сервера */</p>
<hr />
<div>{{stub}}В данной статье будет описана настройка L2TP VPN-тунеля между двумя машинами:<br />
*VPN-сервер 10.10.170.1<br />
*VPN-клиент 10.10.170.10<br />
== Установка ==<br />
В качестве клиента и cервера мы будем успользовать xl2tpd. Установим необходимые пакеты:<br />
<pre># apt-get install l2tpd ppp</pre><br />
== Настройка Сервера ==<br />
Внесём изменения в конфигурационный файл xl2tpd ({{path|/etc/xl2tpd/xl2tpd.conf}}).<br><br />
Общие настройки находяися в секции '''global''':<br />
<pre>[global]<br />
<br />
port = 1701 ; Сервер будет слушать 1701 порт<br />
<br />
access control = yes ; Проверяет соответсвие IP настройкам доступа</pre><br />
Настройки сервера находятся в секции '''lns''':<br />
<pre> [lns servername] ; Название сервера<br />
<br />
ip range = 192.168.173.2-192.168.173.20 ; Диапазон выдаваемых IP адресов<br />
<br />
lac = 10.10.170.0 - 10.10.170.255 ; Диапазон IP адресов, которые могут присоединяться к этому серверу<br />
<br />
local ip = 192.168.173.1 ; IP адрес сервера в VPN сети<br />
<br />
require chap = yes ; Требовать у клиентов CHAP аутентификацию<br />
<br />
refuse pap = yes ; Не разрешать клиентам PAP аутентификацию<br />
<br />
require authentication = yes ; Требовать аутентификацию клиентов<br />
<br />
name = server ; Передавать клиентам имя сервера<br />
<br />
pppoptfile = /etc/ppp/options.xl2tpd; Файл с опциями ppp</pre><br />
В файле {{path|/etc/ppp/options.l2tpd}} можно указать необходимые опции ppp, файл должен существовать.<br><br />
В файле {{path|/etc/ppp/chap-secrets}} указываются аутентификационные данные пользователей для CHAP аутентификации:<br />
<pre>client server Pa$$word *</pre><br />
*'''client''' - логин<br />
*'''server''' - указывается имя сервера к которому можно подсоединиться (параметр '''name'''), можно заменить на *<br />
*'''Pa$$word''' - пароль клиента<br />
*'''*''' - Разрешает соединения с любых IP<br />
Добавляем сервис в автозапуск и запускаем его:<br />
<pre># systemctl enable xl2tpd<br />
# systemctl start xl2tpd</pre><br />
<br />
== Настройка Клиента ==<br />
Настройка клиента производится в том же файле ({{path|/etc/xl2tpd/xl2tpd.conf}}), но в секции lac:<br />
<pre> [lac client] ; Название клиента<br />
<br />
lns = 10.10.170.1 ; Указывается адрес сервера к которому подсоединямся<br />
<br />
redial = yes ; Перподключаться при потере соединения<br />
<br />
redial timeout = 15 ; Сколько ждать между попытками соединиться<br />
<br />
require chap = yes ; Использовать CHAP аутентификацию<br />
<br />
refuse pap = yes ; Не использовать PAP аутентификацию<br />
<br />
require authentication = yes ; Требовать аутентификацию<br />
<br />
name = client ; Указываем имя с которым подсоединяемся<br />
<br />
pppoptfile = /etc/ppp/options.l2tpd ; Файл с опциями ppp<br />
<br />
autodial = yes ; Автоматически устанавливать связь при старте сервиса</pre><br />
Далее редактируем {{path|/etc/ppp/chap-secrets}} указывая сервер, имя и пароль:<br />
<pre>client server Pa$$word *</pre><br />
В файле {{path|/etc/ppp/options.l2tpd}} указываем опцию noauth:<br />
<pre>noauth</pre><br />
Пробуем подключиться к серверу:<br />
<pre># xl2tpd -D</pre><br />
Если подключение прошло успешно то добавляем сервис в автозапуск и запускаем его:<br />
<pre># systemctl enable xl2tpd<br />
# systemctl start xl2tpd</pre><br />
В системе должен появиться интерфейс ppp0:<br />
<pre># ip a | grep ppp0<br />
74: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 3<br />
inet 192.168.173.3 peer 192.168.173.1/32 scope global ppp0</pre></div>
217.15.195.17
https://www.altlinux.org/index.php?title=%D0%9E%D0%B3%D1%80%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81%D0%B0_KDE&diff=41309
Ограничения интерфейса KDE
2018-02-28T14:05:23Z
<p>217.15.195.17: /* Режим Kiosk */</p>
<hr />
<div>[[Категория:Руководства]]<br />
<br />
== Настройка ограничений на возможности среды KDE посредством механизма Kiosk ==<br />
<br />
__TOC__<br />
<br />
<br />
==== Задача ====<br />
<br />
Требуется настроить рабочее место пользователя KDE в соответствии со следующими условиями:<br />
* разрешена работа с файлами только из домашнего каталога;<br />
* настройка всех остальных параметров рабочего стола (в том числе и изменение меню) запрещена;<br />
* меню KDE должно состоять из фиксированного минимального набора приложений и специального пункта для остальных установленных программ, куда попадают все вновь установленные программы.<br />
<br />
==== Режим Kiosk ====<br />
<br />
Графическая среда KDE предоставляет возможности по административному ограничению её возможностей и настройки параметров. Это стало возможно с появлением в KDE3 механизма Kiosk. Данный режим включен по умолчанию.<br />
<br />
С помощью этого режима можно:<br />
# Использовать только заданные параметры, игнорируя изменения как в диалогах настройки, так и в конфигурационных файлах пользователя;<br />
# Скрыть от пользователей модули центра управления KDE.<br />
# Отключить переназначение ресурсов (например, значков) из домашнего каталога пользователя.<br />
# Запретить в приложениях KDE просмотр папок и открытие файлов, не удовлетворяющих заданным условиям (например, вне домашнего каталога пользователя).<br />
# Назначать разные профили группам или отдельным пользователям.<br />
<br />
Для настройки можно использовать утилиту '''kiosktool''' или указать правила вручную.<br />
<br />
==== Управление через kiosktool ====<br />
<br />
* установите пакет kiosktool:<br />
<br />
:<tt>apt-get install kiosktool</tt><br />
<br />
* Запустите kiosktool (можно под обычным пользователем)<br />
* Нажмите кнопку «Добавить новый профиль». На этом этапе создаётся отдельный профиль, содержащий политики безопасности.<br />
* Имя профиля: user<br />
* Файлы в этом профиле принадлежат: root<br />
* Каталог для этого профиля: /etc/kde-profile/user<br />
* Нажмите на кнопку «Добавить». При этом появится запрос пароля пользователя root. Укажите пароль и нажмите OK.<br />
* Нажмите на кнопку «Назначенные профили». На этом этапе происходит назначение профилей отдельным пользователям и группам. Нажмите на кнопку «Добавить групповую политику» (назначение профиля группе) или «Добавить пользовательскую политику» (назначение профиля отдельному пользователю). Выберите группу (или пользователя и укажите присваиваемый профиль. Нажмите на OK и Готово.<br />
* Укажите необходимые правила для профиля, нажав на кнопку «Настроить профиль»<br />
<br />
==== Как это работает ====<br />
<br />
* Профили хранятся в каталоге /etc/kde-profile/<имя_профиля> и представляют собой структуру и содержимое файлов с заданными параметрами (как в ~/.kde/)<br />
* Блокировка параметров ключом [$i] может быть следующих видов:<br />
## один параметр: <tt>someKey[$i]=value</tt><br />
## группа: <tt>[MyGroup][$i]</tt><br />
## весь файл: <tt>[$i]</tt> указывается в первой строке файла<br />
<br />
Если параметр не указан как изменяемый (на уровне файла, группы или отдельного параметра, пользователь может изменять его как в диалоге настройки, так и вручную (при этом изменения самих программ будут произведены). Запрещённое для изменения действие будет исключено из меню и панели инструментов.<br />
Также можно запретить изменение параметров, сделав файл недоступным на запись. Чтобы убрать предупреждение о невозможности их записи, добавьте в файл /etc/kde-profile/<имя_профиля>/share/config/kdeglobals (этот файл используется для всех ниже указанных вариантов):<br />
:<br />
:<tt>[KDE Action Restrictions]</tt><br />
:<tt>warn_unwritable_config=false</tt><br />
<br />
* Для блокирования отдельных действий, добавьте в файл /etc/kdeprofile/<имя_профиля>/share/config/kdeglobals строку (для примера запрещается создание папки в диалоге открытия/сохранения файла):<br />
<br />
:<tt>action/<действие>=false</tt><br />
<br />
* Список действий можно получить командой:<br />
<br />
<tt>dcop <dcopid> qt objects | grep KActionCollection/ | cut -d '/' -f 3</tt><br />
или<br />
<tt>dcop <dcopid> <maindwindowid> actions</tt><br />
<br />
* Можно отключить модули управления из Центра управления KDE (на примере запрещения изменения фона рабочего стола):<br />
<br />
<tt>[KDE Control Module Restrictions]</tt><br />
<tt>kde-background.desktop=false</tt><br />
<br />
* Можно отключить определённые пути (в том числе сетевые) (пример разрешает открывать только файлы из домашнего каталога пользователя):<br />
<br />
<tt>[KDE URL Restrictions][$i]</tt><br />
<tt>rule_1=list,,,,file,,,false</tt><br />
<tt>rule_2=list,,,,file,,$HOME,true</tt><br />
<br />
* Можно отключить использование пользовательских ресурсов (пример запрещает использование фона рабочего стола из домашнего каталога пользователя<br />
<br />
<tt>[KDE Resource Restrictions][$i]</tt><br />
<tt>wallpaper=false</tt><br />
<br />
==== Нерешённые проблемы ====<br />
<br />
# Фон рабочего стола можно изменить через dcop. Для этого снимите биты выполнения для определённых групп для программ: dcop и kdcop.<br />
# Невозможно скрыть заблокированные параметры в пользовательских приложениях. Это неудобно для пользователя, так как параметры видны, но после их изменения, приложение не учитывает изменения.<br />
<br />
==== Фиксированное меню ====<br />
<br />
Для создания фиксированного меню с минимальным набором приложений создаётся файл /etc/kde/xdg/menus/applications-merged/junior.menu следующего содержимого:<br />
<br />
<pre><!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN" "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd"><br />
<Menu><br />
<Move><br />
<Old>Graphics</Old><br />
<New>Applications/Graphics</New><br />
</Move><br />
<Move><br />
<Old>Games</Old><br />
<New>Applications/Games</New><br />
</Move><br />
<Move><br />
<Old>Internet</Old><br />
<New>Applications/Internet</New><br />
</Move><br />
<Move><br />
<Old>Multimedia</Old><br />
<New>Applications/Multimedia</New><br />
</Move><br />
<Move><br />
<Old>Science</Old><br />
<New>Applications/Science</New><br />
</Move><br />
<Move><br />
<Old>Edutainment</Old><br />
<New>Applications/Edutainment</New><br />
</Move><br />
<Move><br />
<Old>Office</Old><br />
<New>Applications/Office</New><br />
</Move><br />
<Move><br />
<Old>Development</Old><br />
<New>Applications/Development</New><br />
</Move><br />
<Move><br />
<Old>Utilities</Old><br />
<New>Applications/Utilities</New><br />
</Move><br />
<Move><br />
<Old>Settingsmenu</Old><br />
<New>Applications/Settingsmenu</New><br />
</Move><br />
<br />
<Menu><br />
<Name>Graphics1</Name><br />
<Directory>kde-graphics.directory</Directory><br />
<Include><br />
<Filename>kde-kuickshow.desktop</Filename><br />
<Filename>blender.desktop</Filename><br />
<Filename>inkscape.desktop</Filename><br />
<Filename>gimp.desktop</Filename><br />
<Filename>kde-kooka.desktop</Filename><br />
<Filename>tuxpaint.desktop</Filename><br />
</Include><br />
</Menu><br />
<Menu><br />
<Name>Internet1</Name><br />
<Directory>kde-internet.directory</Directory><br />
<Include><br />
<Filename>xchat.desktop</Filename><br />
<Filename>psi.desktop</Filename><br />
<Filename>firefox.desktop</Filename><br />
<Filename>thunderbird.desktop</Filename><br />
<Filename>kde-konqbrowser.desktop</Filename><br />
</Include><br />
</Menu><br />
<Menu><br />
<Name>Multimedia1</Name><br />
<Directory>kde-multimedia.directory</Directory><br />
<Include><br />
<Filename>kde-kaffeine.desktop</Filename><br />
<Filename>kde-amarok.desktop</Filename><br />
<Filename>kde-kmix.desktop</Filename><br />
<Filename>audacity.desktop</Filename><br />
</Include><br />
</Menu><br />
<Menu><br />
<Name>Edutainment1</Name><br />
<Directory>kde-edutainment.directory</Directory><br />
<Include><br />
<Filename>kde-kturtle.desktop</Filename><br />
</Include><br />
</Menu><br />
<Menu><br />
<Name>Office1</Name><br />
<Directory>kde-office.directory</Directory><br />
<Include><br />
<Filename>oobase.desktop</Filename><br />
<Filename>oocalc.desktop</Filename><br />
<Filename>oowriter.desktop</Filename><br />
<Filename>oomath.desktop</Filename><br />
<Filename>oodraw.desktop</Filename><br />
<Filename>ooimpress.desktop</Filename><br />
<Filename>scribus.desktop</Filename><br />
<Filename>kde-korganizer.desktop</Filename><br />
<Filename>stardict-gtk.desktop</Filename><br />
<Filename>dia.desktop</Filename><br />
<Filename>kpdf.desktop</Filename><br />
</Include><br />
</Menu><br />
<Menu><br />
<Name>Development</Name><br />
<Directory>kde-development.directory</Directory><br />
<Include><br />
<Filename>kdevelop.desktop</Filename><br />
<Filename>lazarus.desktop</Filename><br />
<Filename>gambas.desktop</Filename><br />
<Filename>kde-umbrello.desktop</Filename><br />
<Filename>kde-quanta.desktop</Filename><br />
</Include><br />
</Menu><br />
<Menu><br />
<Name>Utilities1</Name><br />
<Directory>kde-utilities.directory</Directory><br />
<Include><br />
<Filename>kde-kcalc.desktop</Filename><br />
<Filename>kde-konsole.desktop</Filename><br />
<Filename>alt-midnight_commander.desktop</Filename><br />
<Filename>kde-k3b.desktop</Filename><br />
<Filename>kde-kwrite.desktop</Filename><br />
<Filename>kde-KCharSelect.desktop</Filename><br />
</Include><br />
</Menu><br />
<Menu><br />
<Name>Settingsmenu1</Name><br />
<Directory>kde-settingsmenu.directory</Directory><br />
<Include><br />
<Filename>alterator-standalone.desktop</Filename><br />
<Filename>alterator-configd.desktop</Filename><br />
<Filename>kde-KControl.desktop</Filename><br />
<Filename>synaptic.desktop</Filename><br />
<Filename>kde-ksysguard.desktop</Filename><br />
<Filename>kde-kinfocenter.desktop</Filename><br />
<Filename>kde-KFloppy.desktop</Filename><br />
<Filename>kde-kkbswitch.desktop</Filename><br />
</Include><br />
</Menu><br />
</Menu></pre><br />
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}<br />
{{Category navigation|title=KDE|category=KDE|sortkey={{SUBPAGENAME}}}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Bacula&diff=41272
Bacula
2018-02-16T11:59:09Z
<p>217.15.195.17: /* Базовая настройка Baculum */</p>
<hr />
<div>== Бэкапы обстоятельно ==<br />
Первым делом стоит понять, что Bacula — сложный продукт, пригодный для множества ситуаций, но за это приходится платить существенным вложением времени в освоение базовых вещей и соответствующее конфигурирование (отведите хотя бы неделю на базовое освоение и планирование тестовой инсталяции).<br />
<br />
Если требуется создавать простую резервную копию — возможно, достаточно просто {{pkg|tar}}, {{pkg|rsync}} или несложных систем вроде {{pkg|rdiff-backup}} или {{pkg|bontmia}}. Но если надо работать с несколькими клиентами, стораджами, наборами данных, расписаниями бэкапа — лучше сразу посмотреть на {{pkg|bacula}}.<br />
<br />
== Подводные грабли ==<br />
Перед подъёмом боевой бакулы есть смысл хотя бы неделю потренироваться на учебной установке; хорошо бы при этом заметить такой момент как настройка VolumeRetention и Recycle/AutoPrune, иначе рано или поздно настанет день, когда единственный здоровенный том подойдёт к концу и сделать с этим ничего не получится, потому что bacula их _только_ дописывает и никогда не начинает перезаписывать место в томе, которое было занято уже удалёнными заданиями. Стоит делать небольшие (пусть десятки гигов, а не терабайты) тома и наладить их автоматизированный оборот.<br />
<br />
== Базовая настройка Bacula ==<br />
Рассмотрим минимальную установку сервера bacula.<br><br />
Установим необходимые пакеты:<br><br />
На сервере:<br />
<pre># apt-get install bacula7-common bacula7-console bacula7-director-common bacula7-director-mysql bacula7-storage mt-st</pre><br />
На клиенте:<br />
<pre># apt-get install bacula7-client</pre><br />
{{Attention|Если у Вас включен SELinux, то на время настройки выключите его}}<br />
{{Attention|Если у Вас не запускаются сервисы Bacula с ошибкой Cannot not open pid file. См. [https://bugzilla.altlinux.org/33645 Bug 33645]}}<br />
Для исправления запуска сервисов ([https://bugzilla.altlinux.org/33645 Bug 33645]) необходимо привести файл {{path|/lib/tmpfiles.d/bacula.conf}} к следующему виду:<br />
<pre>d /var/run/bacula 0775 root bacula -</pre><br />
И перезагрузить сервер.<br />
{{Attention|Если у Вы используете 5 версию Bacula то все файлы с описаниями задач, расписаний, списков файлов и т.д. необходимо добавлять в конфигурационные файлы сервисов с помощью такой строки: '''@/etc/bacula/job/bacula.conf'''}}<br />
=== Настройка базы данных MySQL ===<br />
<br />
Процесс запуска и настройки MySQL сервера описан [[MySQL|тут]]<br><br />
<br />
Запустим сервис и добавим его в автозагрузку:<br />
<pre># systemctl start mysqld<br />
# systemctl enable mysqld</pre><br />
В bacula присутствуют скрипты для создания базы, пользователя и таблиц.<br><br />
Для того чтобы задать пароль для пользователя bacula необходимо отредактировать следующую строку в файле {{path|/usr/share/bacula/scripts/grant_mysql_privileges}}:<br />
<pre>...<br />
db_password="DBPaSSword"<br />
...</pre><br />
В противном случае пользователь создастся без пароля.<br><br />
Выполним следующие скрипты используя пароль mysql для root:<br />
<pre># /usr/share/bacula/scripts/create_mysql_database -p<br />
# /usr/share/bacula/scripts/make_mysql_tables -p<br />
# /usr/share/bacula/scripts/grant_mysql_privileges -p</pre><br />
<br />
=== Настройка Director ===<br />
За настройку Bacula Director отвечает файл {{path|/etc/bacula/bacula-dir.conf}}:<br />
<pre>Director {<br />
Name = dir # Имя <br />
DIRport = 9101 # Порт который будет слушать Director<br />
QueryFile = "/usr/share/bacula/scripts/query.sql"<br />
WorkingDirectory = "/var/lib/bacula"<br />
PidDirectory = "/var/run/bacula"<br />
Maximum Concurrent Jobs = 1<br />
@/etc/bacula/bacula-dir-password.conf # Файл с паролем для доступа к Director<br />
Messages = Daemon<br />
}<br />
# Параметры каталога<br />
Catalog {<br />
Name = MyCatalog # Имя каталога<br />
dbname = bacula # Имя базы данных<br />
user = bacula # Имя пользователя базы данных<br />
password = "DBPaSSword" # Пароль пользователя базы данных<br />
}<br />
# Дальнейшие строчки подгружают конфигурационные файлы из подкаталогов job.d fileset.d schedule.d client.d storage.d messages.d pool.d<br />
@|"sh -c 'for f in /etc/bacula/job.d/*.conf ; do echo @${f} ; done'"<br />
@|"sh -c 'for f in /etc/bacula/fileset.d/*.conf ; do echo @${f} ; done'"<br />
@|"sh -c 'for f in /etc/bacula/schedule.d/*.conf ; do echo @${f} ; done'"<br />
@|"sh -c 'for f in /etc/bacula/client.d/*.conf ; do echo @${f} ; done'"<br />
@|"sh -c 'for f in /etc/bacula/storage.d/*.conf ; do echo @${f} ; done'"<br />
@|"sh -c 'for f in /etc/bacula/messages.d/*.conf ; do echo @${f} ; done'"<br />
@|"sh -c 'for f in /etc/bacula/pool.d/*.conf ; do echo @${f} ; done'"</pre><br />
==== Описание хранилищ ====<br />
В каталоге {{path|storage.d}} находятся конфигурационные файлы хранилищ к которым director имеет доступ:<br />
<pre>Storage {<br />
Name = File # Имя хранилища<br />
Address = 10.10.50.49 # IP или FQN хранилища (если указать 127.0.0.1, то будет доступен только локальный backup)<br />
SDPort = 9103 # Порт<br />
@/etc/bacula/bacula-sd-password.conf # Пароль для доступа к хранилищу<br />
Device = FileStorage<br />
Media Type = File<br />
}</pre><br />
<br />
==== Описание наборов файлов ====<br />
В каталоге {{path|fileset.d}} находятся описания списков файлов для резервирования:<br />
<pre>catalog.conf: # Описывает резервирование дампа базы данных bacula<br />
FileSet {<br />
Name = "Catalog"<br />
Include {<br />
Options {<br />
signature = MD5<br />
}<br />
File = /var/lib/bacula/bacula.sql<br />
}<br />
}</pre><br />
<pre>fullset.conf: # Полный бэкап системы<br />
FileSet {<br />
Name = "Full Set"<br />
Include { # Какие файлы включать<br />
Options {<br />
signature = MD5<br />
}<br />
File = /<br />
}<br />
Exclude { # Какие файлы не включать в бэкап<br />
File = /proc<br />
File = /sys<br />
File = /dev<br />
File = /tmp<br />
File = /.journal<br />
File = /.fsck<br />
}<br />
}<br />
</pre><br />
==== Описание задач ====<br />
В каталоге {{path|job.d}} описываются задания резервирования.<br><br />
{{path|backupcatalog.conf}} - Делает дамп базы и резервирует его:<br />
<pre>Job {<br />
Name = "BackupCatalog" # Имя<br />
JobDefs = "DefaultJob" # Используемый шаблон<br />
Level = Full<br />
FileSet="Catalog" # Список файлов для бэкапа<br />
Schedule = "WeeklyCycleAfterBackup" # Расписание<br />
RunBeforeJob = "/usr/share/bacula/scripts/make_catalog_backup" # Скрипт выполняемый до бэкапа (создает дамп базы)<br />
RunAfterJob = "/usr/share/bacula/scripts/delete_catalog_backup" # Скрипт выполняемый после бэкапа (удаляет дамп базы)<br />
Write Bootstrap = "/var/lib/bacula/BackupCatalog.bsr" # файл необходимый для востановления<br />
Priority = 11 # Очередность выполнения<br />
}</pre><br />
{{path|bacula.conf}} - делает полный бэкап:<br />
<pre>Job {<br />
Name = "BackupFullSet"<br />
JobDefs = "DefaultJob"<br />
Schedule = "WeeklyCycle"<br />
Write Bootstrap = "/var/lib/bacula/Client1.bsr"<br />
}</pre><br />
{{path|defaultjob.conf}} - описывает параметры задачи по умочанию:<br />
<pre>JobDefs {<br />
Name = "DefaultJob" # Имя<br />
Type = Backup # Тип<br />
Level = Incremental # Вид бэкапа<br />
Client = fd # Клиент с которого нужно сделать бэкап<br />
FileSet = "Full Set" # Список файлов<br />
Storage = File # Хранилище<br />
Messages = Standard<br />
Pool = Default<br />
Priority = 10 # Приоритет<br />
}</pre><br />
{{path|restore.conf}} - восстанавливает файлы:<br />
<pre>Job {<br />
Name = "RestoreFiles" # Имя задачи<br />
Type = Restore # Тип<br />
Client=fd # Клиент на котором востанавливать файлы<br />
FileSet="Full Set" # Набор файлов<br />
Storage = File # Хранилище<br />
Pool = Default<br />
Messages = Standard<br />
Where = /tmp/bacula-restores # Папка куда востанавливать файлы<br />
}<br />
</pre><br />
<br />
<br />
==== Описание пулов ====<br />
Пул объединяет в себе несколько томов, чтобы отдельная резервная копия не была ограничена объемом тома.<br><br />
Том это отдельная единица в которую ведется запись, может быть файлом или ленточкой.<br><br />
{{path|default.conf}} - описывает пул по умолчанию:<br />
<pre>Pool {<br />
Name = Default # Имя<br />
Pool Type = Backup # Тип<br />
Recycle = yes # Разрешает bacula удалять задания из томов<br />
AutoPrune = yes # Разрешает bacula очищать тома<br />
Volume Retention = 365 days # Время в течении которого bacula не будет очищать том<br />
LabelFormat = "b" # Формат меток (в случае с файлами - имена файлов)<br />
}</pre><br />
==== Описание клиентов ====<br />
В файле {{path|client1.conf}} описан локальный клиент:<br />
<pre>Client {<br />
Name = fd # Имя клиента<br />
Address = 127.0.0.1 # IP или FQN<br />
FDPort = 9102 # Порт<br />
Catalog = MyCatalog # Используемый каталог<br />
@/etc/bacula/bacula-fd-password.conf # Пароль для доступа к клиенту<br />
File Retention = 30 days # Срок хранения метаданных о файлах<br />
Job Retention = 6 months # Срок хранения метаданных о задачах<br />
AutoPrune = yes # Автоматическое удаление устаревших метаданных<br />
}</pre><br />
Добавим удаленного клиента с IP 10.10.50.50, для этого создадим файл {{path|client2.conf}} следующего содержания:<br />
<pre>Client {<br />
Name = fd2<br />
Address = 10.10.50.50<br />
FDPort = 9102<br />
Catalog = MyCatalog<br />
Password = "Pa$$wordClient2"<br />
File Retention = 30 days<br />
Job Retention = 6 months<br />
AutoPrune = yes<br />
}</pre><br />
<br />
==== Проверка конфигурационных файлов ====<br />
Проверить корректность конфигурационных файлов bacula director можно так:<br />
<pre># bacula-dir -t -c /etc/bacula/bacula-dir.conf</pre><br />
==== Автозапуск сервиса ====<br />
Запустим и добавим в автозапуск сервис:<br />
<pre># systemctl start bacula-dir<br />
# systemctl enable bacula-dir</pre><br />
<br />
=== Настройка Storage ===<br />
Основной файл конфигурации хранилищ находится это {{path|/etc/bacula/bacula-sd.conf}}, также к нему присоединяются все файлы из каталога {{path|device.d}}<br><br />
По умочанию этот файл выглядит так:<br />
<pre>Storage {<br />
Name = sd # Имя хранилища<br />
SDPort = 9103 # Порт<br />
WorkingDirectory = "/var/lib/bacula"<br />
Pid Directory = "/var/run/bacula"<br />
Maximum Concurrent Jobs = 20<br />
}<br />
Director {<br />
Name = dir # Имя director, который может подсоединяться к этому хранилищу<br />
@/etc/bacula/bacula-sd-password.conf # Файл с паролем к хранилищу<br />
}<br />
@|"sh -c 'for f in /etc/bacula/device.d/*.conf ; do echo @${f} ; done'"<br />
Messages {<br />
Name = Standard<br />
director = dir = all<br />
}</pre><br />
В каталоге {{path|device.d}} находится файл с описанием устройства:<br />
<pre>Device {<br />
Name = FileStorage # Имя устройства<br />
Media Type = File # Тип устройства<br />
Archive Device = /srv/backup # Папка для хранения<br />
LabelMedia = yes;<br />
Random Access = Yes;<br />
AutomaticMount = yes;<br />
RemovableMedia = no;<br />
AlwaysOpen = no;<br />
}</pre><br />
Каталог {{path|/srv/backup}} должнен существовать и принадлежать пользователю bacula:<br />
<pre># mkdir /srv/backup<br />
# chown bacula:bacula /srv/backup</pre><br />
==== Проверка конфигурационных файлов ====<br />
Проверить корректность конфигурационных файлов bacula storage можно так:<br />
<pre># bacula-sd -t -c /etc/bacula/bacula-sd.conf</pre><br />
==== Автозапуск сервиса ====<br />
Запустим и добавим в автозагрузку сервис:<br />
<pre># systemctl start bacula-sd<br />
# systemctl enable bacula-sd</pre><br />
<br />
=== Настройка File Daemon ===<br />
Установим необходимые пакеты:<br />
<pre># apt-get install bacula7-client</pre><br />
Конфигурационный файл клиента находится по адресу {{path|/etc/bacula/bacula-fd.conf}}:<br />
<pre># Список directors, которые могут подключаться к клиенту<br />
Director {<br />
Name = dir <br />
Password = "Pa$$wordClient2"<br />
}<br />
FileDaemon {<br />
Name = fd2<br />
FDport = 9102<br />
WorkingDirectory = /var/lib/bacula<br />
Pid Directory = /var/run/bacula<br />
Maximum Concurrent Jobs = 20<br />
}</pre><br />
==== Автозапуск сервиса ====<br />
Запустим и добавим в автозагрузку сервис:<br />
<pre># systemctl start bacula-fd<br />
# systemctl enable bacula-fd</pre><br />
<br />
== Проверка работоспособности ==<br />
Для управления bacula используется специальная утилита bconsole.<br><br />
<pre># bconsole<br />
Connecting to Director 127.0.0.1:9101<br />
1000 OK: 102 dir Version: 7.4.7 (16 March 2017)<br />
Enter a period to cancel a command.</pre><br />
Для проcмотра статуса всех компонентов введем status:<br />
<pre>*status<br />
Status available for:<br />
1: Director<br />
2: Storage<br />
3: Client<br />
4: Scheduled<br />
5: All<br />
Select daemon type for status (1-5): 5</pre><br />
=== Создание резервной копии ===<br />
<pre># bconsole<br />
Connecting to Director 127.0.0.1:9101<br />
1000 OK: 102 dir Version: 7.4.7 (16 March 2017)<br />
Enter a period to cancel a command.<br />
*run<br />
Automatically selected Catalog: MyCatalog<br />
Using Catalog "MyCatalog"<br />
A job name must be specified.<br />
The defined Job resources are:<br />
1: BackupCatalog<br />
2: BackupFullSet<br />
3: RestoreFiles<br />
Select Job resource (1-3): 2<br />
Run Backup job<br />
JobName: BackupFullSet<br />
Level: Incremental<br />
Client: fd<br />
FileSet: Full Set<br />
Pool: Default (From Job resource)<br />
Storage: File (From Job resource)<br />
When: 2017-07-10 16:00:54<br />
Priority: 10<br />
OK to run? (yes/mod/no): mod<br />
Parameters to modify:<br />
1: Level<br />
2: Storage<br />
3: Job<br />
4: FileSet<br />
5: Client<br />
6: When<br />
7: Priority<br />
8: Pool<br />
9: Plugin Options<br />
Select parameter to modify (1-9): 5<br />
The defined Client resources are:<br />
1: fd<br />
2: fd2<br />
Select Client (File daemon) resource (1-2): 2<br />
Run Backup job<br />
JobName: BackupFullSet<br />
Level: Incremental<br />
Client: fd2<br />
FileSet: Full Set<br />
Pool: Default (From Job resource)<br />
Storage: File (From Job resource)<br />
When: 2017-07-10 16:00:54<br />
Priority: 10<br />
OK to run? (yes/mod/no): yes<br />
Job queued. JobId=1</pre><br />
За ходом выолнения можно наблюдать выбрав статус director:<br />
<pre># bconsole<br />
*status<br />
Status available for:<br />
1: Director<br />
2: Storage<br />
3: Client<br />
4: Scheduled<br />
5: All<br />
Select daemon type for status (1-5): 1<br />
dir Version: 7.4.7 (16 March 2017) x86_64-alt-linux-gnu redhat <br />
Daemon started 10-ию-2017 16:22, conf reloaded 10-июл-2017 16:22:18<br />
Jobs: run=0, running=1 mode=0<br />
Heap: heap=389,120 smbytes=71,240 max_bytes=71,612 bufs=249 max_bufs=255<br />
<br />
Scheduled Jobs:<br />
Level Type Pri Scheduled Job Name Volume<br />
===================================================================================<br />
Incremental Backup 10 10-ию-2017 23:05 BackupFullSet b0001<br />
Full Backup 11 10-ию-2017 23:10 BackupCatalog b0001<br />
====<br />
<br />
Running Jobs:<br />
Console connected at 10-ию-2017 16:22<br />
JobId Type Level Files Bytes Name Status<br />
======================================================================<br />
2 Back Full 0 0 BackupFullSet is running<br />
====<br />
No Terminated Jobs.<br />
====<br />
</pre><br />
=== Востановление из резервной копии ===<br />
<pre># bconsole<br />
*restore<br />
Automatically selected Catalog: MyCatalog<br />
Using Catalog "MyCatalog"<br />
<br />
First you select one or more JobIds that contain files<br />
to be restored. You will be presented several methods<br />
of specifying the JobIds. Then you will be allowed to<br />
select which files from those JobIds are to be restored.<br />
<br />
To select the JobIds, you have the following choices:<br />
1: List last 20 Jobs run<br />
2: List Jobs where a given File is saved<br />
3: Enter list of comma separated JobIds to select<br />
4: Enter SQL list command<br />
5: Select the most recent backup for a client<br />
6: Select backup for a client before a specified time<br />
7: Enter a list of files to restore<br />
8: Enter a list of files to restore before a specified time<br />
9: Find the JobIds of the most recent backup for a client<br />
10: Find the JobIds for a backup for a client before a specified time<br />
11: Enter a list of directories to restore for found JobIds<br />
12: Select full restore to a specified Job date<br />
13: Cancel</pre><br />
Выбираем 1 пункт - показать последнии 20 задач<br />
<pre>Select item: (1-13): 1<br />
+-------+--------+---------------------+----------+----------+---------------+<br />
| JobId | Client | StartTime | JobLevel | JobFiles | JobBytes |<br />
+-------+--------+---------------------+----------+----------+---------------+<br />
| 2 | fd2 | 2017-07-10 16:22:47 | F | 49995 | 1194397517 |<br />
+-------+--------+---------------------+----------+----------+---------------+<br />
To select the JobIds, you have the following choices:<br />
1: List last 20 Jobs run<br />
2: List Jobs where a given File is saved<br />
3: Enter list of comma separated JobIds to select<br />
4: Enter SQL list command<br />
5: Select the most recent backup for a client<br />
6: Select backup for a client before a specified time<br />
7: Enter a list of files to restore<br />
8: Enter a list of files to restore before a specified time<br />
9: Find the JobIds of the most recent backup for a client<br />
10: Find the JobIds for a backup for a client before a specified time<br />
11: Enter a list of directories to restore for found JobIds<br />
12: Select full restore to a specified Job date<br />
13: Cancel</pre><br />
Выбираем 3 пункт - ввести номера задач через запятую и вводим номер задачи 2<br />
<pre>Select item: (1-13): 3<br />
Enter JobId(s), comma separated, to restore: 2<br />
You have selected the following JobId: 2<br />
<br />
Building directory tree for JobId(s) 2 ... ++++++++++++++++++++++++++++++++++++++++++++<br />
44,444 files inserted into the tree.<br />
<br />
You are now entering file selection mode where you add (mark) and<br />
remove (unmark) files to be restored. No files are initially added, unless<br />
you used the "all" keyword on the command line.<br />
Enter "done" to leave this mode.<br />
</pre><br />
Bacula построит дерево файлов в котором мы можем выбрать файлы для востановления.<br><br />
Выберем файлы в каталоге /etc<br />
<pre>cwd is: /<br />
$ mark etc<br />
1,933 files marked.<br />
$ done<br />
Bootstrap records written to /var/lib/bacula/dir.restore.1.bsr<br />
Bootstrap records written to /var/lib/bacula/dir.restore.1.bsr<br />
<br />
The Job will require the following (*=>InChanger):<br />
Volume(s) Storage(s) SD Device(s)<br />
===========================================================================<br />
<br />
b0001 File FileStorage <br />
<br />
Volumes marked with "*" are in the Autochanger.<br />
<br />
<br />
1,933 files selected to be restored.</pre><br />
Выберем клиента для востановления:<br />
<pre>Defined Clients:<br />
1: fd<br />
2: fd2<br />
Select the Client (1-2): 2</pre><br />
Проверим все параметры задачи и запустим её:<br />
<pre>Using Catalog "MyCatalog"<br />
Run Restore job<br />
JobName: RestoreFiles<br />
Bootstrap: /var/lib/bacula/dir.restore.1.bsr<br />
Where: /tmp/bacula-restores<br />
Replace: Always<br />
FileSet: Full Set<br />
Backup Client: fd2<br />
Restore Client: fd2<br />
Storage: File<br />
When: 2017-07-10 16:33:04<br />
Catalog: MyCatalog<br />
Priority: 10<br />
Plugin Options: <br />
OK to run? (yes/mod/no): yes<br />
Job queued. JobId=3<br />
*</pre><br />
Файлы востановленны в каталог {{path|/tmp/bacula-restores}}<br />
== Настройка Bacula для PostgreSQL ==<br />
=== Настройка клиента ===<br />
{{Attention|Для работы с Bacula на сервере PostgreSQL должно быть настроено онлайн резервирование [[PostgreSQL#Continuous_Archiving_and_Point-in-Time_Recovery|PITR]])}}<br />
На клиенте в каталоге /etc/bacula создадим следующие скрипты:<br><br />
<br><br />
'''pre-base-backup.sh''':<br />
<source lang="bash">#!/bin/bash<br />
DATE=`date +"%b %d %T"`<br />
/usr/bin/pg_basebackup -D /var/lib/pgsql/backup -F t -z -U postgres -w -c fast -l "pg_basebackup ${DATE}"</source><br />
Этот скрипт создает полную копию базы данных и выполняется перед выполнением задачи резервного копирования базы.<br><br />
<br><br />
'''post-base-backup.sh''':<br />
<source lang="bash">#!/bin/bash<br />
rm -f /var/lib/pgsql/backup/*</source><br />
Этот скрипт удаляет созданную копию базы данных и будет выполнен после задачи резервного копирования базы.<br><br />
<br><br />
'''pre-logs-backup.sh''':<br />
<source lang="bash">#!/bin/bash<br />
touch /var/lib/pgsql/backup_in_progress</source><br />
Этот скрипт создает файл backup_in_progress и выполняется перед выполнением задачи резервного копирования журналов. Этот файл нужен, чтобы во время резервного копирования PostgreSQL не архивировал новые журналы ([[PostgreSQL#Настройка_журналов_WAL|copy_wal.sh]])<br><br />
<br><br />
'''post-logs-backup.sh''':<br />
<source lang="bash">#!/bin/bash<br />
rm -f /var/lib/pgsql/wals/*<br />
rm -f /var/lib/pgsql/backup_in_progress</source><br />
Этот скрипт очищает каталог с журналами и файл backup_in_progress, и будет выполнен после задачи резервного копирования журналов.<br />
Далее необходимо сделать эти скрипты исполняемыми:<br />
<pre># chmod 750 pre-base-backup.sh<br />
# chmod 750 post-logs-backup.sh<br />
# chmod 750 post-base-backup.sh<br />
# chmod 750 pre-logs-backup.sh</pre><br />
На этом настройка клиента завершена.<br />
<br />
=== Настройка сервера ===<br />
Для онлайн резервного копирования PostgreSQL необходимо добавить в Bacula клиента и создать для него задачи. В этом примере рассмотрим настройку на примере клиента zabbix-fd.<br />
==== Списки файлов ====<br />
Создадим списки файлов для резервного копирования в каталоге {{path|/etc/bacula/fileset.d}}:<br><br />
Список для копирования полной резервной копии базы {{path|PGSQL-Full-Base-set.conf}}:<br />
<pre>FileSet {<br />
Name = "PGSQL-Full-Base-set"<br />
Include {<br />
Options {<br />
signature = MD5<br />
Sparse = yes<br />
aclsupport = yes<br />
xattrsupport = yes<br />
}<br />
File = "/var/lib/pgsql/backup"<br />
}<br />
}</pre><br />
==== Журналы ====<br />
Список для копирования журналов {{path|PGSQL-Logs-set.conf}}:<br />
<pre>FileSet {<br />
Name = "PGSQL-Logs-set"<br />
Include {<br />
Options {<br />
signature = MD5<br />
Sparse = yes<br />
aclsupport = yes<br />
xattrsupport = yes<br />
}<br />
File = "/var/lib/pgsql/wals"<br />
}<br />
}</pre><br />
==== Пул ====<br />
Создадим отдельный пул для наших бекапов в каталоге {{path|/etc/bacula/pool.d}}:<br><br />
Файл {{path|zabbix.conf}}:<br />
<pre>Pool {<br />
Name = Zabbix<br />
Pool Type = Backup<br />
Recycle = yes <br />
AutoPrune = yes <br />
Volume Retention = 365 days <br />
LabelFormat = "zabbix"<br />
}</pre><br />
==== Расписания ====<br />
Создадим расписания для резервирования базы и журналов в каталоге {{path|/etc/bacula/schedule.d}}:<br><br />
Файл {{path|PGSQL-Full-Base-Cycle.conf}}:<br />
<pre>Schedule {<br />
Name = "PGSQL-Full-Base-Cycle"<br />
Run = Full sun at 01:00 # задание будет выполнять полный бэкап каждое воскресенье в 01:00<br />
}</pre><br />
файл {{path|PGSQL-Logs-Cycle.conf}}:<br />
<pre>Schedule {<br />
Name = "PGSQL-Logs-Cycle"<br />
Run = Incremental mon-sat at 01:30 # задание будет выполнять инкрементальный бэкап каждый день с пн-сб в 01:30<br />
}</pre><br />
==== Задачи ====<br />
Создадим задачи резервного копирования в каталоге {{path|/etc/bacula/job.d}}:<br><br />
Задача резервного копирования базы {{path|zabbix-pgsql-base-fd.conf}}:<br />
<pre>Job {<br />
Name = "zabbix-pgsql-base-fd"<br />
JobDefs = "DefaultJob"<br />
Client = zabbix-fd<br />
FileSet = "PGSQL-Full-Base-set"<br />
Accurate = no<br />
Pool = Zabbix<br />
Priority = 10 # приоритет выполнения задачи<br />
Schedule = "PGSQL-Full-Base-Cycle"<br />
ClientRunBeforeJob = "/etc/bacula/pre-base-backup.sh" # скрипт выполняющийся до задачи<br />
ClientRunAfterJob = "/etc/bacula/post-base-backup.sh" # скрипт выполняющийся после задачи<br />
}</pre><br />
Задача резервного копирования журналов {{path|zabbix-pgsql-logs-fd.conf}}:<br />
<pre>Job {<br />
Name = "zabbix-pgsql-logs-fd"<br />
JobDefs = "DefaultJob"<br />
Client = zabbix-fd<br />
FileSet = "PGSQL-Logs-set"<br />
Accurate = no<br />
Pool = Zabbix<br />
Priority = 11 # приоритет ниже чем у задачи резервного копирования базы<br />
Schedule = "PGSQL-Logs-Cycle"<br />
ClientRunBeforeJob = "/etc/bacula/pre-logs-backup.sh" # скрипт выполняющийся до задачи<br />
ClientRunAfterJob = "/etc/bacula/post-logs-backup.sh"# скрипт выполняющийся после задачи<br />
}</pre><br />
Теперь необходимо перезапустить сервис Bacula Director:<br />
<pre># systemctl restart bacula-dir</pre><br />
== Базовая настройка Baculum ==<br />
Рассмотрим базовую установку web интерфейса baculum.<br />
Установим необходимые пакеты на сервере:<br><br />
<pre># apt-get install baculum9-sqlite3<br />
# apt-get install baculum9-apache2</pre><br><br />
Далее включим сайты {{path|baculum-api.conf}} и {{path|baculum-web.conf}} в apache2:<br><br />
<pre># a2ensite baculum-api<br />
# a2ensite baculum-web</pre><br><br />
Включаем следующие модули для работы baculum web: <pre>auth_basic authn_core authn_file authz_core authz_host authz_user mod_php7 negotiation rewrite setenvif</pre><br />
c помощью команды: <pre>Пример # a2enmod auth_basic</pre><br />
<br>В каталоге /etc/httpd2/conf/sites-enabled/ редактируем {{path|baculum-api.conf}} и {{path|baculum-web.conf}} ищем код<tt><br />
</Location> <br />
AuthType Basic<br />
AuthName "Baculum Auth"<br />
AuthUserFile /usr/share/baculum/htdocs/protected/API/Config/baculum.users<br />
Require valid-user<br />
</Location></tt><br />
и полностью комментируем строки.<br><br />
Добавляем пользователя apache2 в группу bacula:<pre># usermod -a -G bacula apache2</pre><br><br />
Запустим сервис httpd2:<pre># systemctl start httpd2</pre><br />
Переходим по ссылке http://IPадрес:9096 попадаем в интерфейс настройки baculum-api:<br><br><br />
Выбираем язык --> Настраиваем доступ к базе данных<br><br />
<pre>Database type: sqlite<br />
Database name: bacula<br />
SQLite database path:/var/lib/bacula/bacula.db</pre><br />
<br> Настраиваем интерфейс для выполнения команд в bconsole: <br><br />
<pre>Bconsole binary file path: /usr/bin/bconsole<br />
Bconsole admin config file path:/etc/bacula/bconsole.conf</pre><br> Настраиваем Config API<br><br />
General configuration<br><br />
<pre>Directory path for new config files: /etc/bacula/new </pre> <br />
Director<br><pre>bdirjson binary file path:/usr/sbin/bdirjson <br />
Main Director config file path (usually bacula-dir.conf): /etc/bacula/bacula-dir.conf</pre><br> Storage Daemon<br> <pre>bsdjson binary file path:/usr/sbin/bsdjson<br />
Main Storage Daemon config file path (usually bacula-sd.conf): /etc/bacula/bacula-sd.conf</pre> <br />
<br>File Daemon/Client<br><br />
<pre>bfdjson binary file path:/usr/sbin/bfdjson<br />
Main File Daemon config file path (usually bacula-fd.conf): /etc/bacula/bacula-fd.conf</pre> <br>Bconsole<br><pre>bbconsjson binary file path: /usr/sbin/bbconsjson<br />
Admin Bconsole config file path (usually bconsole.conf): /etc/bacula/bconsole.conf<br></pre><br />
Далее выберите Use HTTP Basic authentication введите логин пароль. Save.<br><br><br />
Переходим по ссылке http://IPадрес:9095 попадаем в интерфейс настройки baculum-web:<br><br />
Выбираем язык --> Вводим API логин пароль Use HTTP Basic authentication остальное оставим по умолчанию --> Далее вводим логин пароль и перед тем как сохранить параметры раскомментируйте раннее комментированный код в файлах {{path|baculum-api.conf}} и {{path|baculum-web.conf}} и перезапустите apache2<br><br />
На этом базовая настройка web интерфейса baculum завершена.<br />
<br />
== Ссылки ==<br />
* http://www.bacula.org<br />
* [http://ru.wikibooks.org/wiki/Bacula Учебник на русском]<br />
* [http://www.enterprisenetworkingplanet.com/nethub/print.php/3810891 Кратенько по настройке со стримерами]<br />
* [http://baheyeldin.com/linux/using-tape-backup-on-linux-for-a-home-network.html Довольно обстоятельное введение в ленточки]<br />
[[Категория:Admin]]<br />
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Nextcloud&diff=41231
Nextcloud
2018-02-05T11:17:29Z
<p>217.15.195.17: /* Подготовка окружения */</p>
<hr />
<div>{{Stub}}<br />
Nextcloud - облачное хранилище файлов.<br />
* Сайт: https://nextcloud.com<br />
* Лицензия: AGPL-3.0<br />
= Установка Nextcloud =<br />
=== Подготовка окружения ===<br />
Для работы Nextcloud необходим настроенный web-сервер.<br><br />
Необходимо установить следующие пакеты:<br />
<pre># apt-get install apache2 apache2-mod_php5 apache2-mod_ssl php5 php5-zip php5-dom php5-mbstring php5-gd2 php5-curl php5-pdo php5-xmlreader php5-openssl php5-fileinfo tzdata</pre><br />
Разрешим нужные модули Apache2:<br />
<pre># a2enmod ssl<br />
# a2enmod headers<br />
# a2enmod env<br />
# a2enmod rewrite<br />
# a2enmod mime<br />
# a2enmod dir</pre><br />
<br />
=== Установка ===<br />
==== С помощью web-установщика ====<br />
{{Attention|Инсталятор системы может ставить пакет ( installer-feature-apache2-indexhtml-stage2 ?? ) который правит <br />
в файлах {{path|/etc/httpd2/conf/sites-available/default.conf}} и {{path|/etc/httpd2/conf/sites-available/default_https.conf}}<br />
строчку /var/www/html на /usr/share/doc/indexhtml/<br />
<br />
Проверить командой grep:<br />
<br />
# grep DocumentRoot /etc/httpd2/conf/sites-available/default.conf <br />
# DocumentRoot: The directory out of which you will serve your<br />
'''DocumentRoot "/usr/share/doc/indexhtml/"'''<br />
# This should be changed to whatever you set DocumentRoot to.<br />
# Summary: Configure for html documents in DocumentRoot<br />
# access content that does not live under the DocumentRoot.<br />
<br />
Если строчка DocumentRoot не содержит /var/www/html запустите команды ниже:<br />
<pre><br />
sed -i "s|/usr/share/doc/indexhtml|/var/www/html|" /etc/httpd2/conf/sites-available/default.conf<br />
sed -i "s|/usr/share/doc/indexhtml|/var/www/html|" /etc/httpd2/conf/sites-available/default_https.conf<br />
</pre><br />
}}<br />
<br />
Рассмотрим установку Nextcloud на сервер c Apache2 с помощью web-установщика.<br><br />
У web-сервера должны быть права на запись в директорию с файлом {{path|setup-nextcloud.php}}<br><br />
Права можно назначить, временно, добавив пользователя apache2 в группу webmaster:<br />
<pre># usermod -a -G webmaster apache2<br />
# systemctl restart httpd2</pre><br />
Зайдите на сайт https://nextcloud.com/install/ в раздел Download -> Web-installer и скачайте в корень вашего web-сервера {{path|/var/www/html}} файл {{path|setup-nextcloud.php}}:<br />
<pre># cd /var/www/html/<br />
# wget https://download.nextcloud.com/server/installer/setup-nextcloud.php</pre><br />
Далее переходим по ссылке:<br />
<pre>http://your_web_server_adress/setup-nextcloud.php</pre><br />
И следуем инструкциям установщика. По умолчанию Nextcloud устанавливается в подпапку {{path|/var/www/html/nextcloud}}<br />
После установки удалим пользователя apache2 из группы webmaster:<br />
<pre># gpasswd -d apache2 webmaster</pre><br />
<br />
==== Рекомендации по безопасности ====<br />
Также рекомендуется сменить владельца файлов nextcloud на root, оставив Apache2 доступ на запись к папкам {{path|data config apps}}:<br />
<pre># chown -R root /var/www/html/nextcloud/<br />
# chown -R apache2 /var/www/html/nextcloud/apps/<br />
# chown -R apache2 /var/www/html/nextcloud/config/<br />
# chown -R apache2 /var/www/html/nextcloud/data/</pre><br />
=== Настройка кэширования ===<br />
Далее необходимо настроить систему кэширования:<br><br />
Установим следующие пакеты:<br />
<pre># apt-get install php5-apcu memcached php5-memcached</pre><br />
Добавляем службу memcached в автозагрузку и стартуем ее: <br />
<pre># systemctl enable memcached<br />
# systemctl start memcached</pre><br />
Добавим в {{path|config.php}} (находится в папке {{path|/var/www/html/nextcloud/config/}}) следующие строки:<br />
<pre>'memcache.local' => '\OC\Memcache\APCu',<br />
'memcache.distributed' => '\OC\Memcache\Memcached',<br />
'memcached_servers' => array(<br />
array('localhost', 11211),<br />
),</pre><br />
=== Создание самоподписных SSL сертификатов ===<br />
Для правильной работы SSL нам необходимы SSL-сертификаты. Их можно купить или сгенерировать:<br><br />
1. Создаем ключ корневого хранилища, наш самый главный ключ:<br />
<pre>openssl genrsa -des3 -out nextcloud-domain-ca.key 2048</pre><br />
2. Создаем и зашифровываем ключом корневого хранилища корневой сертификат, сертификат издателя сертификатов:<br />
{{Attention|При запросе Common Name необходимо указать доменное имя сайта или ip-адрес}}<br />
<pre>openssl req -new -x509 -days 3650 -key nextcloud-domain-ca.key -out nextcloud-domain-ca.crt</pre><br />
3. Создаем ключ веб-сервера, который вы намерены защитить сертификатом:<br />
<pre>openssl genrsa -des3 -out nextcloud.key 1024</pre><br />
4. Создаем запрос на подписание сертификата веб-сервера:<br />
{{Attention|При запросе Common Name необходимо указать доменное имя сайта или ip-адрес}}<br />
<pre>openssl req -new -key nextcloud.key -out nextcloud.csr</pre><br />
5. Создаем и подписываем сертификат веб-сервера, используя запрос на сертификат, корневой ключ и корневой сертификат:<br />
<pre>openssl x509 -req -in nextcloud.csr -out nextcloud.crt -sha1 -CA nextcloud-domain-ca.crt -CAkey nextcloud-domain-ca.key -CAcreateserial -days 3650</pre><br />
6. Apache2 будет требовать при запуске пароль к ключу веб-сервера. Если это вам не нужно, сделайте страховую копию ключа веб-сервера:<br />
<pre>cp nextcloud.key nextcloud.key.dist</pre><br />
и очистите пароль ключа веб-сервера командой:<br />
<pre>openssl rsa -in nextcloud.key.dist -out nextcloud.key</pre><br />
7. Создадим цепочку сертификатов CA-bundle:<br />
<pre>cat nextcloud.crt nextcloud-domain-ca.crt > nextcloud.ca-bundle</pre><br />
8. В итоге у нас будут следующие файлы:<br />
<pre>nextcloud.crt - сертификат нашего сервера<br />
nextcloud.csr - запрос на сертификат<br />
nextcloud.key - ключ сертификата нашего сервера<br />
nextcloud.ca-bundle - ca-bundle файл нашего сайта<br />
nextcloud-domain-ca.crt - корневой сертификат<br />
nextcloud-domain-ca.key - ключ корневого сертификата</pre><br />
=== Конфигурационный файл Apache2 ===<br />
Теперь создадим конфигурационный файл нашего сайта и настроим SSL-доступ<br><br />
Включим 443 порт:<br />
<pre># a2enport https</pre><br />
Скопируем стандартный конфигурационный файл и назовём его nextcloud.conf:<br />
<pre># cd /etc/httpd2/conf/sites-available/<br />
# cp default_https.conf nextcloud.conf</pre><br />
Ваш конфигурационный {{path|/etc/httpd2/conf/sites-available/nextcloud.conf}} файл должен содержать следующие строки (вместо ip-адреса можно указать DNS-имя):<br />
<source lang="apache"><VirtualHost *:443><br />
DocumentRoot "/var/www/html/nextcloud"<br />
ServerName 10.10.10.10:443<br />
ServerAdmin webmaster@example.com<br />
ErrorLog "/var/log/httpd2/error_log"<br />
TransferLog "/var/log/httpd2/access_log"<br />
SSLEngine on<br />
SSLProtocol all -SSLv2<br />
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5<br />
SSLCertificateFile "/root/ssl/nextcloud.crt"<br />
SSLCertificateKeyFile "/root/ssl/nextcloud.key"<br />
SSLCertificateChainFile "/root/ssl/nextcloud.ca-bundle"<br />
SSLCACertificateFile "/root/ssl/nextcloud-domain-ca.crt"<br />
<IfModule mod_headers.c><br />
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload"<br />
</IfModule><br />
<Directory /var/www/html/nextcloud><br />
AllowOverride All<br />
</Directory><br />
</VirtualHost></source><br />
Так же можно настроить редирект с http на https добавив в файл конфигурации:<br />
<source lang="apache"><VirtualHost *:80><br />
ServerName 10.10.10.10<br />
Redirect permanent / https://10.10.10.10/<br />
</VirtualHost></source><br />
Добавим наш сайт в разрешенные и перезапустим web-сервер:<br />
<pre># a2ensite nextcloud<br />
# systemctl restart httpd2</pre><br />
Теперь Nextcloud доступен по адресу {{path|https://10.10.10.10/}}<br />
При первом заходе по https браузер будет ругаться на самоподписанный сертификат (ошибка {{path|SEC_ERROR_UNKNOWN_ISSUER}}) необходимо добавить его в исключения.<br />
<br />
= Collabora Online в Nextcloud =<br />
=== Описание ===<br />
Collabora Online это мощный онлайн офисный пакет, основанный на LibreOffice, который позволяет работать со всеми основными офисными форматами (документы/таблицы/презентации) прямо в браузере.<br />
<br />
Особенности:<br />
*Базовое редактирование<br />
*Поддержка документов:<br />
**DOC, DOCX, PPT, PPTX, XLS, XLSX + ODF<br />
**Импорт / Просмотр Visio, Publisher, + более 100<br />
*WYSIWYG редактор<br />
*Анонимное редактирование файлов доступных для общего пользования<br />
=== Установка ===<br />
Для работы Collaboro необходимо установить docker-io добавить сервис в автозапуск:<br />
<pre># apt-get install docker-io<br />
# systemctl enable docker<br />
# systemctl start docker<br />
</pre><br />
Далее необходимо скачать образ Collabora Online с помощью docker:<br />
<pre># docker pull collabora/code</pre><br />
И запустить образ docker заменив имя домена на нужное, все точки '.' должны быть экранированны '//':<br />
<pre># docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=10\\.10\\.10\\.10' --restart always --cap-add MKNOD collabora/code</pre><br />
Далее надо настроить reverse proxy<br><br />
Загрузите необходимые модули:<br />
<pre># a2enmod proxy<br />
# a2enmod proxy_wstunnel<br />
# a2enmod proxy_http<br />
# a2enmod ssl</pre><br />
После этого необходимо правильно сконфигурировать Apache2, мы запустим обратный-прокси на порту 4443, так же его можно запустить на под-домене (например {{path|office.nextcloud.com}}):<br />
Создадим в директории {{path|/etc/httpd2/conf/sites-available/}} файл <pre>officenextcloud.conf</pre> следующего содержания, так как мы используем ip-адрес, то указываем тот же сертификат, что и для nextcloud. В случае с доменными именами, нам надо сгенерировать отдельный сертификат для нового доменного имени (п.3-п.7):<br />
<br />
<source lang="apache"><VirtualHost *:4443><br />
ServerName 10.10.10.10:4443<br />
<br />
# SSL configuration, you may want to take the easy route instead and use Lets Encrypt!<br />
SSLEngine on<br />
SSLCertificateFile "/root/ssl/nextcloud.crt"<br />
SSLCertificateKeyFile "/root/ssl/nextcloud.key"<br />
SSLCertificateChainFile "/root/ssl/nextcloud.ca-bundle"<br />
SSLCACertificateFile "/root/ssl/nextcloud-domain-ca.crt"<br />
SSLProtocol all -SSLv2 -SSLv3<br />
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS<br />
SSLHonorCipherOrder on<br />
<br />
# Encoded slashes need to be allowed<br />
AllowEncodedSlashes NoDecode<br />
<br />
# Container uses a unique non-signed certificate<br />
SSLProxyEngine On<br />
SSLProxyVerify None<br />
SSLProxyCheckPeerCN Off<br />
SSLProxyCheckPeerName Off<br />
<br />
# keep the host<br />
ProxyPreserveHost On<br />
<br />
# static html, js, images, etc. served from loolwsd<br />
# loleaflet is the client part of LibreOffice Online<br />
ProxyPass /loleaflet https://127.0.0.1:9980/loleaflet retry=0<br />
ProxyPassReverse /loleaflet https://127.0.0.1:9980/loleaflet<br />
<br />
# WOPI discovery URL<br />
ProxyPass /hosting/discovery https://127.0.0.1:9980/hosting/discovery retry=0<br />
ProxyPassReverse /hosting/discovery https://127.0.0.1:9980/hosting/discovery<br />
<br />
# Main websocket<br />
ProxyPassMatch "/lool/(.*)/ws$" wss://127.0.0.1:9980/lool/$1/ws nocanon<br />
<br />
# Admin Console websocket<br />
ProxyPass /lool/adminws wss://127.0.0.1:9980/lool/adminws<br />
<br />
# Download as, Fullscreen presentation and Image upload operations<br />
ProxyPass /lool https://127.0.0.1:9980/lool<br />
ProxyPassReverse /lool https://127.0.0.1:9980/lool<br />
</VirtualHost><br />
<IfModule ssl_module><br />
Listen 4443<br />
</IfModule></source><br />
{{Attention|Обязательно необходимо зайти по адресу https://10.10.10.10:4443/ и добавить сертификат в исключения браузера}}<br />
Так же необходимо добавить наши самоподписные сертификаты в Nextcloud, для покупных сертификатов данное действие не требуется:<br />
<pre># cat /root/ssl/nextcloud.ca-bundle >> /var/www/html/nextcloud/resources/config/ca-bundle.crt</pre><br />
Далее добавляем наш сайт в разрешенные и перезапускаем Apache2:<br />
<pre># a2ensite officenextcloud<br />
# systemctl restart httpd2</pre><br />
<br />
=== Настройка Collabora Online в Nextcloud ===<br />
1. Заходим на сайт c Nextcloud -> Файлы -> Приложения -> Office & text -> Collabora Online -> Включить<br />
2. Администрирование Collabora Online -> Collabora Online сервер -> указываем адрес нашего сервера с портом ({{path|https://10.10.10.10:4443}})<br />
=== Обновление Collabora Docker ===<br />
1. Скачиваем свежий образ:<br />
<pre># docker pull collabora/code</pre><br />
2. Выясняем id контейнера:<br />
<pre>docker ps</pre><br />
3. Останавливаем и удаляем старый контейнер:<br />
<pre>docker stop CONTAINER_ID<br />
docker rm CONTAINER_ID</pre><br />
4. Запускаем новый контейнер:<br />
<pre>docker run -t -d -p 127.0.0.1:9980:9980 -e 'domain=10\\.10\\.10\\.10' --restart always --cap-add MKNOD collabora/code</pre><br />
= Интеграция с LDAP =<br />
Для интеграции базы пользователей с LDAP необходимо в приложениях включить '''"LDAP user and group backend"'''.<br><br />
Далее переходим на страницу администрирования Nextcloud -> LDAP / AD integration.<br />
На этой странице необходимо указать параметры подключения к LDAP:<br><br />
Вкладка Server:<br><br />
[[Файл:Nextcloudldap01.jpg]]<br><br />
Вкладка Users:<br><br />
[[Файл:Nextcloudldap02.jpg]]<br><br />
Вкладка Login Attributes:<br><br />
[[Файл:Nextcloudldap03.jpg]]<br><br />
Вкладка Groups:<br><br />
[[Файл:Nextcloudldap04.jpg]]<br><br />
На вкладке Advanced -> Directory Settings:<br><br />
*'''User Display Name Field:''' displayname<br />
*'''2nd User Display Name Field:''' mail<br />
*'''Base User Tree:''' cn=users,cn=accounts,dc=ipa,dc=example,dc=test<br />
*'''Base Group Tree:''' cn=groups,cn=accounts,dc=ipa,dc=example,dc=test<br />
На вкладке Expert:<br><br />
*'''Internal Username Attribute:''' uid<br />
*'''UUID Attribute for Users:''' uid<br />
Теперь можно попробовать зайти доменным пользователем используя свой логин и пароль.<br />
<br />
= Настройка SSO =<br />
<br />
Для работы прозрачной аутентификации (SSO) необходимо настроить web-сервер ([[Apache2/AD-auth|Apache]], [[Nginx/AD-auth|Nginx]]). Также желательно сделать интеграцию c LDAP<br><br />
Устанавливаем модуль для php5 <br />
# apt-get install php5-ldap<br />
# systemctl restart httpd2<br />
Далее необходимо включить официальное приложение '''"SSO & SAML authentication"'''.<br><br />
Далее переходим на страницу администрирования Nextcloud -> SSO & SAML authentication и указываем переменную с именем пользователя '''REMOTE_USER'''.<br><br />
Также поставим галочку, чтобы SSO пускал только известных пользователей.</div>
217.15.195.17
https://www.altlinux.org/index.php?title=%D0%A2%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/%D0%9F%D1%80%D0%B0%D0%B2%D0%BA%D0%B0_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%8B%D1%85_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D1%85_%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&diff=41185
Тестирование/Правка простых текстовых документов
2018-01-29T09:40:44Z
<p>217.15.195.17: /* Символ конца строки */</p>
<hr />
<div>== Требования ==<br />
<br />
* Открытие приложения для правки текстовых документов<br />
* Открытие документа с кодировкой cp1251<br />
* Сохранение документа<br />
* Печать документа<br />
<br />
== Методика тестирования ==<br />
<br />
==== Открытие приложения для правки текстовых документов ====<br />
<br />
*Запуск приложения производится из меню KDE «Меню» - «Служебные» - «Редакторы» - «Текстовый редактор (KWrite)». <br />
<br />
==== Открытие документа с кодировкой cp1251 ====<br />
<br />
* В загруженном приложении Kwrite выбираем меню «Файл» - «Открыть». В диалоге открытия файлов выбираем нужный нам файл и в верхнем правом углу выбираем кодировку из выпадающего списка. После чего нажимаем «Открыть».<br />
<br />
==== Сохранение документа ====<br />
<br />
* В процессе редактирования документа его нужно сохранить. Сохранение выполняется пунктом «Файл» - «Сохранить» или «Сохранить как». В появившемся окне диалога сохранения вводим имя файла («Расположение») и устанавливаем нужную нам кодировку в верхнем правом углу. После чего нажимаем сохранить. Пункт «Сохранить» выводит диалог сохранения только если файл сохраняется первый раз, а в дальнейшем при нажатии на «Сохранить» (Ctrl+S) заменяет файл над которым происходит редактирование.<br />
<br />
==== Печать документа ====<br />
<br />
* «Файл» - «Печать» (Ctrl+P), выводит окно выводит окно настроек печати. В котором выбираем принтер на котором будет производится печать, устанавливаем свойства. <br />
** Кнопкой параметры открываются дополнительные настройка для печати (число копий, настройка текста, колонтитулы, разметка, задание, дополнительно).<br />
*** Вкладка «Число копий». Устанавливаем в разделе «Печатать страницы» те страницы которые будут распечатываться из данного документа. В пункте «Вывод» устанавливаем число копий для печати и порядок печати. <br />
*** Вкладка «Настройка текста». Устанавливает параметры для печати текста. Если надо распечатать выделенный текст, устанавливаем галочку в пункт «Печатать выделенный фрагмент», для печати номеров строк устанавливаем «Печатать номера строк». «Печатать описание синтаксиса» выводит на печать с текстом синтаксис.<br />
*** Вкладка «Колонтитулы». Устанавливаем галочки в пунктах колонтитулов которые требуется распечатать и выставляем настройки для них (формат, цвет, фон). <br />
*** Вкладка «Разметка». Выбираем схему печати из выпадающего списка «Схема». Если требуется устанавливаем печать фона и рамки, ставим галочки в пунктах «Цвет фона» и «Рамки». После включения «Рамки» активируются настройка: толщина, отступ в рамке, цвет.<br />
*** Вкладка «Задание». Устанавливаем «Отложение печати» (если требуется) на определенное указанное время. Указываем для выведения стоимость печати и колонтитулы. И ниже бегунком или же в строке ввода устанавливаем приоритет задания. <br />
*** Вкладка «Дополнительно». В таблицу вводим название дополнительного параметра и указываем значение.<br />
** Кнопка «Параметры системы» выводит окно «Настройка печати KDE», которая включает в себя: общие, просмотр, шрифты, команды, фильтр, задание, сервер CUPS, папка.<br />
** Кнопка «Справка» выводит окно справки. Оно содержит в себе информацию и описание данного приложения. <br />
** Кнопка «Печать» производит отправку документа на принтер для печати.<br />
<br />
==== Символ конца строки ====<br />
<br />
* Любой текстовый файл содержит символ завершения строки, это же можно считать переводом строки. По стандарту, любое совместимое с Уникодом приложение должно воспринимать как перевод строки каждый из нижеследующих символов:<br />
** LF: подача строки, U+000A <br />
** CR: возврат каретки, U+000D <br />
** NEL: новая строка, U+0085 <br />
** FF: новая страница, U+000C <br />
** LS: разделитель линий, U+2028 <br />
** PS: разделитель параграфов, U+2029 <br />
* Последовательность CR LF (U+000D U+000A) надлежит воспринимать как один перевод строки (а не два).<br />
<br />
[[Категория:Тестирование|{{SUBPAGENAME}}]]</div>
217.15.195.17
https://www.altlinux.org/index.php?title=%D0%A2%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5/%D0%9F%D1%80%D0%B0%D0%B2%D0%BA%D0%B0_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%8B%D1%85_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D1%85_%D0%B4%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2&diff=41184
Тестирование/Правка простых текстовых документов
2018-01-29T09:39:45Z
<p>217.15.195.17: /* Открытие документа с кодировкой cp1251 */</p>
<hr />
<div>== Требования ==<br />
<br />
* Открытие приложения для правки текстовых документов<br />
* Открытие документа с кодировкой cp1251<br />
* Сохранение документа<br />
* Печать документа<br />
<br />
== Методика тестирования ==<br />
<br />
==== Открытие приложения для правки текстовых документов ====<br />
<br />
*Запуск приложения производится из меню KDE «Меню» - «Служебные» - «Редакторы» - «Текстовый редактор (KWrite)». <br />
<br />
==== Открытие документа с кодировкой cp1251 ====<br />
<br />
* В загруженном приложении Kwrite выбираем меню «Файл» - «Открыть». В диалоге открытия файлов выбираем нужный нам файл и в верхнем правом углу выбираем кодировку из выпадающего списка. После чего нажимаем «Открыть».<br />
<br />
==== Сохранение документа ====<br />
<br />
* В процессе редактирования документа его нужно сохранить. Сохранение выполняется пунктом «Файл» - «Сохранить» или «Сохранить как». В появившемся окне диалога сохранения вводим имя файла («Расположение») и устанавливаем нужную нам кодировку в верхнем правом углу. После чего нажимаем сохранить. Пункт «Сохранить» выводит диалог сохранения только если файл сохраняется первый раз, а в дальнейшем при нажатии на «Сохранить» (Ctrl+S) заменяет файл над которым происходит редактирование.<br />
<br />
==== Печать документа ====<br />
<br />
* «Файл» - «Печать» (Ctrl+P), выводит окно выводит окно настроек печати. В котором выбираем принтер на котором будет производится печать, устанавливаем свойства. <br />
** Кнопкой параметры открываются дополнительные настройка для печати (число копий, настройка текста, колонтитулы, разметка, задание, дополнительно).<br />
*** Вкладка «Число копий». Устанавливаем в разделе «Печатать страницы» те страницы которые будут распечатываться из данного документа. В пункте «Вывод» устанавливаем число копий для печати и порядок печати. <br />
*** Вкладка «Настройка текста». Устанавливает параметры для печати текста. Если надо распечатать выделенный текст, устанавливаем галочку в пункт «Печатать выделенный фрагмент», для печати номеров строк устанавливаем «Печатать номера строк». «Печатать описание синтаксиса» выводит на печать с текстом синтаксис.<br />
*** Вкладка «Колонтитулы». Устанавливаем галочки в пунктах колонтитулов которые требуется распечатать и выставляем настройки для них (формат, цвет, фон). <br />
*** Вкладка «Разметка». Выбираем схему печати из выпадающего списка «Схема». Если требуется устанавливаем печать фона и рамки, ставим галочки в пунктах «Цвет фона» и «Рамки». После включения «Рамки» активируются настройка: толщина, отступ в рамке, цвет.<br />
*** Вкладка «Задание». Устанавливаем «Отложение печати» (если требуется) на определенное указанное время. Указываем для выведения стоимость печати и колонтитулы. И ниже бегунком или же в строке ввода устанавливаем приоритет задания. <br />
*** Вкладка «Дополнительно». В таблицу вводим название дополнительного параметра и указываем значение.<br />
** Кнопка «Параметры системы» выводит окно «Настройка печати KDE», которая включает в себя: общие, просмотр, шрифты, команды, фильтр, задание, сервер CUPS, папка.<br />
** Кнопка «Справка» выводит окно справки. Оно содержит в себе информацию и описание данного приложения. <br />
** Кнопка «Печать» производит отправку документа на принтер для печати.<br />
<br />
==== Символ конца строки ====<br />
<br />
* Любой текстовый файл содержит символ завершение строки, это же можно считать переводом строки. По стандарту, любое совместимое с Уникодом приложение должно воспринимать как перевод строки каждый из нижеследующих символов:<br />
** LF: подача строки, U+000A <br />
** CR: возврат каретки, U+000D <br />
** NEL: новая строка, U+0085 <br />
** FF: новая страница, U+000C <br />
** LS: разделитель линий, U+2028 <br />
** PS: разделитель параграфов, U+2029 <br />
* Последовательность CR LF (U+000D U+000A) надлежит воспринимать как один перевод строки (а не два).<br />
<br />
[[Категория:Тестирование|{{SUBPAGENAME}}]]</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Bacula&diff=40620
Bacula
2017-11-21T08:39:54Z
<p>217.15.195.17: /* Настройка Bacula для PostgreSQL */</p>
<hr />
<div>== Бэкапы обстоятельно ==<br />
Первым делом стоит понять, что Bacula — сложный продукт, пригодный для множества ситуаций, но за это приходится платить существенным вложением времени в освоение базовых вещей и соответствующее конфигурирование (отведите хотя бы неделю на базовое освоение и планирование тестовой инсталяции).<br />
<br />
Если требуется создавать простую резервную копию — возможно, достаточно просто {{pkg|tar}}, {{pkg|rsync}} или несложных систем вроде {{pkg|rdiff-backup}} или {{pkg|bontmia}}. Но если надо работать с несколькими клиентами, стораджами, наборами данных, расписаниями бэкапа — лучше сразу посмотреть на {{pkg|bacula}}.<br />
<br />
== Подводные грабли ==<br />
Перед подъёмом боевой бакулы есть смысл хотя бы неделю потренироваться на учебной установке; хорошо бы при этом заметить такой момент как настройка VolumeRetention и Recycle/AutoPrune, иначе рано или поздно настанет день, когда единственный здоровенный том подойдёт к концу и сделать с этим ничего не получится, потому что bacula их _только_ дописывает и никогда не начинает перезаписывать место в томе, которое было занято уже удалёнными заданиями. Стоит делать небольшие (пусть десятки гигов, а не терабайты) тома и наладить их автоматизированный оборот.<br />
<br />
== Базовая настройка Bacula ==<br />
Рассмотрим минимальную установку сервера bacula.<br><br />
Установим необходимые пакеты:<br><br />
На сервере:<br />
<pre># apt-get install bacula7-common bacula7-console bacula7-director-common bacula7-director-mysql bacula7-storage mt-st</pre><br />
На клиенте:<br />
<pre># apt-get install bacula7-client</pre><br />
{{Attention|Если у Вас включен SELinux, то на время настройки выключите его}}<br />
{{Attention|Если у Вас не запускаются сервисы Bacula с ошибкой Cannot not open pid file. См. [https://bugzilla.altlinux.org/33645 Bug 33645]}}<br />
Для исправления запуска сервисов ([https://bugzilla.altlinux.org/33645 Bug 33645]) необходимо привести файл {{path|/lib/tmpfiles.d/bacula.conf}} к следующему виду:<br />
<pre>d /var/run/bacula 0775 root bacula -</pre><br />
И перезагрузить сервер.<br />
{{Attention|Если у Вы используете 5 версию Bacula то все файлы с описаниями задач, расписаний, списков файлов и т.д. необходимо добавлять в конфигурационные файлы сервисов с помощью такой строки: '''@/etc/bacula/job/bacula.conf'''}}<br />
=== Настройка базы данных MySQL ===<br />
<br />
Процесс запуска и настройки MySQL сервера описан [[MySQL|тут]]<br><br />
<br />
Запустим сервис и добавим его в автозагрузку:<br />
<pre># systemctl start mysqld<br />
# systemctl enable mysqld</pre><br />
В bacula присутствуют скрипты для создания базы, пользователя и таблиц.<br><br />
Для того чтобы задать пароль для пользователя bacula необходимо отредактировать следующую строку в файле {{path|/usr/share/bacula/scripts/grant_mysql_privileges}}:<br />
<pre>...<br />
db_password="DBPaSSword"<br />
...</pre><br />
В противном случае пользователь создастся без пароля.<br><br />
Выполним следующие скрипты используя пароль mysql для root:<br />
<pre># /usr/share/bacula/scripts/create_mysql_database -p<br />
# /usr/share/bacula/scripts/grant_mysql_privileges -p<br />
# /usr/share/bacula/scripts/make_mysql_tables -p</pre><br />
<br />
=== Настройка Director ===<br />
За настройку Bacula Director отвечает файл {{path|/etc/bacula/bacula-dir.conf}}:<br />
<pre>Director {<br />
Name = dir # Имя <br />
DIRport = 9101 # Порт который будет слушать Director<br />
QueryFile = "/usr/share/bacula/scripts/query.sql"<br />
WorkingDirectory = "/var/lib/bacula"<br />
PidDirectory = "/var/run/bacula"<br />
Maximum Concurrent Jobs = 1<br />
@/etc/bacula/bacula-dir-password.conf # Файл с паролем для доступа к Director<br />
Messages = Daemon<br />
}<br />
# Параметры каталога<br />
Catalog {<br />
Name = MyCatalog # Имя каталога<br />
dbname = bacula # Имя базы данных<br />
user = bacula # Имя пользователя базы данных<br />
password = "DBPaSSword" # Пароль пользователя базы данных<br />
}<br />
# Дальнейшие строчки подгружают конфигурационные файлы из подкаталогов job.d fileset.d schedule.d client.d storage.d messages.d pool.d<br />
@|"sh -c 'for f in /etc/bacula/job.d/*.conf ; do echo @${f} ; done'"<br />
@|"sh -c 'for f in /etc/bacula/fileset.d/*.conf ; do echo @${f} ; done'"<br />
@|"sh -c 'for f in /etc/bacula/schedule.d/*.conf ; do echo @${f} ; done'"<br />
@|"sh -c 'for f in /etc/bacula/client.d/*.conf ; do echo @${f} ; done'"<br />
@|"sh -c 'for f in /etc/bacula/storage.d/*.conf ; do echo @${f} ; done'"<br />
@|"sh -c 'for f in /etc/bacula/messages.d/*.conf ; do echo @${f} ; done'"<br />
@|"sh -c 'for f in /etc/bacula/pool.d/*.conf ; do echo @${f} ; done'"</pre><br />
==== Описание хранилищ ====<br />
В каталоге {{path|storage.d}} находятся конфигурационные файлы хранилищ к которым director имеет доступ:<br />
<pre>Storage {<br />
Name = File # Имя хранилища<br />
Address = 10.10.50.49 # IP или FQN хранилища (если указать 127.0.0.1, то будет доступен только локальный backup)<br />
SDPort = 9103 # Порт<br />
@/etc/bacula/bacula-sd-password.conf # Пароль для доступа к хранилищу<br />
Device = FileStorage<br />
Media Type = File<br />
}</pre><br />
<br />
==== Описание наборов файлов ====<br />
В каталоге {{path|fileset.d}} находятся описания списков файлов для резервирования:<br />
<pre>catalog.conf: # Описывает резервирование дампа базы данных bacula<br />
FileSet {<br />
Name = "Catalog"<br />
Include {<br />
Options {<br />
signature = MD5<br />
}<br />
File = /var/lib/bacula/bacula.sql<br />
}<br />
}</pre><br />
<pre>fullset.conf: # Полный бэкап системы<br />
FileSet {<br />
Name = "Full Set"<br />
Include { # Какие файлы включать<br />
Options {<br />
signature = MD5<br />
}<br />
File = /<br />
}<br />
Exclude { # Какие файлы не включать в бэкап<br />
File = /proc<br />
File = /sys<br />
File = /dev<br />
File = /tmp<br />
File = /.journal<br />
File = /.fsck<br />
}<br />
}<br />
</pre><br />
==== Описание задач ====<br />
В каталоге {{path|job.d}} описываются задания резервирования.<br><br />
{{path|backupcatalog.conf}} - Делает дамп базы и резервирует его:<br />
<pre>Job {<br />
Name = "BackupCatalog" # Имя<br />
JobDefs = "DefaultJob" # Используемый шаблон<br />
Level = Full<br />
FileSet="Catalog" # Список файлов для бэкапа<br />
Schedule = "WeeklyCycleAfterBackup" # Расписание<br />
RunBeforeJob = "/usr/share/bacula/scripts/make_catalog_backup" # Скрипт выполняемый до бэкапа (создает дамп базы)<br />
RunAfterJob = "/usr/share/bacula/scripts/delete_catalog_backup" # Скрипт выполняемый после бэкапа (удаляет дамп базы)<br />
Write Bootstrap = "/var/lib/bacula/BackupCatalog.bsr" # файл необходимый для востановления<br />
Priority = 11 # Очередность выполнения<br />
}</pre><br />
{{path|bacula.conf}} - делает полный бэкап:<br />
<pre>Job {<br />
Name = "BackupFullSet"<br />
JobDefs = "DefaultJob"<br />
Schedule = "WeeklyCycle"<br />
Write Bootstrap = "/var/lib/bacula/Client1.bsr"<br />
}</pre><br />
{{path|defaultjob.conf}} - описывает параметры задачи по умочанию:<br />
<pre>JobDefs {<br />
Name = "DefaultJob" # Имя<br />
Type = Backup # Тип<br />
Level = Incremental # Вид бэкапа<br />
Client = fd # Клиент с которого нужно сделать бэкап<br />
FileSet = "Full Set" # Список файлов<br />
Storage = File # Хранилище<br />
Messages = Standard<br />
Pool = Default<br />
Priority = 10 # Приоритет<br />
}</pre><br />
{{path|restore.conf}} - восстанавливает файлы:<br />
<pre>Job {<br />
Name = "RestoreFiles" # Имя задачи<br />
Type = Restore # Тип<br />
Client=fd # Клиент на котором востанавливать файлы<br />
FileSet="Full Set" # Набор файлов<br />
Storage = File # Хранилище<br />
Pool = Default<br />
Messages = Standard<br />
Where = /tmp/bacula-restores # Папка куда востанавливать файлы<br />
}<br />
</pre><br />
<br />
<br />
==== Описание пулов ====<br />
Пул объединяет в себе несколько томов, чтобы отдельная резервная копия не была ограничена объемом тома.<br><br />
Том это отдельная единица в которую ведется запись, может быть файлом или ленточкой.<br><br />
{{path|default.conf}} - описывает пул по умолчанию:<br />
<pre>Pool {<br />
Name = Default # Имя<br />
Pool Type = Backup # Тип<br />
Recycle = yes # Разрешает bacula удалять задания из томов<br />
AutoPrune = yes # Разрешает bacula очищать тома<br />
Volume Retention = 365 days # Время в течении которого bacula не будет очищать том<br />
LabelFormat = "b" # Формат меток (в случае с файлами - имена файлов)<br />
}</pre><br />
==== Описание клиентов ====<br />
В файле {{path|client1.conf}} описан локальный клиент:<br />
<pre>Client {<br />
Name = fd # Имя клиента<br />
Address = 127.0.0.1 # IP или FQN<br />
FDPort = 9102 # Порт<br />
Catalog = MyCatalog # Используемый каталог<br />
@/etc/bacula/bacula-fd-password.conf # Пароль для доступа к клиенту<br />
File Retention = 30 days # Срок хранения метаданных о файлах<br />
Job Retention = 6 months # Срок хранения метаданных о задачах<br />
AutoPrune = yes # Автоматическое удаление устаревших метаданных<br />
}</pre><br />
Добавим удаленного клиента с IP 10.10.50.50, для этого создадим файл {{path|client2.conf}} следующего содержания:<br />
<pre>Client {<br />
Name = fd2<br />
Address = 10.10.50.50<br />
FDPort = 9102<br />
Catalog = MyCatalog<br />
Password = "Pa$$wordClient2"<br />
File Retention = 30 days<br />
Job Retention = 6 months<br />
AutoPrune = yes<br />
}</pre><br />
<br />
==== Проверка конфигурационных файлов ====<br />
Проверить корректность конфигурационных файлов bacula director можно так:<br />
<pre># bacula-dir -t -c /etc/bacula/bacula-dir.conf</pre><br />
==== Автозапуск сервиса ====<br />
Запустим и добавим в автозапуск сервис:<br />
<pre># systemctl start bacula-dir<br />
# systemctl enable bacula-dir</pre><br />
<br />
=== Настройка Storage ===<br />
Основной файл конфигурации хранилищ находится это {{path|/etc/bacula/bacula-sd.conf}}, также к нему присоединяются все файлы из каталога {{path|device.d}}<br><br />
По умочанию этот файл выглядит так:<br />
<pre>Storage {<br />
Name = sd # Имя хранилища<br />
SDPort = 9103 # Порт<br />
WorkingDirectory = "/var/lib/bacula"<br />
Pid Directory = "/var/run/bacula"<br />
Maximum Concurrent Jobs = 20<br />
}<br />
Director {<br />
Name = dir # Имя director, который может подсоединяться к этому хранилищу<br />
@/etc/bacula/bacula-sd-password.conf # Файл с паролем к хранилищу<br />
}<br />
@|"sh -c 'for f in /etc/bacula/device.d/*.conf ; do echo @${f} ; done'"<br />
Messages {<br />
Name = Standard<br />
director = dir = all<br />
}</pre><br />
В каталоге {{path|device.d}} находится файл с описанием устройства:<br />
<pre>Device {<br />
Name = FileStorage # Имя устройства<br />
Media Type = File # Тип устройства<br />
Archive Device = /srv/backup # Папка для хранения<br />
LabelMedia = yes;<br />
Random Access = Yes;<br />
AutomaticMount = yes;<br />
RemovableMedia = no;<br />
AlwaysOpen = no;<br />
}</pre><br />
Каталог {{path|/srv/backup}} должнен существовать и принадлежать пользователю bacula:<br />
<pre># mkdir /srv/backup<br />
# chown bacula:bacula /srv/backup</pre><br />
==== Проверка конфигурационных файлов ====<br />
Проверить корректность конфигурационных файлов bacula storage можно так:<br />
<pre># bacula-sd -t -c /etc/bacula/bacula-sd.conf</pre><br />
==== Автозапуск сервиса ====<br />
Запустим и добавим в автозагрузку сервис:<br />
<pre># systemctl start bacula-sd<br />
# systemctl enable bacula-sd</pre><br />
<br />
=== Настройка File Daemon ===<br />
Установим необходимые пакеты:<br />
<pre># apt-get install bacula7-client</pre><br />
Конфигурационный файл клиента находится по адресу {{path|/etc/bacula/bacula-fd.conf}}:<br />
<pre># Список directors, которые могут подключаться к клиенту<br />
Director {<br />
Name = dir <br />
Password = "Pa$$wordClient2"<br />
}<br />
FileDaemon {<br />
Name = fd2<br />
FDport = 9102<br />
WorkingDirectory = /var/lib/bacula<br />
Pid Directory = /var/run/bacula<br />
Maximum Concurrent Jobs = 20<br />
}</pre><br />
==== Автозапуск сервиса ====<br />
Запустим и добавим в автозагрузку сервис:<br />
<pre># systemctl start bacula-fd<br />
# systemctl enable bacula-fd</pre><br />
<br />
== Проверка работоспособности ==<br />
Для управления bacula используется специальная утилита bconsole.<br><br />
<pre># bconsole<br />
Connecting to Director 127.0.0.1:9101<br />
1000 OK: 102 dir Version: 7.4.7 (16 March 2017)<br />
Enter a period to cancel a command.</pre><br />
Для проcмотра статуса всех компонентов введем status:<br />
<pre>*status<br />
Status available for:<br />
1: Director<br />
2: Storage<br />
3: Client<br />
4: Scheduled<br />
5: All<br />
Select daemon type for status (1-5): 5</pre><br />
=== Создание резервной копии ===<br />
<pre># bconsole<br />
Connecting to Director 127.0.0.1:9101<br />
1000 OK: 102 dir Version: 7.4.7 (16 March 2017)<br />
Enter a period to cancel a command.<br />
*run<br />
Automatically selected Catalog: MyCatalog<br />
Using Catalog "MyCatalog"<br />
A job name must be specified.<br />
The defined Job resources are:<br />
1: BackupCatalog<br />
2: BackupFullSet<br />
3: RestoreFiles<br />
Select Job resource (1-3): 2<br />
Run Backup job<br />
JobName: BackupFullSet<br />
Level: Incremental<br />
Client: fd<br />
FileSet: Full Set<br />
Pool: Default (From Job resource)<br />
Storage: File (From Job resource)<br />
When: 2017-07-10 16:00:54<br />
Priority: 10<br />
OK to run? (yes/mod/no): mod<br />
Parameters to modify:<br />
1: Level<br />
2: Storage<br />
3: Job<br />
4: FileSet<br />
5: Client<br />
6: When<br />
7: Priority<br />
8: Pool<br />
9: Plugin Options<br />
Select parameter to modify (1-9): 5<br />
The defined Client resources are:<br />
1: fd<br />
2: fd2<br />
Select Client (File daemon) resource (1-2): 2<br />
Run Backup job<br />
JobName: BackupFullSet<br />
Level: Incremental<br />
Client: fd2<br />
FileSet: Full Set<br />
Pool: Default (From Job resource)<br />
Storage: File (From Job resource)<br />
When: 2017-07-10 16:00:54<br />
Priority: 10<br />
OK to run? (yes/mod/no): yes<br />
Job queued. JobId=1</pre><br />
За ходом выолнения можно наблюдать выбрав статус director:<br />
<pre># bconsole<br />
*status<br />
Status available for:<br />
1: Director<br />
2: Storage<br />
3: Client<br />
4: Scheduled<br />
5: All<br />
Select daemon type for status (1-5): 1<br />
dir Version: 7.4.7 (16 March 2017) x86_64-alt-linux-gnu redhat <br />
Daemon started 10-ию-2017 16:22, conf reloaded 10-июл-2017 16:22:18<br />
Jobs: run=0, running=1 mode=0<br />
Heap: heap=389,120 smbytes=71,240 max_bytes=71,612 bufs=249 max_bufs=255<br />
<br />
Scheduled Jobs:<br />
Level Type Pri Scheduled Job Name Volume<br />
===================================================================================<br />
Incremental Backup 10 10-ию-2017 23:05 BackupFullSet b0001<br />
Full Backup 11 10-ию-2017 23:10 BackupCatalog b0001<br />
====<br />
<br />
Running Jobs:<br />
Console connected at 10-ию-2017 16:22<br />
JobId Type Level Files Bytes Name Status<br />
======================================================================<br />
2 Back Full 0 0 BackupFullSet is running<br />
====<br />
No Terminated Jobs.<br />
====<br />
</pre><br />
=== Востановление из резервной копии ===<br />
<pre># bconsole<br />
*restore<br />
Automatically selected Catalog: MyCatalog<br />
Using Catalog "MyCatalog"<br />
<br />
First you select one or more JobIds that contain files<br />
to be restored. You will be presented several methods<br />
of specifying the JobIds. Then you will be allowed to<br />
select which files from those JobIds are to be restored.<br />
<br />
To select the JobIds, you have the following choices:<br />
1: List last 20 Jobs run<br />
2: List Jobs where a given File is saved<br />
3: Enter list of comma separated JobIds to select<br />
4: Enter SQL list command<br />
5: Select the most recent backup for a client<br />
6: Select backup for a client before a specified time<br />
7: Enter a list of files to restore<br />
8: Enter a list of files to restore before a specified time<br />
9: Find the JobIds of the most recent backup for a client<br />
10: Find the JobIds for a backup for a client before a specified time<br />
11: Enter a list of directories to restore for found JobIds<br />
12: Select full restore to a specified Job date<br />
13: Cancel</pre><br />
Выбираем 1 пункт - показать последнии 20 задач<br />
<pre>Select item: (1-13): 1<br />
+-------+--------+---------------------+----------+----------+---------------+<br />
| JobId | Client | StartTime | JobLevel | JobFiles | JobBytes |<br />
+-------+--------+---------------------+----------+----------+---------------+<br />
| 2 | fd2 | 2017-07-10 16:22:47 | F | 49995 | 1194397517 |<br />
+-------+--------+---------------------+----------+----------+---------------+<br />
To select the JobIds, you have the following choices:<br />
1: List last 20 Jobs run<br />
2: List Jobs where a given File is saved<br />
3: Enter list of comma separated JobIds to select<br />
4: Enter SQL list command<br />
5: Select the most recent backup for a client<br />
6: Select backup for a client before a specified time<br />
7: Enter a list of files to restore<br />
8: Enter a list of files to restore before a specified time<br />
9: Find the JobIds of the most recent backup for a client<br />
10: Find the JobIds for a backup for a client before a specified time<br />
11: Enter a list of directories to restore for found JobIds<br />
12: Select full restore to a specified Job date<br />
13: Cancel</pre><br />
Выбираем 3 пункт - ввести номера задач через запятую и вводим номер задачи 2<br />
<pre>Select item: (1-13): 3<br />
Enter JobId(s), comma separated, to restore: 2<br />
You have selected the following JobId: 2<br />
<br />
Building directory tree for JobId(s) 2 ... ++++++++++++++++++++++++++++++++++++++++++++<br />
44,444 files inserted into the tree.<br />
<br />
You are now entering file selection mode where you add (mark) and<br />
remove (unmark) files to be restored. No files are initially added, unless<br />
you used the "all" keyword on the command line.<br />
Enter "done" to leave this mode.<br />
</pre><br />
Bacula построит дерево файлов в котором мы можем выбрать файлы для востановления.<br><br />
Выберем файлы в каталоге /etc<br />
<pre>cwd is: /<br />
$ mark etc<br />
1,933 files marked.<br />
$ done<br />
Bootstrap records written to /var/lib/bacula/dir.restore.1.bsr<br />
Bootstrap records written to /var/lib/bacula/dir.restore.1.bsr<br />
<br />
The Job will require the following (*=>InChanger):<br />
Volume(s) Storage(s) SD Device(s)<br />
===========================================================================<br />
<br />
b0001 File FileStorage <br />
<br />
Volumes marked with "*" are in the Autochanger.<br />
<br />
<br />
1,933 files selected to be restored.</pre><br />
Выберем клиента для востановления:<br />
<pre>Defined Clients:<br />
1: fd<br />
2: fd2<br />
Select the Client (1-2): 2</pre><br />
Проверим все параметры задачи и запустим её:<br />
<pre>Using Catalog "MyCatalog"<br />
Run Restore job<br />
JobName: RestoreFiles<br />
Bootstrap: /var/lib/bacula/dir.restore.1.bsr<br />
Where: /tmp/bacula-restores<br />
Replace: Always<br />
FileSet: Full Set<br />
Backup Client: fd2<br />
Restore Client: fd2<br />
Storage: File<br />
When: 2017-07-10 16:33:04<br />
Catalog: MyCatalog<br />
Priority: 10<br />
Plugin Options: <br />
OK to run? (yes/mod/no): yes<br />
Job queued. JobId=3<br />
*</pre><br />
Файлы востановленны в каталог {{path|/tmp/bacula-restores}}<br />
== Настройка Bacula для PostgreSQL ==<br />
=== Настройка клиента ===<br />
{{Attention|Для работы с Bacula на сервере PostgreSQL должно быть настроено онлайн резервирование [[PostgreSQL#Continuous_Archiving_and_Point-in-Time_Recovery|PITR]])}}<br />
На клиенте в каталоге /etc/bacula создадим следующие скрипты:<br><br />
<br><br />
'''pre-base-backup.sh''':<br />
<source lang="bash">#!/bin/bash<br />
DATE=`date +"%b %d %T"`<br />
/usr/bin/pg_basebackup -D /var/lib/pgsql/backup -F t -z -U postgres -w -c fast -l "pg_basebackup ${DATE}"</source><br />
Этот скрипт создает полную копию базы данных и выполняется перед выполнением задачи резервного копирования базы.<br><br />
<br><br />
'''post-base-backup.sh''':<br />
<source lang="bash">#!/bin/bash<br />
rm -f /var/lib/pgsql/backup/*</source><br />
Этот скрипт удаляет созданную копию базы данных и будет выполнен после задачи резервного копирования базы.<br><br />
<br><br />
'''pre-logs-backup.sh''':<br />
<source lang="bash">#!/bin/bash<br />
touch /var/lib/pgsql/backup_in_progress</source><br />
Этот скрипт создает файл backup_in_progress и выполняется перед выполнением задачи резервного копирования журналов. Этот файл нужен, чтобы во время резервного копирования PostgreSQL не архивировал новые журналы ([[PostgreSQL#Настройка_журналов_WAL|copy_wal.sh]])<br><br />
<br><br />
'''post-logs-backup.sh''':<br />
<source lang="bash">#!/bin/bash<br />
rm -f /var/lib/pgsql/wals/*<br />
rm -f /var/lib/pgsql/backup_in_progress</source><br />
Этот скрипт очищает каталог с журналами и файл backup_in_progress, и будет выполнен после задачи резервного копирования журналов.<br />
Далее необходимо сделать эти скрипты исполняемыми:<br />
<pre># chmod 750 pre-base-backup.sh<br />
# chmod 750 post-logs-backup.sh<br />
# chmod 750 post-base-backup.sh<br />
# chmod 750 pre-logs-backup.sh</pre><br />
На этом настройка клиента завершена.<br />
<br />
=== Настройка сервера ===<br />
Для онлайн резервного копирования PostgreSQL необходимо добавить в Bacula клиента и создать для него задачи. В этом примере рассмотрим настройку на примере клиента zabbix-fd.<br />
==== Списки файлов ====<br />
Создадим списки файлов для резервного копирования в каталоге {{path|/etc/bacula/fileset.d}}:<br><br />
Список для копирования полной резервной копии базы {{path|PGSQL-Full-Base-set.conf}}:<br />
<pre>FileSet {<br />
Name = "PGSQL-Full-Base-set"<br />
Include {<br />
Options {<br />
signature = MD5<br />
Sparse = yes<br />
aclsupport = yes<br />
xattrsupport = yes<br />
}<br />
File = "/var/lib/pgsql/backup"<br />
}<br />
}</pre><br />
==== Журналы ====<br />
Список для копирования журналов {{path|PGSQL-Logs-set.conf}}:<br />
<pre>FileSet {<br />
Name = "PGSQL-Logs-set"<br />
Include {<br />
Options {<br />
signature = MD5<br />
Sparse = yes<br />
aclsupport = yes<br />
xattrsupport = yes<br />
}<br />
File = "/var/lib/pgsql/wals"<br />
}<br />
}</pre><br />
==== Пул ====<br />
Создадим отдельный пул для наших бекапов в каталоге {{path|/etc/bacula/pool.d}}:<br><br />
Файл {{path|zabbix.conf}}:<br />
<pre>Pool {<br />
Name = Zabbix<br />
Pool Type = Backup<br />
Recycle = yes <br />
AutoPrune = yes <br />
Volume Retention = 365 days <br />
LabelFormat = "zabbix"<br />
}</pre><br />
==== Расписания ====<br />
Создадим расписания для резервирования базы и журналов в каталоге {{path|/etc/bacula/schedule.d}}:<br><br />
Файл {{path|PGSQL-Full-Base-Cycle.conf}}:<br />
<pre>Schedule {<br />
Name = "PGSQL-Full-Base-Cycle"<br />
Run = Full sun at 01:00 # задание будет выполнять полный бэкап каждое воскресенье в 01:00<br />
}</pre><br />
файл {{path|PGSQL-Logs-Cycle.conf}}:<br />
<pre>Schedule {<br />
Name = "PGSQL-Logs-Cycle"<br />
Run = Incremental mon-sat at 01:30 # задание будет выполнять инкрементальный бэкап каждый день с пн-сб в 01:30<br />
}</pre><br />
==== Задачи ====<br />
Создадим задачи резервного копирования в каталоге {{path|/etc/bacula/job.d}}:<br><br />
Задача резервного копирования базы {{path|zabbix-pgsql-base-fd.conf}}:<br />
<pre>Job {<br />
Name = "zabbix-pgsql-base-fd"<br />
JobDefs = "DefaultJob"<br />
Client = zabbix-fd<br />
FileSet = "PGSQL-Full-Base-set"<br />
Accurate = no<br />
Pool = Zabbix<br />
Priority = 10 # приоритет выполнения задачи<br />
Schedule = "PGSQL-Full-Base-Cycle"<br />
ClientRunBeforeJob = "/etc/bacula/pre-base-backup.sh" # скрипт выполняющийся до задачи<br />
ClientRunAfterJob = "/etc/bacula/post-base-backup.sh" # скрипт выполняющийся после задачи<br />
}</pre><br />
Задача резервного копирования журналов {{path|zabbix-pgsql-logs-fd.conf}}:<br />
<pre>Job {<br />
Name = "zabbix-pgsql-logs-fd"<br />
JobDefs = "DefaultJob"<br />
Client = zabbix-fd<br />
FileSet = "PGSQL-Logs-set"<br />
Accurate = no<br />
Pool = Zabbix<br />
Priority = 11 # приоритет ниже чем у задачи резервного копирования базы<br />
Schedule = "PGSQL-Logs-Cycle"<br />
ClientRunBeforeJob = "/etc/bacula/pre-logs-backup.sh" # скрипт выполняющийся до задачи<br />
ClientRunAfterJob = "/etc/bacula/post-logs-backup.sh"# скрипт выполняющийся после задачи<br />
}</pre><br />
Теперь необходимо перезапустить сервис Bacula Director:<br />
<pre># systemctl restart bacula-dir</pre><br />
== Базовая настройка Baculum ==<br />
<br />
== Ссылки ==<br />
* http://www.bacula.org<br />
* [http://ru.wikibooks.org/wiki/Bacula Учебник на русском]<br />
* [http://www.enterprisenetworkingplanet.com/nethub/print.php/3810891 Кратенько по настройке со стримерами]<br />
* [http://baheyeldin.com/linux/using-tape-backup-on-linux-for-a-home-network.html Довольно обстоятельное введение в ленточки]<br />
[[Категория:Admin]]<br />
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=FreeIPA&diff=40046
FreeIPA
2017-09-14T10:48:55Z
<p>217.15.195.17: </p>
<hr />
<div>[[Файл:Freeipa-logo-small.png|frameless|right]]<br />
FreeIPA - это комплексное решение по управлению безопасностью Linux-систем, 389 Directory Server, MIT Kerberos, NTP, DNS, Dogtag. Оно состоит из веб-интерфейса и интерфейса командной строки.<br><br />
FreeIPA является интегрированной системой проверки подлинности и авторизации в сетевой среде Linux, FreeIPA сервер обеспечивает централизованную проверку подлинности, авторизацию и контроль за аккаунтами пользователей сохраняя сведения о пользователе, группах, узлах и других объектах необходимых для обеспечения сетевой безопасности.<br />
<br />
Сайт проекта: http://www.freeipa.org/<br />
<br />
== Установка сервера FreeIPA ==<br />
Устанавливать будет со встроенным DNS сервером и доменом EXAMPLE.TEST в локальной сети 192.168.135.0/24.<br><br />
Для начала отключим ahttpd, работающий на порту 8080, во избежание конфликтов с разворачиваемым tomcat и отключим HTTPS в Apache2:<br />
# service ahttpd stop<br />
# a2dissite 000-default_https<br />
# service httpd2 condreload<br />
<br />
Установим необходимые пакеты:<br />
<pre># apt-get install freeipa-server freeipa-server-dns</pre><br />
Зададим имя сервера:<br />
<pre># hostnamectl set-hostname ipa.example.test</pre><br />
Запускаем скрипт настройки сервера:<br />
В пакетном режиме: <br />
# ipa-server-install -U --hostname=$(hostname) -r EXAMPLE.TEST -n example.test -p 12345678 -a 12345678 --setup-dns --no-forwarders --no-reverse<br />
или интерактивно:<br />
<pre># ipa-server-install</pre><br />
<br />
{{Attention|Пароли должны быть не менее 8 символов}}<br />
<br />
Обратите внимание на ответы на вопросы, не совпадающие с предложенными:<br />
Do you want to configure integrated DNS (BIND)? [no]: yes<br />
Do you want to configure DNS forwarders? [yes]: no<br />
Do you want to search for missing reverse zones? [yes]: no<br />
<br />
остальные вопросы выбираем по умолчанию (можно просто нажать Enter). Так же при установке попросят ввести пароль администратора системы и пароль администратора каталогов.<br><br />
<br />
Для возможности управлять FreeIPA сервером из командной строки необходимо получить билет Kerberos:<br />
<pre># kinit admin</pre><br />
Добавим в DNS запись о нашем сервере времени:<br />
<pre># ipa dnsrecord-add example.test _ntp._udp --srv-priority=0 --srv-weight=100 --srv-port=123 --srv-target=ipa.example.test.</pre><br />
<br />
Проверить работу ntp сервера можно командой:<br />
<pre># ntpdate -q localhost<br />
server 127.0.0.1, stratum 3, offset 0.000018, delay 0.02568<br />
27 Apr 10:27:00 ntpdate[3491]: adjust time server 127.0.0.1 offset 0.000018 sec</pre><br />
<br />
Также доступен веб-интерфейс по адресу: <br />
<pre>https://ipa.example.test/ipa/ui/</pre><br />
<br />
{{Note|Если выдаёт <pre>[error] CalledProcessError: Command '/sbin/systemctl restart httpd2.service' returned non-zero exit status 1</pre><br />
Выполните <br />
# systemctl restart httpd2<br />
Отмените установку: <br />
# ipa-server-install -U --uninstall<br />
и повторите снова.}}<br />
<br />
== Установка FreeIPA клиента и подключение к серверу ==<br />
Установим необходимые пакеты:<br />
<pre># apt-get install freeipa-client libsss_sudo krb5-kinit bind-utils libbind</pre><br />
Зададим имя компьютера:<br />
<pre># hostnamectl set-hostname comp01.example.test</pre><br />
Добавим DNS сервер, для этого создадим файл {{path|/etc/net/ifaces/ens19/resolv.conf}} со следующим содержимым:<br />
<pre>nameserver 192.168.135.1</pre><br />
192.168.135.1 - IP-адрес нашего FreeIPA сервера.<br><br />
Укажем службе resolvconf использовать DNS FreeIPA и наш домен для поиска.<br><br />
Для этого в файл {{path|/etc/resolvconf.conf}} добавим/отредактируем следующие параметры:<br />
<pre>interface_order='lo lo[0-9]* lo.* ens19'<br />
search_domains=example.test</pre><br />
Где ens19 -интерфейс на котором доступен FreeIPA сервер, example.test - наш домен.<br><br />
Обновим DNS адреса:<br />
<pre># resolvconf -u</pre><br />
После этого в файле {{path|/etc/resolv.conf}} должны появится строки:<br />
<pre>search example.test<br />
nameserver 192.168.135.1</pre><br />
Запускаем скрипт настройки клиента:<br />
в пакетном режиме:<br />
# ipa-client-install -U -p admin -w 12345678<br />
или интерактивно:<br />
<pre># ipa-client-install</pre><br />
Если все настроено верно скрипт должен выдать такое сообщение:<br />
<pre>'''Discovery was successful!'''<br />
Client hostname: comp02.example.test<br />
Realm: EXAMPLE.TEST<br />
DNS Domain: example.test<br />
IPA Server: ipa.example.test<br />
BaseDN: dc=example,dc=test<br />
Continue to configure the system with these values? [no]:</pre><br />
Отвечаем {{cmd|yes}} вводим имя пользователя, имеющего право вводить машины в домен, и его пароль.<br><br />
<br />
Пример успешного ввода в домен:<br />
<source lang="text">Discovery was successful!<br />
Client hostname: ipa-client1.test1.alt<br />
Realm: TEST1.ALT<br />
DNS Domain: test1.alt<br />
IPA Server: ipa-server.test1.alt<br />
BaseDN: dc=test1,dc=alt<br />
Synchronizing time with KDC...<br />
Attempting to sync time using ntpdate. Will timeout after 15 seconds<br />
Successfully retrieved CA cert<br />
Subject: CN=Certificate Authority,O=TEST1.ALT<br />
Issuer: CN=Certificate Authority,O=TEST1.ALT<br />
Valid From: Wed Feb 15 15:17:45 2017 UTC<br />
Valid Until: Sun Feb 15 15:17:45 2037 UTC<br />
<br />
Enrolled in IPA realm TEST1.ALT<br />
Created /etc/ipa/default.conf<br />
Configured sudoers in /etc/nsswitch.conf<br />
Configured /etc/sssd/sssd.conf<br />
Configured passwd in /etc/nsswitch.conf<br />
Configured group in /etc/nsswitch.conf<br />
Configured gshadow in /etc/nsswitch.conf<br />
Configured services in /etc/nsswitch.conf<br />
Configured netgroup in /etc/nsswitch.conf<br />
Configured shadow in /etc/nsswitch.conf<br />
Configured /etc/nsswitch.conf<br />
Configured PAM system-auth<br />
Configured /etc/krb5.conf for IPA realm TEST1.ALT<br />
trying https://ipa-server.test1.alt/ipa/json<br />
Forwarding 'ping' to json server 'https://ipa-server.test1.alt/ipa/json'<br />
Forwarding 'ca_is_enabled' to json server 'https://ipa-server.test1.alt/ipa/json'<br />
Hostname (ipa-client1.test1.alt) does not have A/AAAA record.<br />
Failed to update DNS records.<br />
Missing A/AAAA record(s) for host ipa-client1.test1.alt: 10.10.10.206.<br />
Missing reverse record(s) for address(es): 10.10.10.206.<br />
Adding SSH public key from /etc/openssh/ssh_host_ecdsa_key.pub<br />
Adding SSH public key from /etc/openssh/ssh_host_ed25519_key.pub<br />
Adding SSH public key from /etc/openssh/ssh_host_dsa_key.pub<br />
Adding SSH public key from /etc/openssh/ssh_host_rsa_key.pub<br />
Forwarding 'host_mod' to json server 'https://ipa-server.test1.alt/ipa/json'<br />
Could not update DNS SSHFP records.<br />
SSSD enabled<br />
Configured /etc/openldap/ldap.conf<br />
NTP enabled<br />
Configured /etc/openssh/ssh_config<br />
Configured /etc/openssh/sshd_config<br />
Configuring test1.alt as NIS domain.<br />
Client configuration complete.</source><br />
<br />
{{Attention|Если при входе в домен возникает такая ошибка:<br />
<pre>Hostname (ipa-client1.test1.alt) does not have A/AAAA record.<br />
Failed to update DNS records.</pre><br />
Проверьте IP-адрес доменного DNS сервера в файле {{path|/etc/resolv.conf}}}}<br />
<br />
В случае возникновения ошибки, необходимо перед повторной установкой запустить процедуру удаления:<br />
# ipa-client-install -U --uninstall<br />
<br />
Для работы sudo-политик для доменных пользователей на клиентской машине необходимо разрешить доступ к sudo:<br />
<pre># control sudo public</pre><br />
=== Вход пользователя ===<br />
<br />
При первом входе пользователя будет запрошен текущий установленный администратором пароль и затем у пользователя запрашивается новый пароль и его подтверждение.<br />
<br />
{{Attention|Если машина до этого была в других доменах или есть проблемы со входом пользователей рекомендуется очистить кэш sssd:<br />
<pre># systemctl stop sssd<br />
# rm -f /var/lib/sss/db/*<br />
# rm -f /var/lib/sss/mc/*<br />
# systemctl start sssd</pre>}}<br />
<br />
== Настройка доверительных отношений с AD ==<br />
FreeIPA использует Samba для интеграции в Active Directory. Для работы Samba необходим работающий стек IPv6.<br><br />
Начальные данные:<br />
* IP адрес IPA сервера: '''192.168.135.130'''<br />
* Имя IPA сервера: '''dcf'''<br />
* Имя IPA домена: '''domf.testf'''<br />
* NetBIOS имя IPA домена: '''DOMF'''<br />
* IP адрес AD DC: '''192.168.135.150'''<br />
* Имя AD DC: '''dcc'''<br />
* Имя AD домена: '''domc.testc'''<br />
* NetBIOS имя AD домена: '''DOMC'''<br />
<br />
Установим необходимые пакеты:<br />
<pre># apt-get install freeipa-server-trust-ad python-module-sss-murmur samba-winbind</pre><br />
=== Предварительная настройка IPA сервера ===<br />
'''Настроим IPA''' для работы с доверительными отношениями:<br />
<pre># ipa-adtrust-install</pre><br />
Скрипт спросит необходимо ли конфигурировать {{path|slapi-nis}} плагин для поддержки работы старых клиентов (SSSD < 1.9) с пользователем из доверенного домена:<br />
<pre>Enable trusted domains support in slapi-nis? [no]:</pre> <br />
На IPA сервере добавлен хотя бы один пользователь (администратор сервера), поэтому скрипт предложит сгенерировать SID для всех существующих пользователей и груп:<br />
<pre>Do you want to run the ipa-sidgen task? [no]:</pre><br />
Дата и время на серверах должны совпадать.<pre><br />
IPA сервер в своей работе использует следующие порты:<br />
<pre>TCP ports: 80, 88, 443, 389, 636, 88, 464, 53, 135, 138, 139, 445, 1024-1300<br />
UDP ports: 88, 464, 53, 123, 138, 139, 389, 445</pre><br />
Они должны быть открыты и доступны.<br><br />
'''Настроим Samba:'''<br><br />
<pre># net conf setparm global 'dedicated keytab file' /etc/samba/samba.keytab<br />
# systemctl restart ipa</pre><br />
Проверим проходит ли Samba аутентификацию Kerberos со стороны IPA сервера:<br />
<pre># kinit admin<br />
# smbclient -L dcf.domf.testf -k<br />
lp_load_ex: changing to config backend registry<br />
Domain=[DOMF] OS=[Windows 6.1] Server=[Samba 4.5.5]<br />
<br />
Sharename Type Comment<br />
--------- ---- -------<br />
IPC$ IPC IPC Service (Samba 4.5.5)<br />
Domain=[DOMF] OS=[Windows 6.1] Server=[Samba 4.5.5]<br />
<br />
Server Comment<br />
--------- -------<br />
<br />
Workgroup Master<br />
--------- -------</pre><br />
'''Настроим DNS''' на обоих серверах, чтобы они знали друг о друге:<br><br />
На AD сервере создадим сервер условной пересылки для зоны IPA домена:<br />
<pre>C:\> dnscmd 127.0.0.1 /ZoneAdd domf.testf /Forwarder 192.168.135.130</pre><br />
На IPA сервере так же добавим зону AD домена:<br />
<pre># ipa dnsforwardzone-add domc.testc --forwarder=192.168.135.150 --forward-policy=only</pre><br />
<br />
=== Проверка конфигурации DNS ===<br />
'''На AD сервере:'''<br><br />
Проверим наличие записей для работы сервисов IPA на DNS-сервере AD.<br><br />
1. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:<br />
<pre>C:\>nslookup.exe<br />
> set type=SRV<br />
<br />
> _kerberos._udp.domf.testf.<br />
_kerberos._udp.domf.testf. SRV service location:<br />
priority = 0<br />
weight = 100<br />
port = 88<br />
svr hostname = dcf.domf.testf.<br />
<br />
> _ldap._tcp.domf.testf.<br />
_ldap._tcp.ipa.example.com SRV service location:<br />
priority = 0<br />
weight = 100<br />
port = 389<br />
svr hostname = dcf.domf.testf.</pre><br />
<br />
2. Запись отвечающая за имя Kerberos realm IPA домена:<br />
<pre>C:\>nslookup.exe<br />
> set type=TXT<br />
> _kerberos.domf.testf.<br />
_kerberos.domf.testf. text =<br />
<br />
"DOMF.TESTF"</pre><br />
<br />
3. После выполнения команды {{path|ipa-adtrust-install}} должны появится записи отвечающие за работу сервисов MS DC Kerberos через UDP и LDAP через TCP:<br />
<pre>C:\>nslookup.exe<br />
> set type=SRV<br />
> _kerberos._udp.dc._msdcs.domf.testf.<br />
_kerberos._udp.dc._msdcs.domf.testf. SRV service location:<br />
priority = 0<br />
weight = 100<br />
port = 88<br />
svr hostname = dcf.domf.testf.<br />
> _ldap._tcp.dc._msdcs.domf.testf.<br />
_ldap._tcp.dc._msdcs.domf.testf. SRV service location:<br />
priority = 0<br />
weight = 100<br />
port = 389<br />
svr hostname = dcf.domf.testf.</pre><br />
Далее проверим наличие записей для работы сервисов AD на DNS-сервере AD.<br><br />
4. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:<br />
<pre>C:\>nslookup.exe<br />
> set type=SRV<br />
> _kerberos._udp.dc._msdcs.domc.testc.<br />
_kerberos._udp.dc._msdcs.domc.testc. SRV service location:<br />
priority = 0<br />
weight = 100<br />
port = 88<br />
svr hostname = dcc.domc.testc.<br />
> _ldap._tcp.dc._msdcs.domc.testc.<br />
_ldap._tcp.dc._msdcs.domc.testc. SRV service location:<br />
priority = 0<br />
weight = 100<br />
port = 389<br />
svr hostname = dcc.domc.testc.</pre><br />
<br />
'''На IPA сервере:'''<br><br />
Проверим наличие записей для работы сервисов IPA на DNS-сервере IPA.<br><br />
1. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:<br />
<pre># dig +short -t SRV _kerberos._udp.domf.testf.<br />
0 100 88 dcf.domf.testf.<br />
<br />
# dig +short -t SRV _ldap._tcp.domf.testf.<br />
0 100 389 dcf.domf.testf.</pre><br />
2. Запись отвечающая за имя Kerberos realm IPA домена:<br />
<pre>dig +short -t TXT _kerberos.domf.testf.<br />
"DOMF.TESTF"</pre><br />
3. После выполнения команды {{path|ipa-adtrust-install}} должны появится записи отвечающие за работу сервисов MS DC Kerberos через UDP и LDAP через TCP:<br />
<pre># dig +short -t SRV _kerberos._udp.dc._msdcs.domf.testf.<br />
0 100 88 dcf.domf.testf.<br />
<br />
# dig +short -t SRV _ldap._tcp.dc._msdcs.domf.testf.<br />
0 100 389 dcf.domf.testf.</pre><br />
Далее проверим наличие записей для работы сервисов AD на DNS-сервере IPA.<br />
4. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:<br />
<pre># dig +short -t SRV _kerberos._udp.dc._msdcs.domc.testc.<br />
0 100 88 dcc.domc.testc.<br />
<br />
# dig +short -t SRV _ldap._tcp.dc._msdcs.domc.testc.<br />
0 100 389 dcc.domc.testc.</pre><br />
{{Attention|Если запись {{cmd|_kerberos._udp.dc._msdcs.domc.testc.}} не доступна проверьте {{cmd|_kerberos._tcp.dc._msdcs.domc.testc.}}}}<br />
<br />
=== Настройка доверия ===<br />
Добавление двунаправленных доверительных отношений леса (Forest Trust) с AD:<br><br />
<pre># kinit admin<br />
# ipa trust-add --type=ad domc.testc --admin Administrator --password --two-way=true<br />
Active Directory domain administrator's password: <br />
---------------------------------------------------<br />
Added Active Directory trust for realm "domc.testc"<br />
---------------------------------------------------<br />
Realm name: domc.testc<br />
Domain NetBIOS name: DOMC<br />
Domain Security Identifier: S-1-5-21-3611360735-1365415015-3217858865<br />
SID blacklist incoming: S-1-5-20, S-1-5-3, S-1-5-2, S-1-5-1, S-1-5-7, S-1-5-6, S-1-5-5, S-1-5-4, S-1-5-9, S-1-5-8, S-1-5-17, S-1-5-16, S-1-5-15, S-1-5-14, S-1-5-13,<br />
S-1-5-12, S-1-5-11, S-1-5-10, S-1-3, S-1-2, S-1-1, S-1-0, S-1-5-19, S-1-5-18<br />
SID blacklist outgoing: S-1-5-20, S-1-5-3, S-1-5-2, S-1-5-1, S-1-5-7, S-1-5-6, S-1-5-5, S-1-5-4, S-1-5-9, S-1-5-8, S-1-5-17, S-1-5-16, S-1-5-15, S-1-5-14, S-1-5-13,<br />
S-1-5-12, S-1-5-11, S-1-5-10, S-1-3, S-1-2, S-1-1, S-1-0, S-1-5-19, S-1-5-18<br />
Trust direction: Two-way trust<br />
Trust type: Active Directory domain<br />
Trust status: Established and verified<br />
</pre><br />
Необходимо ввести пароль Administrator AD.<br><br />
Далее необходимо запросить сервер AD о его доверенных доменах:<br />
<pre># ipa trust-fetch-domains domc.testc<br />
--------------------------------------------<br />
List of trust domains successfully refreshed<br />
--------------------------------------------<br />
Realm name: domd.domc.testc<br />
Domain NetBIOS name: DOMD<br />
Domain Security Identifier: S-1-5-21-2419724241-1549151283-3268040000<br />
------------------------------<br />
Количество вернутых значений 1<br />
------------------------------<br />
</pre><br />
При этом IPA создаст нужные id-диапазоны для доверенных доменов.<br><br />
Если мы добавим в лес еще один домен DOME.TESTE, то необходимо настроить DNS на обоих серверах, чтобы они видели друг друга.<br><br />
И выполнить команду еще раз,чтобы IPA сервер узнал о нем:<br />
<pre># ipa trust-fetch-domains domc.testc<br />
--------------------------------------------<br />
List of trust domains successfully refreshed<br />
--------------------------------------------<br />
Realm name: dome.teste<br />
Domain NetBIOS name: DOME<br />
Domain Security Identifier: S-1-5-21-3615012966-1241218098-4147673574<br />
------------------------------<br />
Количество вернутых значений 1<br />
------------------------------</pre><br />
Найти все доверенные домены можно и с помощью web-интерфейса. Для Перейдем в IPA Server -> Trusts и выберем нужный нам домен:<br><br />
[[Файл:IPATrusts.png|600px]]<br><br />
Нажмём кнопку Fetch domains это обновит список доверенных доменов:<br><br />
[[Файл:IPATrustFetch.png|600px]]<br><br />
<br />
Для того чтобы увидеть список всех доверенных доменов из леса используйте следующую команду:<br />
<pre># ipa trustdomain-find domc.testc<br />
Domain name: domc.testc<br />
Domain NetBIOS name: DOMC<br />
Domain Security Identifier: S-1-5-21-3611360735-1365415015-3217858865<br />
Domain enabled: True<br />
<br />
Domain name: domd.domc.testc<br />
Domain NetBIOS name: DOMD<br />
Domain Security Identifier: S-1-5-21-2419724241-1549151283-3268040000<br />
Domain enabled: True<br />
<br />
Domain name: dome.teste<br />
Domain NetBIOS name: DOME<br />
Domain Security Identifier: S-1-5-21-3615012966-1241218098-4147673574<br />
Domain enabled: True<br />
------------------------------<br />
Количество вернутых значений 3<br />
------------------------------<br />
</pre><br />
<br />
=== Проверка конфигурации Kerberos ===<br />
1. Запросим ticket для IPA пользователя:<br />
<pre># kinit admin</pre><br />
2. Запросим service ticket для сервиса из IPA домена:<br />
<pre># kvno -S host dcf.domf.testf<br />
host/dcf.domf.testf@DOMF.TESTF: kvno = 2</pre><br />
3. Запросим service ticket сервиса из AD домена:<br />
<pre># kvno -S cifs dcc.domc.testc<br />
cifs/dcc.domc.testc@: kvno = 3</pre><br />
Если запрос service ticket для сервиса из AD домена прошел успешно, то у нас должен появиться междоменный ticket-granting ticket, его имя krbtgt/DOMC.TESTC@DOMF.TESTF:<br />
<pre># klist<br />
Ticket cache: KEYRING:persistent:0:0<br />
Default principal: admin@DOMF.TESTF<br />
<br />
Valid starting Expires Service principal<br />
14.02.2017 15:43:46 15.02.2017 01:43:46 cifs/dcc.domc.testc@DOMC.TESTC<br />
14.02.2017 15:43:46 15.02.2017 01:43:46 cifs/dcc.domc.testc@<br />
14.02.2017 15:43:46 15.02.2017 15:42:48 krbtgt/DOMC.TESTC@DOMF.TESTF<br />
14.02.2017 15:43:25 15.02.2017 15:42:48 host/dcf.domf.testf@DOMF.TESTF<br />
14.02.2017 15:42:53 15.02.2017 15:42:48 krbtgt/DOMF.TESTF@DOMF.TESTF</pre><br />
=== Проверка пользователей доверенного домена ===<br />
Проверим имеет ли доступ к пользователям из доверенного домена рабочие станции IPA.<br><br />
Для этого на рабочей станции IPA выполните команду:<br />
<pre># getent passwd u01domc@domc<br />
u01domc@domc.testc:*:328601108:328601108:u01domc:/home/domc.testc/u01domc:</pre><br />
Где u01domc это пользователь из AD домена. Обратите внимание, что не указана оболочка входа. Назначить оболочку входа для пользователей из доверенного домена можно добавив на сервере IPA в файл {{path|/etc/sssd/sssd.conf}} следующую строчку:<br />
<pre>[domain/domf.testf]<br />
...<br />
default_shell = /bin/bash<br />
...</pre><br />
Вывод команды должен стать таким:<br />
<pre># getent passwd u01domc@domc<br />
u01domc@domc.testc:*:328601108:328601108:u01domc:/home/domc.testc/u01domc:/bin/bash</pre><br />
{{Attention|Для корректной работы сервера IPA с пользователями доверенного домена AD необходимо обеспечить доступ сервиса sssd к /etc/krb5.keytab см. [https://bugzilla.altlinux.org/33115 bug 33115]}}<br />
{{Attention|Для входа AD пользователя в ALT рабочую станцию из IPA вводим имя пользователя в формате '''DOMC'''\username или '''DOMC.TESTC'''\username или username@'''domc''' username@'''domc.testc'''}}<br />
{{Attention|Для входа IPA пользователя в windows рабочую станцию из AD вводим имя пользователя в формате '''DOMF.TESTF'''\username}}<br />
== Создание аккаунта для доступа к LDAP ==<br />
Некоторые сервисы использующие LDAP требуют предварительно настроенной учетной записи. Использование обычной учетной записи пользователя предпочтительней, но не всегда это целесообразно делать. Можно сделать системную учетную запись следующим образом на сервере FreeIPA используя пароль Directory :<br />
<pre># ldapmodify -x -D 'cn=Directory Manager' -W<br />
dn: uid=system,cn=sysaccounts,cn=etc,dc=example,dc=test<br />
changetype: add<br />
objectclass: account<br />
objectclass: simplesecurityobject<br />
uid: ldapaccount<br />
userPassword: secret123<br />
passwordExpirationTime: 20380119031407Z<br />
nsIdleTimeout: 0<br />
<blank line><br />
^D</pre><br />
Замените пароль на более сложный. Параметр {{path|passwordExpirationTime: 20380119031407Z}} означает, что срок действия пароля неограничен<br />
Причина использования такой учетной записи, а не создание обычной учетной записи пользователя IPA, и использование этой системы заключается в том, что системная учетная запись существует только для привязки к LDAP. Это не настоящий пользователь POSIX, он не может войти в систему и ему не принадлежат файлы. У этого пользователя нет особых прав и он не может ничего записывать какие-либо данные на сервер LDAP FreeIPA, только права на чтение.<br />
<br />
== Добавление расширенных полей в ldap ==<br />
<br />
Если необходимо добавить поля в вашу схему ldap, то реализация этого возможна через команду ldapmodify и добавление своих плагинов для отображения этих полей в WebUi.<br><br />
Обычно файлы модификации схемы являются типом ''.ldif''.<br><br />
Пример:<br><br />
Содержание файла addExtField.ldif <br><br />
<pre>dn: cn=schema<br />
changetype: modify<br />
add: attributeTypes<br />
attributeTypes: ( 2.25.28639311321113238241701611583088740684.14.2.2 NAME 'favoriteColorName' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'Extending FreeIPA' )<br />
<br />
dn: cn=schema<br />
changetype: modify<br />
add: attributeTypes<br />
attributeTypes: ( 2.25.28639311321113238241701611583088740684.14.2.3 NAME 'redirects' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'Extending FreeIPA')<br />
<br />
dn: cn=schema<br />
changetype: modify<br />
add: attributeTypes<br />
attributeTypes: ( 2.25.28639311321113238241701611583088740684.14.2.4 NAME 'attbool' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 X-ORIGIN 'Extending FreeIPA')<br />
<br />
dn: cn=schema<br />
changetype: modify<br />
add: objectclasses<br />
objectclasses: ( 2.25.28639311321113238241701611583088740684.14.2.1 NAME 'customPerson' SUP person STRUCTURAL MAY ( favoriteColorName $ attbool $ redirects ) X-ORIGIN 'Extending FreeIPA' )</pre><br />
<br />
Детальное пояснение для блока:<br><br />
<br />
<pre>dn: cn=schema<br />
changetype: modify<br />
add: attributeTypes<br />
attributeTypes: ( 2.25.28639311321113238241701611583088740684.14.2.2<br />
NAME 'favoriteColorName'<br />
EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch<br />
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15<br />
X-ORIGIN 'Extending FreeIPA' )</pre><br />
<br />
'''dn''' - dn, в котором будет проводиться изменение. Добавление/удаление классов и т.д.<br><br />
<br />
'''changetype''' - атрибут, отвечающий за тип изменений, которые будут происходить.(add, delete, modify, modrdn)<br><br />
<br />
'''add: attributeTypes''' - добавление атрибута, далее идёт описание атрибута.<br><br />
'''2.25.28639311321113238241701611583088740684.14.2.2''' - уникальный идентификатор атрибута. Можно написать любой.<br><br />
<br />
'''NAME 'favoriteColorName' ''' - По другому можно назвать - primary name. Название атрибута.<br><br />
<br />
'''EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch''' - эти атрибуты заданы для проверки соответствия содержания атрибута правилам caseIgnoreMatch <br><br />
<br />
'''SYNTAX 1.3.6.1.4.1.1466.115.121.1.15''' - OID типа данных <br><br />
<br />
Все изменения в схеме производятся от пользователя - Directory manager.<br><br />
<br />
Изменение схемы ldap:<br />
<br />
<pre>$ ldapmodify -D "cn=Directory Manager" -W -f addExtField.ldif</pre><br />
<br />
После изменения схемы, путем добавления нового objectclass, нужно чтобы эти поля еще можно было редактировать в web-интерфейсе. Для этого необходимо сделать палагин. В примере использовано 3 атрибута, для них сделаем 3 отдельных плагина:<br />
<br />
1. Создание папки:<br />
<pre>mkdir -p /usr/share/ipa/ui/js/plugins/favoriteColorName</pre><br />
<br />
2. Создание самого плагина:<br />
<pre>mcedit /usr/share/ipa/ui/js/plugins/favoriteColorName/favoriteColorName.js</pre><br />
Тело плагина:<br />
<br />
<pre>define(['freeipa/phases','freeipa/user'],<br />
function(phases, user_mod) {<br />
// helper function<br />
function get_item(array, attr, value) {<br />
for (var i=0,l=array.length; i<l; i++) {<br />
if (array[i][attr] === value) return array[i];<br />
}<br />
return null;<br />
}<br />
<br />
var color_plugin = {};<br />
<br />
color_plugin.add_favorite_color = function() {<br />
var facet = get_item(user_mod.entity_spec.facets, '$type', 'details');<br />
var section = get_item(facet.sections, 'name', 'identity');<br />
section.fields.push({<br />
name: 'favoritecolorname',<br />
label: 'Цвет'<br />
});<br />
return true;<br />
};<br />
<br />
phases.on('customization', color_plugin.add_favorite_color);<br />
<br />
return color_plugin;<br />
});</pre><br />
<br />
В схеме бы добавлен атрибут типа boolean, для него можно сделать радиокнопки:<br><br />
<br />
<pre>define(['freeipa/phases','freeipa/user'],<br />
function(phases, user_mod) {<br />
// helper function<br />
function get_item(array, attr, value) {<br />
for (var i=0,l=array.length; i<l; i++) {<br />
if (array[i][attr] === value) return array[i];<br />
}<br />
return null;<br />
}<br />
<br />
var attrbool_plugin = {};<br />
<br />
attrbool_plugin.add_bool = function() {<br />
var facet = get_item(user_mod.entity_spec.facets, '$type', 'details');<br />
var section = get_item(facet.sections, 'name', 'identity');<br />
section.fields.push(<br />
{<br />
$type: 'radio',.<br />
options:[{label:'True',value:'TRUE'},{label:'False',value:'FALSE'}],<br />
label:'Blood type',<br />
name: 'attbool'}<br />
);<br />
return true;<br />
};<br />
<br />
phases.on('customization', attrbool_plugin.add_bool);<br />
<br />
return attrbool_plugin;<br />
});<br />
<br />
</pre><br />
<br />
После необходимо добавить новое поле в "Default user objectclasses" (находится IPA Server -> Configuration) созданный objectclass (customPerson) и появятся поля в web-интерфейсе. Для того чтобы пользователь мог их редактировать, необходимо изменить привилегии в группе ipausers. <br><br />
<br />
== Automember rebuild membership ==<br />
<br />
Пользовательские или хост группы можно легко перестроить на основе новых или обновленных правил automember. Команда automember rebuild только добавляет новые отношения для групп, она не удаляет те, которые не соответствуют правилам automember. Недавно добавленная команда вызовет задачу в rebuild automember, создав запись LDAP в cn = automember rebuild membership, cn = tasks, cn = config. Плагин automember в настоящее время проверяет операции Add(добавления), чтобы увидеть, есть ли запись соответствует одному из определенных правил automember. Существующие записи не проверяются когда они изменяются. Чтобы применить правило для всех записей, надо добавить задачу к плагину automember. Создатель задачи обеспечит фильтр поиска и базу. Все совпадающие записи будут проверяться в соответствии с определенными правилами automember, чтобы увидеть если они должны быть добавлены в какие-либо группы. Это позволяет добавить запуск атрибуты(значения) после того, как запись была первоначально добавлена, а затем вызвать задачу(выполнить) обновления automember. Ipa automember-rebuild может использоваться для восстановления членства для всех объектов определенного типа:<br />
<pre><br />
$ ipa automember-rebuild --type=group<br />
$ ipa automember-rebuild --type=hostgroup<br />
</pre><br />
Он также может использоваться для восстановления членства для указанных записей:<br />
<pre><br />
$ ipa automember-rebuild --hosts=HOSTNAME1 --hosts=HOSTNAME2<br />
$ ipa automember-rebuild --users=LOGIN1 --users=LOGIN2<br />
</pre><br />
Добавление новой группы хостов:<br />
<pre><br />
$ ipa hostgroup-add --desc="Web Servers" webservers<br />
</pre><br />
Добавить новый хост:<br />
<pre><br />
$ ipa host-add web1.example.com --force<br />
</pre><br />
Добавить automember rule:<br />
<pre><br />
$ ipa automember-add --type=hostgroup webservers<br />
$ ipa automember-add-condition --key=fqdn --type=hostgroup --inclusive-regex=^web[1-9]+\.example\.com webservers<br />
</pre><br />
Функция automember теперь работает для новых добавленных записей. Если мы добавим новый хост, он будет автоматически помещен в соответствующую группу хостов:<br />
<pre><br />
$ ipa host-add web2.example.com --force<br />
$ ipa hostgroup-show webservers<br />
Host-group: webservers<br />
Description: Web Servers<br />
Member hosts: web2.example.com<br />
</pre><br />
Однако старая запись хоста для web1.example.com по-прежнему не является членом или хост-группой веб-серверов. Введя новые команды automember-rebuild, мы сделаем это возможным:<br />
<pre> <br />
$ ipa automember-rebuild --type=hostgroup<br />
or<br />
$ ipa automember-rebuild --hosts=web1.example.com<br />
</pre><br />
Хост добавится в новую группу:<br />
<pre><br />
$ ipa hostgroup-show webservers<br />
Host-group: webservers<br />
Description: Web Servers<br />
Member hosts: web2.example.com, web1.example.com<br />
</pre><br />
Тоже самое можно сделать в web-интерфейсе.<br />
<br />
[[Категория:Корпоративная инфраструктура]]<br />
[[Категория:HOWTO]]<br />
<br />
{{Category navigation|title=Корпоративная инфраструктура|category=Корпоративная инфраструктура|sortkey={{SUBPAGENAME}}}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=FreeIPA&diff=40045
FreeIPA
2017-09-14T09:02:16Z
<p>217.15.195.17: Automember rebuild membership</p>
<hr />
<div>[[Файл:Freeipa-logo-small.png|frameless|right]]<br />
FreeIPA - это комплексное решение по управлению безопасностью Linux-систем, 389 Directory Server, MIT Kerberos, NTP, DNS, Dogtag. Оно состоит из веб-интерфейса и интерфейса командной строки.<br><br />
FreeIPA является интегрированной системой проверки подлинности и авторизации в сетевой среде Linux, FreeIPA сервер обеспечивает централизованную проверку подлинности, авторизацию и контроль за аккаунтами пользователей сохраняя сведения о пользователе, группах, узлах и других объектах необходимых для обеспечения сетевой безопасности.<br />
<br />
Сайт проекта: http://www.freeipa.org/<br />
<br />
== Установка сервера FreeIPA ==<br />
Устанавливать будет со встроенным DNS сервером и доменом EXAMPLE.TEST в локальной сети 192.168.135.0/24.<br><br />
Для начала отключим ahttpd, работающий на порту 8080, во избежание конфликтов с разворачиваемым tomcat и отключим HTTPS в Apache2:<br />
# service ahttpd stop<br />
# a2dissite 000-default_https<br />
# service httpd2 condreload<br />
<br />
Установим необходимые пакеты:<br />
<pre># apt-get install freeipa-server freeipa-server-dns</pre><br />
Зададим имя сервера:<br />
<pre># hostnamectl set-hostname ipa.example.test</pre><br />
Запускаем скрипт настройки сервера:<br />
В пакетном режиме: <br />
# ipa-server-install -U --hostname=$(hostname) -r EXAMPLE.TEST -n example.test -p 12345678 -a 12345678 --setup-dns --no-forwarders --no-reverse<br />
или интерактивно:<br />
<pre># ipa-server-install</pre><br />
<br />
{{Attention|Пароли должны быть не менее 8 символов}}<br />
<br />
Обратите внимание на ответы на вопросы, не совпадающие с предложенными:<br />
Do you want to configure integrated DNS (BIND)? [no]: yes<br />
Do you want to configure DNS forwarders? [yes]: no<br />
Do you want to search for missing reverse zones? [yes]: no<br />
<br />
остальные вопросы выбираем по умолчанию (можно просто нажать Enter). Так же при установке попросят ввести пароль администратора системы и пароль администратора каталогов.<br><br />
<br />
Для возможности управлять FreeIPA сервером из командной строки необходимо получить билет Kerberos:<br />
<pre># kinit admin</pre><br />
Добавим в DNS запись о нашем сервере времени:<br />
<pre># ipa dnsrecord-add example.test _ntp._udp --srv-priority=0 --srv-weight=100 --srv-port=123 --srv-target=ipa.example.test.</pre><br />
<br />
Проверить работу ntp сервера можно командой:<br />
<pre># ntpdate -q localhost<br />
server 127.0.0.1, stratum 3, offset 0.000018, delay 0.02568<br />
27 Apr 10:27:00 ntpdate[3491]: adjust time server 127.0.0.1 offset 0.000018 sec</pre><br />
<br />
Также доступен веб-интерфейс по адресу: <br />
<pre>https://ipa.example.test/ipa/ui/</pre><br />
<br />
{{Note|Если выдаёт <pre>[error] CalledProcessError: Command '/sbin/systemctl restart httpd2.service' returned non-zero exit status 1</pre><br />
Выполните <br />
# systemctl restart httpd2<br />
Отмените установку: <br />
# ipa-server-install -U --uninstall<br />
и повторите снова.}}<br />
<br />
== Установка FreeIPA клиента и подключение к серверу ==<br />
Установим необходимые пакеты:<br />
<pre># apt-get install freeipa-client libsss_sudo krb5-kinit bind-utils libbind</pre><br />
Зададим имя компьютера:<br />
<pre># hostnamectl set-hostname comp01.example.test</pre><br />
Добавим DNS сервер, для этого создадим файл {{path|/etc/net/ifaces/ens19/resolv.conf}} со следующим содержимым:<br />
<pre>nameserver 192.168.135.1</pre><br />
192.168.135.1 - IP-адрес нашего FreeIPA сервера.<br><br />
Укажем службе resolvconf использовать DNS FreeIPA и наш домен для поиска.<br><br />
Для этого в файл {{path|/etc/resolvconf.conf}} добавим/отредактируем следующие параметры:<br />
<pre>interface_order='lo lo[0-9]* lo.* ens19'<br />
search_domains=example.test</pre><br />
Где ens19 -интерфейс на котором доступен FreeIPA сервер, example.test - наш домен.<br><br />
Обновим DNS адреса:<br />
<pre># resolvconf -u</pre><br />
После этого в файле {{path|/etc/resolv.conf}} должны появится строки:<br />
<pre>search example.test<br />
nameserver 192.168.135.1</pre><br />
Запускаем скрипт настройки клиента:<br />
в пакетном режиме:<br />
# ipa-client-install -U -p admin -w 12345678<br />
или интерактивно:<br />
<pre># ipa-client-install</pre><br />
Если все настроено верно скрипт должен выдать такое сообщение:<br />
<pre>'''Discovery was successful!'''<br />
Client hostname: comp02.example.test<br />
Realm: EXAMPLE.TEST<br />
DNS Domain: example.test<br />
IPA Server: ipa.example.test<br />
BaseDN: dc=example,dc=test<br />
Continue to configure the system with these values? [no]:</pre><br />
Отвечаем {{cmd|yes}} вводим имя пользователя, имеющего право вводить машины в домен, и его пароль.<br><br />
<br />
Пример успешного ввода в домен:<br />
<source lang="text">Discovery was successful!<br />
Client hostname: ipa-client1.test1.alt<br />
Realm: TEST1.ALT<br />
DNS Domain: test1.alt<br />
IPA Server: ipa-server.test1.alt<br />
BaseDN: dc=test1,dc=alt<br />
Synchronizing time with KDC...<br />
Attempting to sync time using ntpdate. Will timeout after 15 seconds<br />
Successfully retrieved CA cert<br />
Subject: CN=Certificate Authority,O=TEST1.ALT<br />
Issuer: CN=Certificate Authority,O=TEST1.ALT<br />
Valid From: Wed Feb 15 15:17:45 2017 UTC<br />
Valid Until: Sun Feb 15 15:17:45 2037 UTC<br />
<br />
Enrolled in IPA realm TEST1.ALT<br />
Created /etc/ipa/default.conf<br />
Configured sudoers in /etc/nsswitch.conf<br />
Configured /etc/sssd/sssd.conf<br />
Configured passwd in /etc/nsswitch.conf<br />
Configured group in /etc/nsswitch.conf<br />
Configured gshadow in /etc/nsswitch.conf<br />
Configured services in /etc/nsswitch.conf<br />
Configured netgroup in /etc/nsswitch.conf<br />
Configured shadow in /etc/nsswitch.conf<br />
Configured /etc/nsswitch.conf<br />
Configured PAM system-auth<br />
Configured /etc/krb5.conf for IPA realm TEST1.ALT<br />
trying https://ipa-server.test1.alt/ipa/json<br />
Forwarding 'ping' to json server 'https://ipa-server.test1.alt/ipa/json'<br />
Forwarding 'ca_is_enabled' to json server 'https://ipa-server.test1.alt/ipa/json'<br />
Hostname (ipa-client1.test1.alt) does not have A/AAAA record.<br />
Failed to update DNS records.<br />
Missing A/AAAA record(s) for host ipa-client1.test1.alt: 10.10.10.206.<br />
Missing reverse record(s) for address(es): 10.10.10.206.<br />
Adding SSH public key from /etc/openssh/ssh_host_ecdsa_key.pub<br />
Adding SSH public key from /etc/openssh/ssh_host_ed25519_key.pub<br />
Adding SSH public key from /etc/openssh/ssh_host_dsa_key.pub<br />
Adding SSH public key from /etc/openssh/ssh_host_rsa_key.pub<br />
Forwarding 'host_mod' to json server 'https://ipa-server.test1.alt/ipa/json'<br />
Could not update DNS SSHFP records.<br />
SSSD enabled<br />
Configured /etc/openldap/ldap.conf<br />
NTP enabled<br />
Configured /etc/openssh/ssh_config<br />
Configured /etc/openssh/sshd_config<br />
Configuring test1.alt as NIS domain.<br />
Client configuration complete.</source><br />
<br />
{{Attention|Если при входе в домен возникает такая ошибка:<br />
<pre>Hostname (ipa-client1.test1.alt) does not have A/AAAA record.<br />
Failed to update DNS records.</pre><br />
Проверьте IP-адрес доменного DNS сервера в файле {{path|/etc/resolv.conf}}}}<br />
<br />
В случае возникновения ошибки, необходимо перед повторной установкой запустить процедуру удаления:<br />
# ipa-client-install -U --uninstall<br />
<br />
Для работы sudo-политик для доменных пользователей на клиентской машине необходимо разрешить доступ к sudo:<br />
<pre># control sudo public</pre><br />
=== Вход пользователя ===<br />
<br />
При первом входе пользователя будет запрошен текущий установленный администратором пароль и затем у пользователя запрашивается новый пароль и его подтверждение.<br />
<br />
{{Attention|Если машина до этого была в других доменах или есть проблемы со входом пользователей рекомендуется очистить кэш sssd:<br />
<pre># systemctl stop sssd<br />
# rm -f /var/lib/sss/db/*<br />
# rm -f /var/lib/sss/mc/*<br />
# systemctl start sssd</pre>}}<br />
<br />
== Настройка доверительных отношений с AD ==<br />
FreeIPA использует Samba для интеграции в Active Directory. Для работы Samba необходим работающий стек IPv6.<br><br />
Начальные данные:<br />
* IP адрес IPA сервера: '''192.168.135.130'''<br />
* Имя IPA сервера: '''dcf'''<br />
* Имя IPA домена: '''domf.testf'''<br />
* NetBIOS имя IPA домена: '''DOMF'''<br />
* IP адрес AD DC: '''192.168.135.150'''<br />
* Имя AD DC: '''dcc'''<br />
* Имя AD домена: '''domc.testc'''<br />
* NetBIOS имя AD домена: '''DOMC'''<br />
<br />
Установим необходимые пакеты:<br />
<pre># apt-get install freeipa-server-trust-ad python-module-sss-murmur samba-winbind</pre><br />
=== Предварительная настройка IPA сервера ===<br />
'''Настроим IPA''' для работы с доверительными отношениями:<br />
<pre># ipa-adtrust-install</pre><br />
Скрипт спросит необходимо ли конфигурировать {{path|slapi-nis}} плагин для поддержки работы старых клиентов (SSSD < 1.9) с пользователем из доверенного домена:<br />
<pre>Enable trusted domains support in slapi-nis? [no]:</pre> <br />
На IPA сервере добавлен хотя бы один пользователь (администратор сервера), поэтому скрипт предложит сгенерировать SID для всех существующих пользователей и груп:<br />
<pre>Do you want to run the ipa-sidgen task? [no]:</pre><br />
Дата и время на серверах должны совпадать.<pre><br />
IPA сервер в своей работе использует следующие порты:<br />
<pre>TCP ports: 80, 88, 443, 389, 636, 88, 464, 53, 135, 138, 139, 445, 1024-1300<br />
UDP ports: 88, 464, 53, 123, 138, 139, 389, 445</pre><br />
Они должны быть открыты и доступны.<br><br />
'''Настроим Samba:'''<br><br />
<pre># net conf setparm global 'dedicated keytab file' /etc/samba/samba.keytab<br />
# systemctl restart ipa</pre><br />
Проверим проходит ли Samba аутентификацию Kerberos со стороны IPA сервера:<br />
<pre># kinit admin<br />
# smbclient -L dcf.domf.testf -k<br />
lp_load_ex: changing to config backend registry<br />
Domain=[DOMF] OS=[Windows 6.1] Server=[Samba 4.5.5]<br />
<br />
Sharename Type Comment<br />
--------- ---- -------<br />
IPC$ IPC IPC Service (Samba 4.5.5)<br />
Domain=[DOMF] OS=[Windows 6.1] Server=[Samba 4.5.5]<br />
<br />
Server Comment<br />
--------- -------<br />
<br />
Workgroup Master<br />
--------- -------</pre><br />
'''Настроим DNS''' на обоих серверах, чтобы они знали друг о друге:<br><br />
На AD сервере создадим сервер условной пересылки для зоны IPA домена:<br />
<pre>C:\> dnscmd 127.0.0.1 /ZoneAdd domf.testf /Forwarder 192.168.135.130</pre><br />
На IPA сервере так же добавим зону AD домена:<br />
<pre># ipa dnsforwardzone-add domc.testc --forwarder=192.168.135.150 --forward-policy=only</pre><br />
<br />
=== Проверка конфигурации DNS ===<br />
'''На AD сервере:'''<br><br />
Проверим наличие записей для работы сервисов IPA на DNS-сервере AD.<br><br />
1. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:<br />
<pre>C:\>nslookup.exe<br />
> set type=SRV<br />
<br />
> _kerberos._udp.domf.testf.<br />
_kerberos._udp.domf.testf. SRV service location:<br />
priority = 0<br />
weight = 100<br />
port = 88<br />
svr hostname = dcf.domf.testf.<br />
<br />
> _ldap._tcp.domf.testf.<br />
_ldap._tcp.ipa.example.com SRV service location:<br />
priority = 0<br />
weight = 100<br />
port = 389<br />
svr hostname = dcf.domf.testf.</pre><br />
<br />
2. Запись отвечающая за имя Kerberos realm IPA домена:<br />
<pre>C:\>nslookup.exe<br />
> set type=TXT<br />
> _kerberos.domf.testf.<br />
_kerberos.domf.testf. text =<br />
<br />
"DOMF.TESTF"</pre><br />
<br />
3. После выполнения команды {{path|ipa-adtrust-install}} должны появится записи отвечающие за работу сервисов MS DC Kerberos через UDP и LDAP через TCP:<br />
<pre>C:\>nslookup.exe<br />
> set type=SRV<br />
> _kerberos._udp.dc._msdcs.domf.testf.<br />
_kerberos._udp.dc._msdcs.domf.testf. SRV service location:<br />
priority = 0<br />
weight = 100<br />
port = 88<br />
svr hostname = dcf.domf.testf.<br />
> _ldap._tcp.dc._msdcs.domf.testf.<br />
_ldap._tcp.dc._msdcs.domf.testf. SRV service location:<br />
priority = 0<br />
weight = 100<br />
port = 389<br />
svr hostname = dcf.domf.testf.</pre><br />
Далее проверим наличие записей для работы сервисов AD на DNS-сервере AD.<br><br />
4. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:<br />
<pre>C:\>nslookup.exe<br />
> set type=SRV<br />
> _kerberos._udp.dc._msdcs.domc.testc.<br />
_kerberos._udp.dc._msdcs.domc.testc. SRV service location:<br />
priority = 0<br />
weight = 100<br />
port = 88<br />
svr hostname = dcc.domc.testc.<br />
> _ldap._tcp.dc._msdcs.domc.testc.<br />
_ldap._tcp.dc._msdcs.domc.testc. SRV service location:<br />
priority = 0<br />
weight = 100<br />
port = 389<br />
svr hostname = dcc.domc.testc.</pre><br />
<br />
'''На IPA сервере:'''<br><br />
Проверим наличие записей для работы сервисов IPA на DNS-сервере IPA.<br><br />
1. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:<br />
<pre># dig +short -t SRV _kerberos._udp.domf.testf.<br />
0 100 88 dcf.domf.testf.<br />
<br />
# dig +short -t SRV _ldap._tcp.domf.testf.<br />
0 100 389 dcf.domf.testf.</pre><br />
2. Запись отвечающая за имя Kerberos realm IPA домена:<br />
<pre>dig +short -t TXT _kerberos.domf.testf.<br />
"DOMF.TESTF"</pre><br />
3. После выполнения команды {{path|ipa-adtrust-install}} должны появится записи отвечающие за работу сервисов MS DC Kerberos через UDP и LDAP через TCP:<br />
<pre># dig +short -t SRV _kerberos._udp.dc._msdcs.domf.testf.<br />
0 100 88 dcf.domf.testf.<br />
<br />
# dig +short -t SRV _ldap._tcp.dc._msdcs.domf.testf.<br />
0 100 389 dcf.domf.testf.</pre><br />
Далее проверим наличие записей для работы сервисов AD на DNS-сервере IPA.<br />
4. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:<br />
<pre># dig +short -t SRV _kerberos._udp.dc._msdcs.domc.testc.<br />
0 100 88 dcc.domc.testc.<br />
<br />
# dig +short -t SRV _ldap._tcp.dc._msdcs.domc.testc.<br />
0 100 389 dcc.domc.testc.</pre><br />
{{Attention|Если запись {{cmd|_kerberos._udp.dc._msdcs.domc.testc.}} не доступна проверьте {{cmd|_kerberos._tcp.dc._msdcs.domc.testc.}}}}<br />
<br />
=== Настройка доверия ===<br />
Добавление двунаправленных доверительных отношений леса (Forest Trust) с AD:<br><br />
<pre># kinit admin<br />
# ipa trust-add --type=ad domc.testc --admin Administrator --password --two-way=true<br />
Active Directory domain administrator's password: <br />
---------------------------------------------------<br />
Added Active Directory trust for realm "domc.testc"<br />
---------------------------------------------------<br />
Realm name: domc.testc<br />
Domain NetBIOS name: DOMC<br />
Domain Security Identifier: S-1-5-21-3611360735-1365415015-3217858865<br />
SID blacklist incoming: S-1-5-20, S-1-5-3, S-1-5-2, S-1-5-1, S-1-5-7, S-1-5-6, S-1-5-5, S-1-5-4, S-1-5-9, S-1-5-8, S-1-5-17, S-1-5-16, S-1-5-15, S-1-5-14, S-1-5-13,<br />
S-1-5-12, S-1-5-11, S-1-5-10, S-1-3, S-1-2, S-1-1, S-1-0, S-1-5-19, S-1-5-18<br />
SID blacklist outgoing: S-1-5-20, S-1-5-3, S-1-5-2, S-1-5-1, S-1-5-7, S-1-5-6, S-1-5-5, S-1-5-4, S-1-5-9, S-1-5-8, S-1-5-17, S-1-5-16, S-1-5-15, S-1-5-14, S-1-5-13,<br />
S-1-5-12, S-1-5-11, S-1-5-10, S-1-3, S-1-2, S-1-1, S-1-0, S-1-5-19, S-1-5-18<br />
Trust direction: Two-way trust<br />
Trust type: Active Directory domain<br />
Trust status: Established and verified<br />
</pre><br />
Необходимо ввести пароль Administrator AD.<br><br />
Далее необходимо запросить сервер AD о его доверенных доменах:<br />
<pre># ipa trust-fetch-domains domc.testc<br />
--------------------------------------------<br />
List of trust domains successfully refreshed<br />
--------------------------------------------<br />
Realm name: domd.domc.testc<br />
Domain NetBIOS name: DOMD<br />
Domain Security Identifier: S-1-5-21-2419724241-1549151283-3268040000<br />
------------------------------<br />
Количество вернутых значений 1<br />
------------------------------<br />
</pre><br />
При этом IPA создаст нужные id-диапазоны для доверенных доменов.<br><br />
Если мы добавим в лес еще один домен DOME.TESTE, то необходимо настроить DNS на обоих серверах, чтобы они видели друг друга.<br><br />
И выполнить команду еще раз,чтобы IPA сервер узнал о нем:<br />
<pre># ipa trust-fetch-domains domc.testc<br />
--------------------------------------------<br />
List of trust domains successfully refreshed<br />
--------------------------------------------<br />
Realm name: dome.teste<br />
Domain NetBIOS name: DOME<br />
Domain Security Identifier: S-1-5-21-3615012966-1241218098-4147673574<br />
------------------------------<br />
Количество вернутых значений 1<br />
------------------------------</pre><br />
Найти все доверенные домены можно и с помощью web-интерфейса. Для Перейдем в IPA Server -> Trusts и выберем нужный нам домен:<br><br />
[[Файл:IPATrusts.png|600px]]<br><br />
Нажмём кнопку Fetch domains это обновит список доверенных доменов:<br><br />
[[Файл:IPATrustFetch.png|600px]]<br><br />
<br />
Для того чтобы увидеть список всех доверенных доменов из леса используйте следующую команду:<br />
<pre># ipa trustdomain-find domc.testc<br />
Domain name: domc.testc<br />
Domain NetBIOS name: DOMC<br />
Domain Security Identifier: S-1-5-21-3611360735-1365415015-3217858865<br />
Domain enabled: True<br />
<br />
Domain name: domd.domc.testc<br />
Domain NetBIOS name: DOMD<br />
Domain Security Identifier: S-1-5-21-2419724241-1549151283-3268040000<br />
Domain enabled: True<br />
<br />
Domain name: dome.teste<br />
Domain NetBIOS name: DOME<br />
Domain Security Identifier: S-1-5-21-3615012966-1241218098-4147673574<br />
Domain enabled: True<br />
------------------------------<br />
Количество вернутых значений 3<br />
------------------------------<br />
</pre><br />
<br />
=== Проверка конфигурации Kerberos ===<br />
1. Запросим ticket для IPA пользователя:<br />
<pre># kinit admin</pre><br />
2. Запросим service ticket для сервиса из IPA домена:<br />
<pre># kvno -S host dcf.domf.testf<br />
host/dcf.domf.testf@DOMF.TESTF: kvno = 2</pre><br />
3. Запросим service ticket сервиса из AD домена:<br />
<pre># kvno -S cifs dcc.domc.testc<br />
cifs/dcc.domc.testc@: kvno = 3</pre><br />
Если запрос service ticket для сервиса из AD домена прошел успешно, то у нас должен появиться междоменный ticket-granting ticket, его имя krbtgt/DOMC.TESTC@DOMF.TESTF:<br />
<pre># klist<br />
Ticket cache: KEYRING:persistent:0:0<br />
Default principal: admin@DOMF.TESTF<br />
<br />
Valid starting Expires Service principal<br />
14.02.2017 15:43:46 15.02.2017 01:43:46 cifs/dcc.domc.testc@DOMC.TESTC<br />
14.02.2017 15:43:46 15.02.2017 01:43:46 cifs/dcc.domc.testc@<br />
14.02.2017 15:43:46 15.02.2017 15:42:48 krbtgt/DOMC.TESTC@DOMF.TESTF<br />
14.02.2017 15:43:25 15.02.2017 15:42:48 host/dcf.domf.testf@DOMF.TESTF<br />
14.02.2017 15:42:53 15.02.2017 15:42:48 krbtgt/DOMF.TESTF@DOMF.TESTF</pre><br />
=== Проверка пользователей доверенного домена ===<br />
Проверим имеет ли доступ к пользователям из доверенного домена рабочие станции IPA.<br><br />
Для этого на рабочей станции IPA выполните команду:<br />
<pre># getent passwd u01domc@domc<br />
u01domc@domc.testc:*:328601108:328601108:u01domc:/home/domc.testc/u01domc:</pre><br />
Где u01domc это пользователь из AD домена. Обратите внимание, что не указана оболочка входа. Назначить оболочку входа для пользователей из доверенного домена можно добавив на сервере IPA в файл {{path|/etc/sssd/sssd.conf}} следующую строчку:<br />
<pre>[domain/domf.testf]<br />
...<br />
default_shell = /bin/bash<br />
...</pre><br />
Вывод команды должен стать таким:<br />
<pre># getent passwd u01domc@domc<br />
u01domc@domc.testc:*:328601108:328601108:u01domc:/home/domc.testc/u01domc:/bin/bash</pre><br />
{{Attention|Для корректной работы сервера IPA с пользователями доверенного домена AD необходимо обеспечить доступ сервиса sssd к /etc/krb5.keytab см. [https://bugzilla.altlinux.org/33115 bug 33115]}}<br />
{{Attention|Для входа AD пользователя в ALT рабочую станцию из IPA вводим имя пользователя в формате '''DOMC'''\username или '''DOMC.TESTC'''\username или username@'''domc''' username@'''domc.testc'''}}<br />
{{Attention|Для входа IPA пользователя в windows рабочую станцию из AD вводим имя пользователя в формате '''DOMF.TESTF'''\username}}<br />
== Создание аккаунта для доступа к LDAP ==<br />
Некоторые сервисы использующие LDAP требуют предварительно настроенной учетной записи. Использование обычной учетной записи пользователя предпочтительней, но не всегда это целесообразно делать. Можно сделать системную учетную запись следующим образом на сервере FreeIPA используя пароль Directory :<br />
<pre># ldapmodify -x -D 'cn=Directory Manager' -W<br />
dn: uid=system,cn=sysaccounts,cn=etc,dc=example,dc=test<br />
changetype: add<br />
objectclass: account<br />
objectclass: simplesecurityobject<br />
uid: ldapaccount<br />
userPassword: secret123<br />
passwordExpirationTime: 20380119031407Z<br />
nsIdleTimeout: 0<br />
<blank line><br />
^D</pre><br />
Замените пароль на более сложный. Параметр {{path|passwordExpirationTime: 20380119031407Z}} означает, что срок действия пароля неограничен<br />
Причина использования такой учетной записи, а не создание обычной учетной записи пользователя IPA, и использование этой системы заключается в том, что системная учетная запись существует только для привязки к LDAP. Это не настоящий пользователь POSIX, он не может войти в систему и ему не принадлежат файлы. У этого пользователя нет особых прав и он не может ничего записывать какие-либо данные на сервер LDAP FreeIPA, только права на чтение.<br />
<br />
== Добавление расширенных полей в ldap ==<br />
<br />
Если необходимо добавить поля в вашу схему ldap, то реализация этого возможна через команду ldapmodify и добавление своих плагинов для отображения этих полей в WebUi.<br><br />
Обычно файлы модификации схемы являются типом ''.ldif''.<br><br />
Пример:<br><br />
Содержание файла addExtField.ldif <br><br />
<pre>dn: cn=schema<br />
changetype: modify<br />
add: attributeTypes<br />
attributeTypes: ( 2.25.28639311321113238241701611583088740684.14.2.2 NAME 'favoriteColorName' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'Extending FreeIPA' )<br />
<br />
dn: cn=schema<br />
changetype: modify<br />
add: attributeTypes<br />
attributeTypes: ( 2.25.28639311321113238241701611583088740684.14.2.3 NAME 'redirects' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'Extending FreeIPA')<br />
<br />
dn: cn=schema<br />
changetype: modify<br />
add: attributeTypes<br />
attributeTypes: ( 2.25.28639311321113238241701611583088740684.14.2.4 NAME 'attbool' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 X-ORIGIN 'Extending FreeIPA')<br />
<br />
dn: cn=schema<br />
changetype: modify<br />
add: objectclasses<br />
objectclasses: ( 2.25.28639311321113238241701611583088740684.14.2.1 NAME 'customPerson' SUP person STRUCTURAL MAY ( favoriteColorName $ attbool $ redirects ) X-ORIGIN 'Extending FreeIPA' )</pre><br />
<br />
Детальное пояснение для блока:<br><br />
<br />
<pre>dn: cn=schema<br />
changetype: modify<br />
add: attributeTypes<br />
attributeTypes: ( 2.25.28639311321113238241701611583088740684.14.2.2<br />
NAME 'favoriteColorName'<br />
EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch<br />
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15<br />
X-ORIGIN 'Extending FreeIPA' )</pre><br />
<br />
'''dn''' - dn, в котором будет проводиться изменение. Добавление/удаление классов и т.д.<br><br />
<br />
'''changetype''' - атрибут, отвечающий за тип изменений, которые будут происходить.(add, delete, modify, modrdn)<br><br />
<br />
'''add: attributeTypes''' - добавление атрибута, далее идёт описание атрибута.<br><br />
'''2.25.28639311321113238241701611583088740684.14.2.2''' - уникальный идентификатор атрибута. Можно написать любой.<br><br />
<br />
'''NAME 'favoriteColorName' ''' - По другому можно назвать - primary name. Название атрибута.<br><br />
<br />
'''EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch''' - эти атрибуты заданы для проверки соответствия содержания атрибута правилам caseIgnoreMatch <br><br />
<br />
'''SYNTAX 1.3.6.1.4.1.1466.115.121.1.15''' - OID типа данных <br><br />
<br />
Все изменения в схеме производятся от пользователя - Directory manager.<br><br />
<br />
Изменение схемы ldap:<br />
<br />
<pre>$ ldapmodify -D "cn=Directory Manager" -W -f addExtField.ldif</pre><br />
<br />
После изменения схемы, путем добавления нового objectclass, нужно чтобы эти поля еще можно было редактировать в web-интерфейсе. Для этого необходимо сделать палагин. В примере использовано 3 атрибута, для них сделаем 3 отдельных плагина:<br />
<br />
1. Создание папки:<br />
<pre>mkdir -p /usr/share/ipa/ui/js/plugins/favoriteColorName</pre><br />
<br />
2. Создание самого плагина:<br />
<pre>mcedit /usr/share/ipa/ui/js/plugins/favoriteColorName/favoriteColorName.js</pre><br />
Тело плагина:<br />
<br />
<pre>define(['freeipa/phases','freeipa/user'],<br />
function(phases, user_mod) {<br />
// helper function<br />
function get_item(array, attr, value) {<br />
for (var i=0,l=array.length; i<l; i++) {<br />
if (array[i][attr] === value) return array[i];<br />
}<br />
return null;<br />
}<br />
<br />
var color_plugin = {};<br />
<br />
color_plugin.add_favorite_color = function() {<br />
var facet = get_item(user_mod.entity_spec.facets, '$type', 'details');<br />
var section = get_item(facet.sections, 'name', 'identity');<br />
section.fields.push({<br />
name: 'favoritecolorname',<br />
label: 'Цвет'<br />
});<br />
return true;<br />
};<br />
<br />
phases.on('customization', color_plugin.add_favorite_color);<br />
<br />
return color_plugin;<br />
});</pre><br />
<br />
В схеме бы добавлен атрибут типа boolean, для него можно сделать радиокнопки:<br><br />
<br />
<pre>define(['freeipa/phases','freeipa/user'],<br />
function(phases, user_mod) {<br />
// helper function<br />
function get_item(array, attr, value) {<br />
for (var i=0,l=array.length; i<l; i++) {<br />
if (array[i][attr] === value) return array[i];<br />
}<br />
return null;<br />
}<br />
<br />
var attrbool_plugin = {};<br />
<br />
attrbool_plugin.add_bool = function() {<br />
var facet = get_item(user_mod.entity_spec.facets, '$type', 'details');<br />
var section = get_item(facet.sections, 'name', 'identity');<br />
section.fields.push(<br />
{<br />
$type: 'radio',.<br />
options:[{label:'True',value:'TRUE'},{label:'False',value:'FALSE'}],<br />
label:'Blood type',<br />
name: 'attbool'}<br />
);<br />
return true;<br />
};<br />
<br />
phases.on('customization', attrbool_plugin.add_bool);<br />
<br />
return attrbool_plugin;<br />
});<br />
<br />
</pre><br />
<br />
После перелогина появятся поля в web-интерфейсе. Для того чтобы пользователь мог их редактировать, необходимо изменить привилегии в группе ipausers. <br><br />
<br />
== Automember rebuild membership ==<br />
<br />
Пользовательские или хост группы можно легко перестроить на основе новых или обновленных правил automember. Команда automember rebuild только добавляет новые отношения для групп, она не удаляет те, которые не соответствуют правилам automember. Недавно добавленная команда вызовет задачу в rebuild automember, создав запись LDAP в cn = automember rebuild membership, cn = tasks, cn = config. Плагин automember в настоящее время проверяет операции Add(добавления), чтобы увидеть, есть ли запись соответствует одному из определенных правил automember. Существующие записи не проверяются когда они изменяются. Чтобы применить правило для всех записей, надо добавить задачу к плагину automember. Создатель задачи обеспечит фильтр поиска и базу. Все совпадающие записи будут проверяться в соответствии с определенными правилами automember, чтобы увидеть если они должны быть добавлены в какие-либо группы. Это позволяет добавить запуск атрибуты(значения) после того, как запись была первоначально добавлена, а затем вызвать задачу(выполнить) обновления automember. Ipa automember-rebuild может использоваться для восстановления членства для всех объектов определенного типа:<br />
<pre><br />
$ ipa automember-rebuild --type=group<br />
$ ipa automember-rebuild --type=hostgroup<br />
</pre><br />
Он также может использоваться для восстановления членства для указанных записей:<br />
<pre><br />
$ ipa automember-rebuild --hosts=HOSTNAME1 --hosts=HOSTNAME2<br />
$ ipa automember-rebuild --users=LOGIN1 --users=LOGIN2<br />
</pre><br />
Добавление новой группы хостов:<br />
<pre><br />
$ ipa hostgroup-add --desc="Web Servers" webservers<br />
</pre><br />
Добавить новый хост:<br />
<pre><br />
$ ipa host-add web1.example.com --force<br />
</pre><br />
Добавить automember rule:<br />
<pre><br />
$ ipa automember-add --type=hostgroup webservers<br />
$ ipa automember-add-condition --key=fqdn --type=hostgroup --inclusive-regex=^web[1-9]+\.example\.com webservers<br />
</pre><br />
Функция automember теперь работает для новых добавленных записей. Если мы добавим новый хост, он будет автоматически помещен в соответствующую группу хостов:<br />
<pre><br />
$ ipa host-add web2.example.com --force<br />
$ ipa hostgroup-show webservers<br />
Host-group: webservers<br />
Description: Web Servers<br />
Member hosts: web2.example.com<br />
</pre><br />
Однако старая запись хоста для web1.example.com по-прежнему не является членом или хост-группой веб-серверов. Введя новые команды automember-rebuild, мы сделаем это возможным:<br />
<pre> <br />
$ ipa automember-rebuild --type=hostgroup<br />
or<br />
$ ipa automember-rebuild --hosts=web1.example.com<br />
</pre><br />
Хост добавится в новую группу:<br />
<pre><br />
$ ipa hostgroup-show webservers<br />
Host-group: webservers<br />
Description: Web Servers<br />
Member hosts: web2.example.com, web1.example.com<br />
</pre><br />
Тоже самое можно сделать в web-интерфейсе.<br />
<br />
[[Категория:Корпоративная инфраструктура]]<br />
[[Категория:HOWTO]]<br />
<br />
{{Category navigation|title=Корпоративная инфраструктура|category=Корпоративная инфраструктура|sortkey={{SUBPAGENAME}}}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=FreeIPA&diff=40044
FreeIPA
2017-09-14T08:57:27Z
<p>217.15.195.17: Automember rebuild membership</p>
<hr />
<div>[[Файл:Freeipa-logo-small.png|frameless|right]]<br />
FreeIPA - это комплексное решение по управлению безопасностью Linux-систем, 389 Directory Server, MIT Kerberos, NTP, DNS, Dogtag. Оно состоит из веб-интерфейса и интерфейса командной строки.<br><br />
FreeIPA является интегрированной системой проверки подлинности и авторизации в сетевой среде Linux, FreeIPA сервер обеспечивает централизованную проверку подлинности, авторизацию и контроль за аккаунтами пользователей сохраняя сведения о пользователе, группах, узлах и других объектах необходимых для обеспечения сетевой безопасности.<br />
<br />
Сайт проекта: http://www.freeipa.org/<br />
<br />
== Установка сервера FreeIPA ==<br />
Устанавливать будет со встроенным DNS сервером и доменом EXAMPLE.TEST в локальной сети 192.168.135.0/24.<br><br />
Для начала отключим ahttpd, работающий на порту 8080, во избежание конфликтов с разворачиваемым tomcat и отключим HTTPS в Apache2:<br />
# service ahttpd stop<br />
# a2dissite 000-default_https<br />
# service httpd2 condreload<br />
<br />
Установим необходимые пакеты:<br />
<pre># apt-get install freeipa-server freeipa-server-dns</pre><br />
Зададим имя сервера:<br />
<pre># hostnamectl set-hostname ipa.example.test</pre><br />
Запускаем скрипт настройки сервера:<br />
В пакетном режиме: <br />
# ipa-server-install -U --hostname=$(hostname) -r EXAMPLE.TEST -n example.test -p 12345678 -a 12345678 --setup-dns --no-forwarders --no-reverse<br />
или интерактивно:<br />
<pre># ipa-server-install</pre><br />
<br />
{{Attention|Пароли должны быть не менее 8 символов}}<br />
<br />
Обратите внимание на ответы на вопросы, не совпадающие с предложенными:<br />
Do you want to configure integrated DNS (BIND)? [no]: yes<br />
Do you want to configure DNS forwarders? [yes]: no<br />
Do you want to search for missing reverse zones? [yes]: no<br />
<br />
остальные вопросы выбираем по умолчанию (можно просто нажать Enter). Так же при установке попросят ввести пароль администратора системы и пароль администратора каталогов.<br><br />
<br />
Для возможности управлять FreeIPA сервером из командной строки необходимо получить билет Kerberos:<br />
<pre># kinit admin</pre><br />
Добавим в DNS запись о нашем сервере времени:<br />
<pre># ipa dnsrecord-add example.test _ntp._udp --srv-priority=0 --srv-weight=100 --srv-port=123 --srv-target=ipa.example.test.</pre><br />
<br />
Проверить работу ntp сервера можно командой:<br />
<pre># ntpdate -q localhost<br />
server 127.0.0.1, stratum 3, offset 0.000018, delay 0.02568<br />
27 Apr 10:27:00 ntpdate[3491]: adjust time server 127.0.0.1 offset 0.000018 sec</pre><br />
<br />
Также доступен веб-интерфейс по адресу: <br />
<pre>https://ipa.example.test/ipa/ui/</pre><br />
<br />
{{Note|Если выдаёт <pre>[error] CalledProcessError: Command '/sbin/systemctl restart httpd2.service' returned non-zero exit status 1</pre><br />
Выполните <br />
# systemctl restart httpd2<br />
Отмените установку: <br />
# ipa-server-install -U --uninstall<br />
и повторите снова.}}<br />
<br />
== Установка FreeIPA клиента и подключение к серверу ==<br />
Установим необходимые пакеты:<br />
<pre># apt-get install freeipa-client libsss_sudo krb5-kinit bind-utils libbind</pre><br />
Зададим имя компьютера:<br />
<pre># hostnamectl set-hostname comp01.example.test</pre><br />
Добавим DNS сервер, для этого создадим файл {{path|/etc/net/ifaces/ens19/resolv.conf}} со следующим содержимым:<br />
<pre>nameserver 192.168.135.1</pre><br />
192.168.135.1 - IP-адрес нашего FreeIPA сервера.<br><br />
Укажем службе resolvconf использовать DNS FreeIPA и наш домен для поиска.<br><br />
Для этого в файл {{path|/etc/resolvconf.conf}} добавим/отредактируем следующие параметры:<br />
<pre>interface_order='lo lo[0-9]* lo.* ens19'<br />
search_domains=example.test</pre><br />
Где ens19 -интерфейс на котором доступен FreeIPA сервер, example.test - наш домен.<br><br />
Обновим DNS адреса:<br />
<pre># resolvconf -u</pre><br />
После этого в файле {{path|/etc/resolv.conf}} должны появится строки:<br />
<pre>search example.test<br />
nameserver 192.168.135.1</pre><br />
Запускаем скрипт настройки клиента:<br />
в пакетном режиме:<br />
# ipa-client-install -U -p admin -w 12345678<br />
или интерактивно:<br />
<pre># ipa-client-install</pre><br />
Если все настроено верно скрипт должен выдать такое сообщение:<br />
<pre>'''Discovery was successful!'''<br />
Client hostname: comp02.example.test<br />
Realm: EXAMPLE.TEST<br />
DNS Domain: example.test<br />
IPA Server: ipa.example.test<br />
BaseDN: dc=example,dc=test<br />
Continue to configure the system with these values? [no]:</pre><br />
Отвечаем {{cmd|yes}} вводим имя пользователя, имеющего право вводить машины в домен, и его пароль.<br><br />
<br />
Пример успешного ввода в домен:<br />
<source lang="text">Discovery was successful!<br />
Client hostname: ipa-client1.test1.alt<br />
Realm: TEST1.ALT<br />
DNS Domain: test1.alt<br />
IPA Server: ipa-server.test1.alt<br />
BaseDN: dc=test1,dc=alt<br />
Synchronizing time with KDC...<br />
Attempting to sync time using ntpdate. Will timeout after 15 seconds<br />
Successfully retrieved CA cert<br />
Subject: CN=Certificate Authority,O=TEST1.ALT<br />
Issuer: CN=Certificate Authority,O=TEST1.ALT<br />
Valid From: Wed Feb 15 15:17:45 2017 UTC<br />
Valid Until: Sun Feb 15 15:17:45 2037 UTC<br />
<br />
Enrolled in IPA realm TEST1.ALT<br />
Created /etc/ipa/default.conf<br />
Configured sudoers in /etc/nsswitch.conf<br />
Configured /etc/sssd/sssd.conf<br />
Configured passwd in /etc/nsswitch.conf<br />
Configured group in /etc/nsswitch.conf<br />
Configured gshadow in /etc/nsswitch.conf<br />
Configured services in /etc/nsswitch.conf<br />
Configured netgroup in /etc/nsswitch.conf<br />
Configured shadow in /etc/nsswitch.conf<br />
Configured /etc/nsswitch.conf<br />
Configured PAM system-auth<br />
Configured /etc/krb5.conf for IPA realm TEST1.ALT<br />
trying https://ipa-server.test1.alt/ipa/json<br />
Forwarding 'ping' to json server 'https://ipa-server.test1.alt/ipa/json'<br />
Forwarding 'ca_is_enabled' to json server 'https://ipa-server.test1.alt/ipa/json'<br />
Hostname (ipa-client1.test1.alt) does not have A/AAAA record.<br />
Failed to update DNS records.<br />
Missing A/AAAA record(s) for host ipa-client1.test1.alt: 10.10.10.206.<br />
Missing reverse record(s) for address(es): 10.10.10.206.<br />
Adding SSH public key from /etc/openssh/ssh_host_ecdsa_key.pub<br />
Adding SSH public key from /etc/openssh/ssh_host_ed25519_key.pub<br />
Adding SSH public key from /etc/openssh/ssh_host_dsa_key.pub<br />
Adding SSH public key from /etc/openssh/ssh_host_rsa_key.pub<br />
Forwarding 'host_mod' to json server 'https://ipa-server.test1.alt/ipa/json'<br />
Could not update DNS SSHFP records.<br />
SSSD enabled<br />
Configured /etc/openldap/ldap.conf<br />
NTP enabled<br />
Configured /etc/openssh/ssh_config<br />
Configured /etc/openssh/sshd_config<br />
Configuring test1.alt as NIS domain.<br />
Client configuration complete.</source><br />
<br />
{{Attention|Если при входе в домен возникает такая ошибка:<br />
<pre>Hostname (ipa-client1.test1.alt) does not have A/AAAA record.<br />
Failed to update DNS records.</pre><br />
Проверьте IP-адрес доменного DNS сервера в файле {{path|/etc/resolv.conf}}}}<br />
<br />
В случае возникновения ошибки, необходимо перед повторной установкой запустить процедуру удаления:<br />
# ipa-client-install -U --uninstall<br />
<br />
Для работы sudo-политик для доменных пользователей на клиентской машине необходимо разрешить доступ к sudo:<br />
<pre># control sudo public</pre><br />
=== Вход пользователя ===<br />
<br />
При первом входе пользователя будет запрошен текущий установленный администратором пароль и затем у пользователя запрашивается новый пароль и его подтверждение.<br />
<br />
{{Attention|Если машина до этого была в других доменах или есть проблемы со входом пользователей рекомендуется очистить кэш sssd:<br />
<pre># systemctl stop sssd<br />
# rm -f /var/lib/sss/db/*<br />
# rm -f /var/lib/sss/mc/*<br />
# systemctl start sssd</pre>}}<br />
<br />
== Настройка доверительных отношений с AD ==<br />
FreeIPA использует Samba для интеграции в Active Directory. Для работы Samba необходим работающий стек IPv6.<br><br />
Начальные данные:<br />
* IP адрес IPA сервера: '''192.168.135.130'''<br />
* Имя IPA сервера: '''dcf'''<br />
* Имя IPA домена: '''domf.testf'''<br />
* NetBIOS имя IPA домена: '''DOMF'''<br />
* IP адрес AD DC: '''192.168.135.150'''<br />
* Имя AD DC: '''dcc'''<br />
* Имя AD домена: '''domc.testc'''<br />
* NetBIOS имя AD домена: '''DOMC'''<br />
<br />
Установим необходимые пакеты:<br />
<pre># apt-get install freeipa-server-trust-ad python-module-sss-murmur samba-winbind</pre><br />
=== Предварительная настройка IPA сервера ===<br />
'''Настроим IPA''' для работы с доверительными отношениями:<br />
<pre># ipa-adtrust-install</pre><br />
Скрипт спросит необходимо ли конфигурировать {{path|slapi-nis}} плагин для поддержки работы старых клиентов (SSSD < 1.9) с пользователем из доверенного домена:<br />
<pre>Enable trusted domains support in slapi-nis? [no]:</pre> <br />
На IPA сервере добавлен хотя бы один пользователь (администратор сервера), поэтому скрипт предложит сгенерировать SID для всех существующих пользователей и груп:<br />
<pre>Do you want to run the ipa-sidgen task? [no]:</pre><br />
Дата и время на серверах должны совпадать.<pre><br />
IPA сервер в своей работе использует следующие порты:<br />
<pre>TCP ports: 80, 88, 443, 389, 636, 88, 464, 53, 135, 138, 139, 445, 1024-1300<br />
UDP ports: 88, 464, 53, 123, 138, 139, 389, 445</pre><br />
Они должны быть открыты и доступны.<br><br />
'''Настроим Samba:'''<br><br />
<pre># net conf setparm global 'dedicated keytab file' /etc/samba/samba.keytab<br />
# systemctl restart ipa</pre><br />
Проверим проходит ли Samba аутентификацию Kerberos со стороны IPA сервера:<br />
<pre># kinit admin<br />
# smbclient -L dcf.domf.testf -k<br />
lp_load_ex: changing to config backend registry<br />
Domain=[DOMF] OS=[Windows 6.1] Server=[Samba 4.5.5]<br />
<br />
Sharename Type Comment<br />
--------- ---- -------<br />
IPC$ IPC IPC Service (Samba 4.5.5)<br />
Domain=[DOMF] OS=[Windows 6.1] Server=[Samba 4.5.5]<br />
<br />
Server Comment<br />
--------- -------<br />
<br />
Workgroup Master<br />
--------- -------</pre><br />
'''Настроим DNS''' на обоих серверах, чтобы они знали друг о друге:<br><br />
На AD сервере создадим сервер условной пересылки для зоны IPA домена:<br />
<pre>C:\> dnscmd 127.0.0.1 /ZoneAdd domf.testf /Forwarder 192.168.135.130</pre><br />
На IPA сервере так же добавим зону AD домена:<br />
<pre># ipa dnsforwardzone-add domc.testc --forwarder=192.168.135.150 --forward-policy=only</pre><br />
<br />
=== Проверка конфигурации DNS ===<br />
'''На AD сервере:'''<br><br />
Проверим наличие записей для работы сервисов IPA на DNS-сервере AD.<br><br />
1. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:<br />
<pre>C:\>nslookup.exe<br />
> set type=SRV<br />
<br />
> _kerberos._udp.domf.testf.<br />
_kerberos._udp.domf.testf. SRV service location:<br />
priority = 0<br />
weight = 100<br />
port = 88<br />
svr hostname = dcf.domf.testf.<br />
<br />
> _ldap._tcp.domf.testf.<br />
_ldap._tcp.ipa.example.com SRV service location:<br />
priority = 0<br />
weight = 100<br />
port = 389<br />
svr hostname = dcf.domf.testf.</pre><br />
<br />
2. Запись отвечающая за имя Kerberos realm IPA домена:<br />
<pre>C:\>nslookup.exe<br />
> set type=TXT<br />
> _kerberos.domf.testf.<br />
_kerberos.domf.testf. text =<br />
<br />
"DOMF.TESTF"</pre><br />
<br />
3. После выполнения команды {{path|ipa-adtrust-install}} должны появится записи отвечающие за работу сервисов MS DC Kerberos через UDP и LDAP через TCP:<br />
<pre>C:\>nslookup.exe<br />
> set type=SRV<br />
> _kerberos._udp.dc._msdcs.domf.testf.<br />
_kerberos._udp.dc._msdcs.domf.testf. SRV service location:<br />
priority = 0<br />
weight = 100<br />
port = 88<br />
svr hostname = dcf.domf.testf.<br />
> _ldap._tcp.dc._msdcs.domf.testf.<br />
_ldap._tcp.dc._msdcs.domf.testf. SRV service location:<br />
priority = 0<br />
weight = 100<br />
port = 389<br />
svr hostname = dcf.domf.testf.</pre><br />
Далее проверим наличие записей для работы сервисов AD на DNS-сервере AD.<br><br />
4. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:<br />
<pre>C:\>nslookup.exe<br />
> set type=SRV<br />
> _kerberos._udp.dc._msdcs.domc.testc.<br />
_kerberos._udp.dc._msdcs.domc.testc. SRV service location:<br />
priority = 0<br />
weight = 100<br />
port = 88<br />
svr hostname = dcc.domc.testc.<br />
> _ldap._tcp.dc._msdcs.domc.testc.<br />
_ldap._tcp.dc._msdcs.domc.testc. SRV service location:<br />
priority = 0<br />
weight = 100<br />
port = 389<br />
svr hostname = dcc.domc.testc.</pre><br />
<br />
'''На IPA сервере:'''<br><br />
Проверим наличие записей для работы сервисов IPA на DNS-сервере IPA.<br><br />
1. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:<br />
<pre># dig +short -t SRV _kerberos._udp.domf.testf.<br />
0 100 88 dcf.domf.testf.<br />
<br />
# dig +short -t SRV _ldap._tcp.domf.testf.<br />
0 100 389 dcf.domf.testf.</pre><br />
2. Запись отвечающая за имя Kerberos realm IPA домена:<br />
<pre>dig +short -t TXT _kerberos.domf.testf.<br />
"DOMF.TESTF"</pre><br />
3. После выполнения команды {{path|ipa-adtrust-install}} должны появится записи отвечающие за работу сервисов MS DC Kerberos через UDP и LDAP через TCP:<br />
<pre># dig +short -t SRV _kerberos._udp.dc._msdcs.domf.testf.<br />
0 100 88 dcf.domf.testf.<br />
<br />
# dig +short -t SRV _ldap._tcp.dc._msdcs.domf.testf.<br />
0 100 389 dcf.domf.testf.</pre><br />
Далее проверим наличие записей для работы сервисов AD на DNS-сервере IPA.<br />
4. Запись отвечающая за работу сервисов Kerberos через UDP и LDAP через TCP:<br />
<pre># dig +short -t SRV _kerberos._udp.dc._msdcs.domc.testc.<br />
0 100 88 dcc.domc.testc.<br />
<br />
# dig +short -t SRV _ldap._tcp.dc._msdcs.domc.testc.<br />
0 100 389 dcc.domc.testc.</pre><br />
{{Attention|Если запись {{cmd|_kerberos._udp.dc._msdcs.domc.testc.}} не доступна проверьте {{cmd|_kerberos._tcp.dc._msdcs.domc.testc.}}}}<br />
<br />
=== Настройка доверия ===<br />
Добавление двунаправленных доверительных отношений леса (Forest Trust) с AD:<br><br />
<pre># kinit admin<br />
# ipa trust-add --type=ad domc.testc --admin Administrator --password --two-way=true<br />
Active Directory domain administrator's password: <br />
---------------------------------------------------<br />
Added Active Directory trust for realm "domc.testc"<br />
---------------------------------------------------<br />
Realm name: domc.testc<br />
Domain NetBIOS name: DOMC<br />
Domain Security Identifier: S-1-5-21-3611360735-1365415015-3217858865<br />
SID blacklist incoming: S-1-5-20, S-1-5-3, S-1-5-2, S-1-5-1, S-1-5-7, S-1-5-6, S-1-5-5, S-1-5-4, S-1-5-9, S-1-5-8, S-1-5-17, S-1-5-16, S-1-5-15, S-1-5-14, S-1-5-13,<br />
S-1-5-12, S-1-5-11, S-1-5-10, S-1-3, S-1-2, S-1-1, S-1-0, S-1-5-19, S-1-5-18<br />
SID blacklist outgoing: S-1-5-20, S-1-5-3, S-1-5-2, S-1-5-1, S-1-5-7, S-1-5-6, S-1-5-5, S-1-5-4, S-1-5-9, S-1-5-8, S-1-5-17, S-1-5-16, S-1-5-15, S-1-5-14, S-1-5-13,<br />
S-1-5-12, S-1-5-11, S-1-5-10, S-1-3, S-1-2, S-1-1, S-1-0, S-1-5-19, S-1-5-18<br />
Trust direction: Two-way trust<br />
Trust type: Active Directory domain<br />
Trust status: Established and verified<br />
</pre><br />
Необходимо ввести пароль Administrator AD.<br><br />
Далее необходимо запросить сервер AD о его доверенных доменах:<br />
<pre># ipa trust-fetch-domains domc.testc<br />
--------------------------------------------<br />
List of trust domains successfully refreshed<br />
--------------------------------------------<br />
Realm name: domd.domc.testc<br />
Domain NetBIOS name: DOMD<br />
Domain Security Identifier: S-1-5-21-2419724241-1549151283-3268040000<br />
------------------------------<br />
Количество вернутых значений 1<br />
------------------------------<br />
</pre><br />
При этом IPA создаст нужные id-диапазоны для доверенных доменов.<br><br />
Если мы добавим в лес еще один домен DOME.TESTE, то необходимо настроить DNS на обоих серверах, чтобы они видели друг друга.<br><br />
И выполнить команду еще раз,чтобы IPA сервер узнал о нем:<br />
<pre># ipa trust-fetch-domains domc.testc<br />
--------------------------------------------<br />
List of trust domains successfully refreshed<br />
--------------------------------------------<br />
Realm name: dome.teste<br />
Domain NetBIOS name: DOME<br />
Domain Security Identifier: S-1-5-21-3615012966-1241218098-4147673574<br />
------------------------------<br />
Количество вернутых значений 1<br />
------------------------------</pre><br />
Найти все доверенные домены можно и с помощью web-интерфейса. Для Перейдем в IPA Server -> Trusts и выберем нужный нам домен:<br><br />
[[Файл:IPATrusts.png|600px]]<br><br />
Нажмём кнопку Fetch domains это обновит список доверенных доменов:<br><br />
[[Файл:IPATrustFetch.png|600px]]<br><br />
<br />
Для того чтобы увидеть список всех доверенных доменов из леса используйте следующую команду:<br />
<pre># ipa trustdomain-find domc.testc<br />
Domain name: domc.testc<br />
Domain NetBIOS name: DOMC<br />
Domain Security Identifier: S-1-5-21-3611360735-1365415015-3217858865<br />
Domain enabled: True<br />
<br />
Domain name: domd.domc.testc<br />
Domain NetBIOS name: DOMD<br />
Domain Security Identifier: S-1-5-21-2419724241-1549151283-3268040000<br />
Domain enabled: True<br />
<br />
Domain name: dome.teste<br />
Domain NetBIOS name: DOME<br />
Domain Security Identifier: S-1-5-21-3615012966-1241218098-4147673574<br />
Domain enabled: True<br />
------------------------------<br />
Количество вернутых значений 3<br />
------------------------------<br />
</pre><br />
<br />
=== Проверка конфигурации Kerberos ===<br />
1. Запросим ticket для IPA пользователя:<br />
<pre># kinit admin</pre><br />
2. Запросим service ticket для сервиса из IPA домена:<br />
<pre># kvno -S host dcf.domf.testf<br />
host/dcf.domf.testf@DOMF.TESTF: kvno = 2</pre><br />
3. Запросим service ticket сервиса из AD домена:<br />
<pre># kvno -S cifs dcc.domc.testc<br />
cifs/dcc.domc.testc@: kvno = 3</pre><br />
Если запрос service ticket для сервиса из AD домена прошел успешно, то у нас должен появиться междоменный ticket-granting ticket, его имя krbtgt/DOMC.TESTC@DOMF.TESTF:<br />
<pre># klist<br />
Ticket cache: KEYRING:persistent:0:0<br />
Default principal: admin@DOMF.TESTF<br />
<br />
Valid starting Expires Service principal<br />
14.02.2017 15:43:46 15.02.2017 01:43:46 cifs/dcc.domc.testc@DOMC.TESTC<br />
14.02.2017 15:43:46 15.02.2017 01:43:46 cifs/dcc.domc.testc@<br />
14.02.2017 15:43:46 15.02.2017 15:42:48 krbtgt/DOMC.TESTC@DOMF.TESTF<br />
14.02.2017 15:43:25 15.02.2017 15:42:48 host/dcf.domf.testf@DOMF.TESTF<br />
14.02.2017 15:42:53 15.02.2017 15:42:48 krbtgt/DOMF.TESTF@DOMF.TESTF</pre><br />
=== Проверка пользователей доверенного домена ===<br />
Проверим имеет ли доступ к пользователям из доверенного домена рабочие станции IPA.<br><br />
Для этого на рабочей станции IPA выполните команду:<br />
<pre># getent passwd u01domc@domc<br />
u01domc@domc.testc:*:328601108:328601108:u01domc:/home/domc.testc/u01domc:</pre><br />
Где u01domc это пользователь из AD домена. Обратите внимание, что не указана оболочка входа. Назначить оболочку входа для пользователей из доверенного домена можно добавив на сервере IPA в файл {{path|/etc/sssd/sssd.conf}} следующую строчку:<br />
<pre>[domain/domf.testf]<br />
...<br />
default_shell = /bin/bash<br />
...</pre><br />
Вывод команды должен стать таким:<br />
<pre># getent passwd u01domc@domc<br />
u01domc@domc.testc:*:328601108:328601108:u01domc:/home/domc.testc/u01domc:/bin/bash</pre><br />
{{Attention|Для корректной работы сервера IPA с пользователями доверенного домена AD необходимо обеспечить доступ сервиса sssd к /etc/krb5.keytab см. [https://bugzilla.altlinux.org/33115 bug 33115]}}<br />
{{Attention|Для входа AD пользователя в ALT рабочую станцию из IPA вводим имя пользователя в формате '''DOMC'''\username или '''DOMC.TESTC'''\username или username@'''domc''' username@'''domc.testc'''}}<br />
{{Attention|Для входа IPA пользователя в windows рабочую станцию из AD вводим имя пользователя в формате '''DOMF.TESTF'''\username}}<br />
=== Создание аккаунта для доступа к LDAP ===<br />
Некоторые сервисы использующие LDAP требуют предварительно настроенной учетной записи. Использование обычной учетной записи пользователя предпочтительней, но не всегда это целесообразно делать. Можно сделать системную учетную запись следующим образом на сервере FreeIPA используя пароль Directory :<br />
<pre># ldapmodify -x -D 'cn=Directory Manager' -W<br />
dn: uid=system,cn=sysaccounts,cn=etc,dc=example,dc=test<br />
changetype: add<br />
objectclass: account<br />
objectclass: simplesecurityobject<br />
uid: ldapaccount<br />
userPassword: secret123<br />
passwordExpirationTime: 20380119031407Z<br />
nsIdleTimeout: 0<br />
<blank line><br />
^D</pre><br />
Замените пароль на более сложный. Параметр {{path|passwordExpirationTime: 20380119031407Z}} означает, что срок действия пароля неограничен<br />
Причина использования такой учетной записи, а не создание обычной учетной записи пользователя IPA, и использование этой системы заключается в том, что системная учетная запись существует только для привязки к LDAP. Это не настоящий пользователь POSIX, он не может войти в систему и ему не принадлежат файлы. У этого пользователя нет особых прав и он не может ничего записывать какие-либо данные на сервер LDAP FreeIPA, только права на чтение.<br />
=== Automember rebuild membership ===<br />
Пользовательские или хост группы можно легко перестроить на основе новых или обновленных правил automember. Команда automember rebuild только добавляет новые отношения для групп, она не удаляет те, которые не соответствуют правилам automember. Недавно добавленная команда вызовет задачу в rebuild automember, создав запись LDAP в cn = automember rebuild membership, cn = tasks, cn = config. Плагин automember в настоящее время проверяет операции Add(добавления), чтобы увидеть, есть ли запись соответствует одному из определенных правил automember. Существующие записи не проверяются когда они изменяются. Чтобы применить правило для всех записей, надо добавить задачу к плагину automember. Создатель задачи обеспечит фильтр поиска и базу. Все совпадающие записи будут проверяться в соответствии с определенными правилами automember, чтобы увидеть если они должны быть добавлены в какие-либо группы. Это позволяет добавить запуск атрибуты(значения) после того, как запись была первоначально добавлена, а затем вызвать задачу(выполнить) обновления automember. Ipa automember-rebuild может использоваться для восстановления членства для всех объектов определенного типа:<br />
<pre><br />
$ ipa automember-rebuild --type=group<br />
$ ipa automember-rebuild --type=hostgroup<br />
</pre><br />
Он также может использоваться для восстановления членства для указанных записей:<br />
<pre><br />
$ ipa automember-rebuild --hosts=HOSTNAME1 --hosts=HOSTNAME2<br />
$ ipa automember-rebuild --users=LOGIN1 --users=LOGIN2<br />
</pre><br />
Добавление новой группы хостов:<br />
<pre><br />
$ ipa hostgroup-add --desc="Web Servers" webservers<br />
</pre><br />
Добавить новый хост:<br />
<pre><br />
$ ipa host-add web1.example.com --force<br />
</pre><br />
Добавить automember rule:<br />
<pre><br />
$ ipa automember-add --type=hostgroup webservers<br />
$ ipa automember-add-condition --key=fqdn --type=hostgroup --inclusive-regex=^web[1-9]+\.example\.com webservers<br />
</pre><br />
Функция automember теперь работает для новых добавленных записей. Если мы добавим новый хост, он будет автоматически помещен в соответствующую группу хостов:<br />
<pre><br />
$ ipa host-add web2.example.com --force<br />
$ ipa hostgroup-show webservers<br />
Host-group: webservers<br />
Description: Web Servers<br />
Member hosts: web2.example.com<br />
</pre><br />
Однако старая запись хоста для web1.example.com по-прежнему не является членом или хост-группой веб-серверов. Введя новые команды automember-rebuild, мы сделаем это возможным:<br />
<pre> <br />
$ ipa automember-rebuild --type=hostgroup<br />
or<br />
$ ipa automember-rebuild --hosts=web1.example.com<br />
</pre><br />
Хост добавится в новую группу:<br />
<pre><br />
$ ipa hostgroup-show webservers<br />
Host-group: webservers<br />
Description: Web Servers<br />
Member hosts: web2.example.com, web1.example.com<br />
</pre><br />
Тоже самое можно сделать в web-интерфейсе.<br />
<br />
<br />
== Добавление расширенных полей в ldap ==<br />
<br />
Если необходимо добавить поля в вашу схему ldap, то реализация этого возможна через команду ldapmodify и добавление своих плагинов для отображения этих полей в WebUi.<br><br />
Обычно файлы модификации схемы являются типом ''.ldif''.<br><br />
Пример:<br><br />
Содержание файла addExtField.ldif <br><br />
<pre>dn: cn=schema<br />
changetype: modify<br />
add: attributeTypes<br />
attributeTypes: ( 2.25.28639311321113238241701611583088740684.14.2.2 NAME 'favoriteColorName' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'Extending FreeIPA' )<br />
<br />
dn: cn=schema<br />
changetype: modify<br />
add: attributeTypes<br />
attributeTypes: ( 2.25.28639311321113238241701611583088740684.14.2.3 NAME 'redirects' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 X-ORIGIN 'Extending FreeIPA')<br />
<br />
dn: cn=schema<br />
changetype: modify<br />
add: attributeTypes<br />
attributeTypes: ( 2.25.28639311321113238241701611583088740684.14.2.4 NAME 'attbool' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 X-ORIGIN 'Extending FreeIPA')<br />
<br />
dn: cn=schema<br />
changetype: modify<br />
add: objectclasses<br />
objectclasses: ( 2.25.28639311321113238241701611583088740684.14.2.1 NAME 'customPerson' SUP person STRUCTURAL MAY ( favoriteColorName $ attbool $ redirects ) X-ORIGIN 'Extending FreeIPA' )</pre><br />
<br />
Детальное пояснение для блока:<br><br />
<br />
<pre>dn: cn=schema<br />
changetype: modify<br />
add: attributeTypes<br />
attributeTypes: ( 2.25.28639311321113238241701611583088740684.14.2.2<br />
NAME 'favoriteColorName'<br />
EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch<br />
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15<br />
X-ORIGIN 'Extending FreeIPA' )</pre><br />
<br />
'''dn''' - dn, в котором будет проводиться изменение. Добавление/удаление классов и т.д.<br><br />
<br />
'''changetype''' - атрибут, отвечающий за тип изменений, которые будут происходить.(add, delete, modify, modrdn)<br><br />
<br />
'''add: attributeTypes''' - добавление атрибута, далее идёт описание атрибута.<br><br />
'''2.25.28639311321113238241701611583088740684.14.2.2''' - уникальный идентификатор атрибута. Можно написать любой.<br><br />
<br />
'''NAME 'favoriteColorName' ''' - По другому можно назвать - primary name. Название атрибута.<br><br />
<br />
'''EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch''' - эти атрибуты заданы для проверки соответствия содержания атрибута правилам caseIgnoreMatch <br><br />
<br />
'''SYNTAX 1.3.6.1.4.1.1466.115.121.1.15''' - OID типа данных <br><br />
<br />
Все изменения в схеме производятся от пользователя - Directory manager.<br><br />
<br />
Изменение схемы ldap:<br />
<br />
<pre>$ ldapmodify -D "cn=Directory Manager" -W -f addExtField.ldif</pre><br />
<br />
После изменения схемы, путем добавления нового objectclass, нужно чтобы эти поля еще можно было редактировать в web-интерфейсе. Для этого необходимо сделать палагин. В примере использовано 3 атрибута, для них сделаем 3 отдельных плагина:<br />
<br />
1. Создание папки:<br />
<pre>mkdir -p /usr/share/ipa/ui/js/plugins/favoriteColorName</pre><br />
<br />
2. Создание самого плагина:<br />
<pre>mcedit /usr/share/ipa/ui/js/plugins/favoriteColorName/favoriteColorName.js</pre><br />
Тело плагина:<br />
<br />
<pre>define(['freeipa/phases','freeipa/user'],<br />
function(phases, user_mod) {<br />
// helper function<br />
function get_item(array, attr, value) {<br />
for (var i=0,l=array.length; i<l; i++) {<br />
if (array[i][attr] === value) return array[i];<br />
}<br />
return null;<br />
}<br />
<br />
var color_plugin = {};<br />
<br />
color_plugin.add_favorite_color = function() {<br />
var facet = get_item(user_mod.entity_spec.facets, '$type', 'details');<br />
var section = get_item(facet.sections, 'name', 'identity');<br />
section.fields.push({<br />
name: 'favoritecolorname',<br />
label: 'Цвет'<br />
});<br />
return true;<br />
};<br />
<br />
phases.on('customization', color_plugin.add_favorite_color);<br />
<br />
return color_plugin;<br />
});</pre><br />
<br />
В схеме бы добавлен атрибут типа boolean, для него можно сделать радиокнопки:<br><br />
<br />
<pre>define(['freeipa/phases','freeipa/user'],<br />
function(phases, user_mod) {<br />
// helper function<br />
function get_item(array, attr, value) {<br />
for (var i=0,l=array.length; i<l; i++) {<br />
if (array[i][attr] === value) return array[i];<br />
}<br />
return null;<br />
}<br />
<br />
var attrbool_plugin = {};<br />
<br />
attrbool_plugin.add_bool = function() {<br />
var facet = get_item(user_mod.entity_spec.facets, '$type', 'details');<br />
var section = get_item(facet.sections, 'name', 'identity');<br />
section.fields.push(<br />
{<br />
$type: 'radio',.<br />
options:[{label:'True',value:'TRUE'},{label:'False',value:'FALSE'}],<br />
label:'Blood type',<br />
name: 'attbool'}<br />
);<br />
return true;<br />
};<br />
<br />
phases.on('customization', attrbool_plugin.add_bool);<br />
<br />
return attrbool_plugin;<br />
});<br />
<br />
</pre><br />
<br />
После перелогина появятся поля в web-интерфейсе. Для того чтобы пользователь мог их редактировать, необходимо изменить привилегии в группе ipausers. <br><br />
<br />
[[Категория:Корпоративная инфраструктура]]<br />
[[Категория:HOWTO]]<br />
<br />
{{Category navigation|title=Корпоративная инфраструктура|category=Корпоративная инфраструктура|sortkey={{SUBPAGENAME}}}}</div>
217.15.195.17
https://www.altlinux.org/index.php?title=Apache2/AD-auth&diff=39674
Apache2/AD-auth
2017-07-27T09:54:43Z
<p>217.15.195.17: </p>
<hr />
<div>Исходные данные:<br />
*Домен ActiveDirectory DOMG.TESTG<br />
*Web-сервер apserver [ip: 192.168.135.195] введенный в домен с помощью sssd<br />
<br />
Задача:<br />
*Настроить аутентификацию Apache2 с PHP через AD<br />
==Создание keytab-файла==<br />
Создание SPN keytab-файла описано [[Создание_SPN_и_Keytab_файла|тут]]<br><br />
Изменим владельца и права доступа полученного keytab-файла:<br />
<pre># chown apache2:apache2 /etc/httpd2/apache2.keytab<br />
# chmod 0440 /etc/httpd2/apache2.keytab</pre><br />
<br />
==Настройка Apache2==<br />
Установим и включим необходимые модули:<br />
<pre># apt-get install apache2-mod_auth_kerb<br />
# a2enmod auth_krb5<br />
# a2enmod authn_core<br />
# a2enmod authz_user<br />
# systemctl restart httpd2</pre><br />
Удобнее всего настраивать модуль с помощью .htaccess файлов.<br><br />
Для этого разрешим использование файла .htaccess в настройках сайта:<br />
<pre>...<br />
<Directory "/var/www/html"><br />
AllowOverride All<br />
</Directory><br />
...</pre><br />
Пример настройки .htaccess для аутентификации доменного пользователя для корневого каталога сайта:<br />
<pre><br />
AuthType Kerberos<br />
AuthName "Kerberos Login"<br />
KrbMethodNegotiate On<br />
KrbMethodK5Passwd On<br />
KrbAuthRealms DOMG.TESTG<br />
Krb5KeyTab /etc/httpd2/apache2.keytab<br />
KrbServiceName HTTP<br />
KrbSaveCredentials On<br />
KrbLocalUserMapping On #Обрезает @REAL в переменной REMOTE_USER<br />
require valid-user<br />
</pre><br />
<br />
'''Realm name должен быть указан большими буквами.'''<br><br />
Если в логах Apache пишется ошибка:<br />
<pre>krb5_get_init_creds_password() failed: Client not found in Kerberos database</pre><br />
То необходимо изменить адрес сервиса в строке KrbServiceName, на HTTP/полное имя сервера в домене, например:<br><br />
<br />
<pre>HTTP/test.example.domain.ru</pre><br />
<br />
== Настройка PHP аутентификации GSSAPI ==<br />
Для работы аутентификации PHP в LDAP необходима директива KrbSaveCredentials On, при её включении будет создаваться нужная нам переменная $_SERVER['KRB5CCNAME'].<br><br />
Также необходимо проверить наличие в DNS PTR-записей нашего web-сервера:<br />
<pre># host 192.168.135.195<br />
195.135.168.192.in-addr.arpa domain name pointer apserver.domg.testg.</pre><br />
192.168.135.195 - ip-адрес нашего web-сервера.<br><br />
Установим необходимые пакеты:<br />
<pre># apt-get install pecl-krb5 php5-ldap</pre><br />
Для проверки работоспособности LDAP запросов с помощью PHP и Kerberos, создадим в нашей корневой папке файл index.php, следующего содержания:<br />
<pre><?php<br />
var_dump($_SERVER['PHP_AUTH_USER']);<br />
var_dump($_SERVER['KRB5CCNAME']);<br />
putenv("KRB5CCNAME={$_SERVER['KRB5CCNAME']}");<br />
$ldapconn = ldap_connect("ldap://dcd.domg.testg:389") or die('error connect с $ldaphost') ;<br />
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);<br />
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);<br />
$result = ldap_sasl_bind($ldapconn,'','','GSSAPI','DOMG.TESTG') or die('Failed to GSSAPI bind sasl bind.<br />');<br />
$result = ldap_search($ldapconn, 'DC=DOMG,DC=TESTG', '(objectClass=*)', array('mail'));<br />
$result_entries = ldap_get_entries($ldapconn, $result);<br />
var_dump($result_entries);<br />
?></pre><br />
Перейдем в браузере на адрес https://apserver.domg.testg/index.php введя имя и пароль доменного пользователя. Вывод должен быть таким:<br />
<pre>string(7) "u01domg" string(50) "FILE:/var/run/httpd2/krbcache/krb5cc_apache_NHBQeV"<br />
<br />
array(224) {<br />
["count"]=><br />
int(223)<br />
[0]=><br />
array(2) {<br />
["count"]=><br />
int(0)<br />
["dn"]=><br />
string(16) "DC=domg,DC=testg"<br />
}<br />
...</pre><br />
[[Настройка_браузеров_для_SSO|Настройка web-браузеров для SSO]]<br />
-----<br />
{{Category navigation|title=Apache2|category=Apache2}}[[Категория:Active Directory]][[Категория:Web]]</div>
217.15.195.17