Глава 11. Пользовательская настройка системы Debian GNU/Linux

# Глава 11. Пользовательская настройка системы Debian GNU/Linux

## 11.1. Как убедиться, что все программы используют одинаковый формат бумаги?

Установите пакет `libpaper1`, и вас попросят указать формат бумаги по умолчанию для всей системы. Настройка будет сохранена в файле `/etc/papersize`.

Users can override the paper size setting using the `PAPERSIZE` environment variable. For details, see the manual page papersize(5).

## 11.2. Как обеспечить доступ к файлам устройств без нарушения защиты системы?

Многие файлы устройств в каталоге `/dev` принадлежат предопределённым группам. Например, `/dev/sr0` принадлежит группе `cdrom`.

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

    adduser пользователь группа

Благодаря этому, вам не нужно изменять права доступа на сами файлы устройств.

Если вы выполняли это из оболочки командной строки или графического окружения этого пользователя, то вам нужно выйти из системы и войти снова, чтобы стать членом этой группы. Чтобы посмотреть, в какие группы вы входите, введите команду `groups`.

Заметим, что при использовании `udev` если вы изменяете права доступа к оборудованию, то для некоторых устройств они могут измениться при запуске системы; если это происходит с каком-то важным для вас оборудованием, то вам следует изменить соответствующие правила в `/etc/udev`.

## 11.3. Как в Debian правильно сменить консольный шрифт при запуске системы?

Для этой задачи существуют пакет `kbd`, отредактируйте файл `/etc/kbd/config`.

## 11.4. Как настроить параметры по умолчанию для приложений X11?

В Debian файлы ресурсов программ X11 устанавливаются в каталог `/etc/X11/app-defaults/`. Если вы хотите глобально изменить настройки приложений X, то отредактируйте файлы настроек из этого каталога. Эти файлы считаются настроечными, так что их содержимое будет сохраняться при обновлениях системы.

## 11.5. How does a Debian system boot?

Like all Unices, Debian boots up by executing the program `init`. Like most Linux distributions, a default Debian system uses `systemd` as the implementation of `init`. Traditional System-V style init and other methods are also supported. [6]

To control the order in which services are started, traditional System-V style Unix systems use runlevels. These are replaced by targets under systemd. To display the default target to which systemd will bring the system, run the command

    systemctl get-default

During boot-up, systemd starts the services or other targets listed in the default target file `/lib/systemd/system/default.target`. The files for these services and targets are installed and the service is enabled during Debian package installation. If you specifically wish not to start a service during boot-up, instead of removing the corresponding package, you can run the command

    systemctl disable service.service

using the name of the service file installed in `/lib/systemd/system` (usually based on the name of the package).

The service file `/lib/systemd/system/rc-local.service` provides an easy way to run customized scripts in the file `/etc/rc.local` after boot-up, similar to what's offered on Debian systems running System-V style init. Beware: this script will fail if it tries to interact with the console such as asking for a user password or trying to clear the screen.

You can check the status of any service by the command

    service package status

. To start or stop a service, run

    service package start

and

    service package stop

. The `service` command works with any init system supported on a Debian system, not just with systemd. If you however prefer to use the same command on any systemd-supported Linux system, for checking the status run

    systemctl status package.service

to get the same information.

For more information on systemd for Debian, see https://wiki.debian.org/systemd.

## 11.6. And how about Debian and traditional System V init?

Debian supports booting using traditional System V init, via the sysvinit-core package. The configuration file for System V `init` (which is `/etc/inittab`) specifies that the first script to be executed should be `/etc/init.d/rcS`. This script runs all of the scripts in `/etc/rcS.d/` by forking subprocesses to perform initialization such as to check and to mount file systems, to load modules, to start the network services, to set the clock, and to perform other initialization.

По окончании процесса загрузки `init` выполняет все сценарии запуска в каталоге, соответствующем установленному по умолчанию уровню запуска (этот уровень задаётся записью `id` в `/etc/inittab`). Как и в большинстве Uniх-ов, совместимых с System V, в Linux имеется 7 уровней запуска:

- 0 (останов системы),

- 1 (однопользовательский режим),

- с 2 по 5 (различные многопользовательские режимы), и

- 6 (перезагрузка системы).

В системах Debian id=2, что означает, что по умолчанию будет установлен уровень запуска '2' (вход в многопользовательский режим), и будут запущены сценарии из каталога `/etc/rc2.d/`.

Debian использует порядок загрузки в соответствии с зависимостями при помощи insserv, в каждом сценарии в `/etc/init.d/` используются заголовки LSB, а также параллельную одновременную загрузку при помощи startpar, что ускоряет процесс загрузки системы.

Сценарии в любом каталоге, `/etc/rcN.d/` являются лишь символьными ссылками на сценарии в `/etc/init.d/`. Тем не менее, имена файлов в каждом из каталогов `/etc/rcN.d/` выбираются таким образом, что они обозначают способ запуска сценариев в `/etc/init.d/`. Например, до выхода на любой уровень запуска запускаются все сценарии, имена которых начинаются с 'K'; эти сценарии завершают работу служб. После этого запускаются все сценарии, имена которых начинаются с 'S'; эти сценарии запускают работу служб. Число после букв 'K' или 'S' обозначает порядок запуска сценария. Сценарии, имена которых содержат меньшее число, запускаются раньше.

Для поддержки этого метода все сценарии в каталоге `/etc/init.d/` принимают один из параметров: «start», «stop», «reload», «restart» или «force-reload» и затем выполняют задачу, определяемую этим параметром. Эти сценарии можно использовать даже после окончания процесса загрузки системы для управления различными процессами.

Например, при задании параметра «reload» команда

    /etc/init.d/sendmail reload

отправляет службе sendmail сигнал для выполнения повторного чтения файла настройки.

Заметьте, что invoke-rc.d не следует использовать для вызова сценариев `/etc/init.d/`, нужно использовать service.

## 11.7. And are there yet other ways of booting a Debian system?

If you do like System V init, but don't like the /etc/rc?.d/* links, you could install the `file-rc` package. That will convert the links into one single configuration file /etc/runlevel.conf instead.

If you like neither System V nor systemd, you might like `openrc` or `runit` or `daemontools`.

## 11.8. Как система управления пакетами работает с пакетами, содержащими настроечные файлы для других пакетов?

Предположим, что какие-то пользователи захотели настроить новый сервер, установив группу пакетов Debian и собственный пакет, состоящий из настроечных файлов. Вообще, это не очень хорошо, поскольку dpkg не будет знать о файлах настроек, если они находятся в отдельном пакете, и может затереть эти файлы при обновлении одного из пакетов исходной «группы».

Вместо этого создайте собственный пакет, который правит настроечные файлы интересующей «группы» пакетов. Впоследствии dpkg и другие утилиты системы управления пакетов увидят, что файлы были отредактированы локальным «администратором», и не станут их трогать при обновлении указанных пакетов.

## 11.9. Как заменить программу, установленную из какого-либо пакета, на свою собственную?

Предположим, что системный администратор или пользователь хотят использовать программу «login-local» вместо «login» из пакета Debian `login`.

НЕ надо:

- перезаписывать `/bin/login` программой `login-local`.

Система управления пакетами не будет знать об этих изменениях и при последующих обновлениях или установках просто заменит изменённый вами `/bin/login` новым из пакета `login` (или любого другого пакета, предоставляющего `/bin/login`).

Вместо этого

- выполните:

      dpkg-divert --divert /bin/login.debian /bin/login

  чтобы заставить Debian при последующих обновлениях пакета `login` записывать файл `/bin/login` в `/bin/login.debian`.

- затем выполните:

      cp login-local /bin/login

  чтобы перенести вашу локальную программу в нужное место.

Запустите `dpkg-divert --list`, чтобы узнать, какие замены (отклонения) уже имеются в вашей системе.

Details are given in the manual page dpkg-divert(8).

## 11.10. Как включить самостоятельно собранный пакет в список доступных пакетов, известных системе управления пакетами?

Выполните команду:

    dpkg-scanpackages КАТ_ДВОИЧН_ФАЙЛОВ ФАЙЛ_OVERRIDE [ПРЕФИКС_ПУТИ] > my_Packages

где:

- КАТ_ДВОИЧН_ФАЙЛОВ — это каталог, где находятся файлы-архивы Debian (обычно имеющие расширение «.deb»).

- OVERRIDE_FILE is a file that is edited by the distribution maintainers and is usually stored on a Debian archive at `indices/override.main.gz` for the Debian packages in the "main" distribution. You can ignore this for local packages.

- ПРЕФИКС_ПУТИ — это необязательная строка, которая может предшествовать именам файлов в `my_Packages`.

После создания файла `my_Packages`, сообщите системе управления пакетами о новых пакетах командой:

    dpkg --merge-avail my_Packages

If you are using APT, you can add the local repository to your sources.list(5) file, too.

## 11.11. Некоторым пользователям нравится mawk, другим gawk; некоторым vim, другим elvis; некоторым trn, другим tin. Как осуществляется поддержка предпочтений в Debian?

Бывают случаи, когда в двух пакетах имеются две разные версии какой-либо программы, в целом обеспечивающих одну и ту же функциональность. Одни пользователи могут предпочитать одну из этих программ другой в силу привычки или более привлекательного интерфейса. У других же пользователей этой же системы может быть иное мнение.

Для того, чтобы системные администраторы (или пользователи) могли выбирать для себя из нескольких пакетов с одинаковой функциональностью один предпочтительный, соблюдая в то же время зависимости без необходимости указания конкретного пакета, в Debian используется система «виртуальных» пакетов.

Например, в системе может существовать две различные версии программ чтения новостей. Пакет сервера новостей может 'рекомендовать', чтобы в системе была установлена некая программа для чтения новостей, но какая именно — `tin` или `trn`, предлагается выбрать пользователю. Решается это созданием виртуального пакета `news-reader`, который предоставляется пакетами `tin` и `trn`. Какая именно из этих программ будет вызываться, определяется символьной ссылкой файла виртуального пакета `/etc/alternatives/news-reader` на выбранный файл, например, на `/usr/bin/trn`.

Простого создания символьной ссылки для полного решения задачи использования альтернативной программы недостаточно; обычно необходимо также заменить страницы руководства и, возможно, вспомогательные программы. Для обеспечения того, чтобы все эти файлы, относящиеся к указанному пакету, выбирались в системе по умолчанию, используется сценарий на Perl `update-alternatives`.

Например, чтобы проверить, какие программы предоставляют «x-window-manager», выполните:

    update-alternatives --display x-window-manager

Если вы хотите изменить программу:

    update-alternatives --config x-window-manager

И следуйте инструкциям на экране (просто укажите номер желаемой программы из списка).

Если пакет почему-то не зарегистрировал себя как оконный менеджер (если это ошибка, сообщите о ней), или если вы используете менеджер из каталога /usr/local, то на экране вы не увидите предпочитаемой вами программы. Ссылку можно обновить с помощью указания дополнительных параметров для команды, например:

    update-alternatives --install /usr/bin/x-window-manager \
      x-window-manager /usr/local/bin/wmaker-cvs 50

Первый аргумент параметра «--install» представляет собой символьную ссылку на /etc/alternatives/NAME, где NAME задаётся вторым аргументом. Третий аргумент указывает программу, на которую должна указывать ссылка /etc/alternatives/NAME, а четвёртый задаёт приоритет (чем больше значение, тем больше вероятность автоматического выбора данной альтернативы).

Чтобы удалить добавленный вами вариант, просто выполните:

    update-alternatives --remove x-window-manager /usr/local/bin/wmaker-cvs

[6] In 2014, Debian changed its default init system from System V init to systemd. Debian 8 "jessie" in April 2015 was the first release to ship with systemd as default init. Four decisions of the Debian Technical Committee were involved: Bug #727708 2014-02-11: "The committee decided that the default init system for Linux architectures in jessie should be systemd." Bug #746715 2014-08-01: "The technical committee expects maintainers to continue to support the multiple available init systems", and merge reasonable contributions. Bug #746578 2014-11-15: "The committee decided that systemd-shim should be the first listed alternative dependency of libpam-systemd instead of systemd-sysv." This decision made it easier to keep running a non-systemd Debian system. Bug #7621942017-11-04: "On automatic init system switching on upgrade"

Глава 10. Debian и ядро |  | Глава 12. Поддержка Debian GNU/Linux