Как добавить в автозагрузку в Debian
Обновлено: 21.11.2024
В этой статье описывается, как автоматически запускать приложение во время или после загрузки компьютеров Apalis, Colibri и Verdin на модулях, работающих под управлением Embedded Linux.
В TorizonCore приложения упакованы в контейнеры. Контейнеры запускаются подсистемой контейнеров, в нашем случае это Docker.
Docker уже настроен на автозапуск, и для запуска ваших приложений при загрузке в TorizonCore вы должны описать, какие контейнеры использовать и как их вызывать. Пожалуйста, ознакомьтесь с нашими материалами о шагах по автоматическому запуску контейнера с помощью TorizonCore в разделе «Запуск и управление контейнерами Docker в Torizon».
Что касается наших эталонных изображений для проекта Yocto, вы можете следить за любой из тем, описанных ниже, чтобы удовлетворить потребности вашего проекта или варианта использования.
Системный
Начиная с версии 2.x нашего Linux BSP мы используем systemd в качестве диспетчера инициализации и служб.
Systemd — это системный и сервисный менеджер для Linux, который также может заменить традиционную систему инициализации SysV. Вы можете прочитать его руководство здесь.
Конфигурация модуля – это файл, имя которого заканчивается на .service. В нем содержится информация о процессе, который контролируется и контролируется systemd. Служебные файлы можно найти в /etc/systemd/system/, а для дистрибутива — в /lib/systemd/system/ .
Вы можете включать, отключать, запускать, останавливать и проверять состояние служб с помощью команды systemctl.
Общие элементы конфигурации настраиваются в общих разделах [Unit] и [Install].
Параметры конфигурации конкретной службы настраиваются в разделе [Сервис].
Файлы службы должны включать раздел [Service], который содержит информацию о службе и контролируемом ею процессе.
Для получения дополнительной информации о возможных опциях раздела [Сервис] обратитесь к документации.
Процедура
Создайте файл конфигурации объекта с расширением .service
Скопируйте файл конфигурации модуля в /etc/systemd/system и используйте инструмент systemctl для включения и запуска службы.
Использование команды systemctl
Исходя из документации SystemD, вам необходимо перезагрузить конфигурацию systemd после добавления или изменения любых юнит-файлов:
Чтобы проверить статус службы или запустить и остановить службу, которая действительна до следующей перезагрузки, вы можете использовать следующие команды:
Чтобы добавить службу или удалить ее из списка служб, которые будут запускаться при загрузке. Примечание. Это не запускает и не останавливает службу, а вступает в силу только во время следующей загрузки
Вот пример файла конфигурации устройства для автоматического запуска (гипотетического) приложения mydatalogger при запуске:
Оболочки
/etc/профиль
Каждый раз, когда запускается оболочка входа в систему, выполняется сценарий /etc/profile и все сценарии в /etc/profile.d.
Это делается для входа в систему через последовательную консоль, через соединение ssh, а также для входа в диспетчере отображения на графический рабочий стол.
/etc/profile загружается при входе в систему: он настраивает среду при входе в систему и настройки приложения, получая любой доступный для чтения файл в /etc/profile.d/ .
Использование /etc/profile хорошо подходит для настройки среды или выполнения небольших задач.
Обратите внимание, что эти сценарии должны вернуть управление, чтобы продолжить вход в систему.
Удалите файл в /etc/profile.d или дополнения к /etc/profile, чтобы отменить автоматическое выполнение.
Процедура
Чтобы загружать сценарий оболочки при каждом входе в систему, вам просто нужно добавить файл сценария в /etc/profile.d/ .
Помните, что сценарий оболочки должен иметь расширение *.sh.
Ниже приведен пример файла сценария для удаления записей резервной копии:
Графический
Настольный компьютер Weston
В более поздней версии Toradex Linux BSP 5 используется графический компоновщик Weston/Wayland вместо X11, который использовался до BSP 3.0.
Обратите внимание, что Wayland — это протокол, а Weston — графический компоновщик, реализующий протокол Wayland. Подробнее об этом можно прочитать на странице Wayland.
Любое графическое приложение, разработанное для X11, также должно работать, поскольку компоновщик Weston настроен на работу с режимом совместимости XWayleand, что позволяет использовать клиенты X11.
При этом для создания графического приложения, которое будет автоматически запускаться при загрузке системы, это приложение должно запускаться после службы Weston.
Пример автоматического запуска графического приложения wayland при загрузке представлен ниже.
Как видите, эта служба вызывает сценарий для выполнения. Это потому, что необходимо проверить, была ли установлена переменная среды XDG_RUNTIME_DIR, и если нет, мы должны ее установить.
Уэстон будет использовать XDG_RUNTIME_DIR для контекста окна.
Также рекомендуется соответствующим образом экспортировать переменную DISPLAY. См. ниже:
С сервисом и скриптом ваше приложение Wayland будет автоматически запускаться при загрузке.
Проект Yocto/OpenEmbedded
Мы подготовили сценарии для автоматического запуска вашего приложения в Wayland/Weston при запуске непосредственно из сборки Yocto Project/OpenEmbedded. Это называется wayland-app-launch, а также то, как мы автоматически запускаем демонстрации Qt на эталонном мультимедийном изображении. Ознакомьтесь с приведенными ссылками, которые содержат примеры того, как вы можете интегрировать это в OE.
X11 для рабочего стола
Вы можете запускать приложения автоматически при входе в диспетчер окон или в среду рабочего стола.
С angstrom-lxde-image вы получите следующие возможности. Другие среды рабочего стола предоставляют аналогичные средства.
Диспетчер сеансов lxsession может запускать приложения при запуске графической среды.
Этого можно добиться двумя способами:
Специфический для lxsession способ, которым анализируются записи в файлах /etc/xdg/lxsession/LXDE/autostart и ~/.config/lxsession/LXDE/autostart.
Общий способ, поддерживаемый многими диспетчерами сеансов. Файлы в папках /etc/xdg/autostart/ и ~/.config/autostart/, оканчивающиеся на .desktop, анализируются и, если применимо, запускается описанное в них приложение.
Дополнительную информацию можно найти в документации по LXSession.
Файл автозапуска LXSession
Чтобы использовать первый вариант, вам нужно отредактировать файл /etc/xdg/lxsession/LXDE/autostart или ~/.config/lxsession/LXDE/autostart.
Добавьте приложение или командную строку, которую вы хотите выполнить, на новую строку в файле.
Если вы хотите, чтобы ваше приложение перезапускалось в случае аварийного завершения работы, поставьте перед именем приложения символ @. Как, например, lxterminal с @lxterminal в /etc/xdg/lxsession/LXDE/autostart:
Обратите внимание, что этот файл не является сценарием оболочки, поэтому такие акробатические трюки оболочки, как перенаправления и конвейеры, не допускаются.
При необходимости это можно сделать, создав пользовательский сценарий оболочки, который, в свою очередь, может поддерживать полный набор функций оболочки.
Файлы .desktop
По сути, чтобы запустить службу или приложение при таком подходе, необходимо создать файл .desktop и добавить его в автозапуск.
Дополнительную информацию об этом можно найти в документации к файлу .desktop. Примечание. В /usr/share/applications/ уже есть несколько файлов .desktop, которые можно скопировать в папку автозапуска.
Например, если вы хотите автоматически запускать lxterminal при запуске, вы можете сделать следующее: 1. Создайте terminal.desktop в /etc/xdg/autostart/ . Добавьте несколько ключевых записей, таких как:
- [Desktop Entry] — должна быть первой строкой каждого файла рабочего стола и заголовком раздела для идентификации блока пар ключ-значение, связанного с рабочим столом. Необходимо, чтобы рабочий стол правильно распознал файл.
- Имя приложения. (Имя группы Desktop Entry — должно быть уникальным в системе)
- Тип приложения. (Возможные значения: «Приложение», «Ссылка» или «Каталог».)
- Имя исполняемого файла приложения плюс необязательные аргументы.
- Терминал (описывает, должно ли приложение работать в терминале.)
Пример содержимого файла .desktop с записями должен быть следующим:
- После редактирования сохраните рабочий стол.
Примечание. Графический файловый менеджер будет отображать файлы .desktop не с их именами, а со значением ключа «Имя». например в приведенном выше примере "LXTerminal".
Чтобы отключить автоматический запуск приложения, просто удалите соответствующий файл *.desktop из /etc/xdg/autostart/ и/или .config/autostart/ или добавьте ключ NotShowIn=LXDE; в файл рабочего стола.
В качестве альтернативы используйте графический интерфейс «Меню LXDE»/Настройки/«Настройки сеанса рабочего стола» и снимите флажок «Включено».
X11 с одним пользовательским приложением
Если ваш вариант использования требует запуска X11, вероятно, также потребуется запустить некоторые задачи настройки, такие как сопоставление клавиатуры, калибровка сенсорного экрана, а затем запустить единственное пользовательское приложение. В этом случае вы можете использовать схему, подобную той, что используется в angstrom-qt5-x11-image и qt4e-demo-image.
Скрипт, запущенный Systemd
В qt4e-demo-image и angstrom-qt5-x11-image (до версии 2.8b2) используется служба systemd и сценарий домашнего приготовления. Сценарий запускает X-сервер, а затем пользовательское приложение. Интеграция любых задач установки между запуском X11 и запуском пользовательского приложения в сценарий приводит к множеству проблем, поскольку иногда это останавливает X-сервер и т. д.
Однако для простой системы этого может быть достаточно.
Чтобы запустить приложение X11 вместо демонстрационного приложения, измените сценарий соответствующим образом.
Использование nodm, xinit и пользовательского скрипта
В образе angstrom-qt5-x11 (начиная с версии 2.8b2) для запуска X11 используется простой менеджер отображения nodm из OpenEmbedded.При этом используются данные конфигурации в /etc/X11 , например. Xsession.d, например. для запуска сенсорного калибратора. В качестве последнего шага он ищет скрипт x-window-manager и получает его.
Чтобы запустить приложение X11, переопределите следующие две переменные в рецепте x-window-simple-app, чтобы установить начальный рабочий каталог и указать приложение:
В этом руководстве объясняется, как запускать сценарии или службы при запуске или загрузке в Debian 11 и дистрибутивах на основе Linux.
Чтобы правильно добавлять службы и сценарии при запуске Debian 11, вам необходимо создать модули Systemd. В этом руководстве основное внимание уделяется модулям Systemd. Если вам нужны быстрые инструкции по запуску скрипта при загрузке, сразу перейдите к разделу Создание модуля Systemd для запуска скрипта при загрузке.
Что такое модуль Systemd?
Единицы Systemd — это файлы конфигурации, содержащие информацию для правильного управления или выполнения определенных системных файлов. Systemd Units можно использовать для управления службами, сокетами, устройствами, точками монтирования, точками автоматического монтирования, файлами подкачки или разделами, целью запуска, отслеживаемым путем файловой системы, таймерами, контролируемыми и контролируемыми systemd, слайсом управления ресурсами или группой. процессов, созданных извне.
Модули Systemd находятся в каталоге /etc/systemd/system. Любой сценарий, который вы хотите запускать при загрузке с использованием модулей Systemd, должен быть указан в файле (модуле) в этом каталоге.
Быстрый просмотр с помощью команды ls покажет нам существующие модули systemd в нашей системе.
Один из файлов, который не был показан на снимке экрана выше, — это tomcat.service, содержимое которого похоже на следующее изображение.
Примечание. Следующая информация предназначена для ознакомления с файлами конфигурации устройств. Не волнуйтесь, модуль, который вы создадите для запуска скрипта, будет проще.
Где директивы [Unit]:
Описание: эта директива позволяет вам добавить описание для единицы, здесь вы можете установить имя единицы для ее идентификации.
Пожелания: Здесь вы можете указать зависимости юнитов. Обратите внимание, что для этой же цели существуют разные директивы. Например, директива Requires используется для указания жестких зависимостей, без которых модуль работать не может. В отличие от Requires, Wants используется для указания зависимостей, без которых модуль может продолжать работать.
После: Текущий модуль начнется после модуля, указанного в этой директиве.
Директивы раздела [Сервис]:
Тип: в предыдущем примере разветвление указывает на то, что служба должна быть остановлена с сохранением дочерних процессов, которым должен быть назначен PID.
Окружающая среда: здесь вы можете указать переменные среды устройства.
ExecStart: эта директива позволяет вам указать путь и команды, которые вы хотите выполнить.
ExecStop: вы можете указать команду, используемую для остановки устройства.
SuccessExitStatus: эта директива позволяет указать статус выхода и сигналы.
Пользователь: вы можете указать пользователя-владельца устройства.
Группа: вы можете указать владельца группы для объекта.
UMask: вы можете указать маску пользователя.
RestartSec: если устройство перезагружается автоматически, здесь вы можете указать время ожидания перед повторной попыткой перезапуска службы.
Перезапуск: вы можете указать для Systemd, когда устройство должно быть перезапущено. Доступны следующие варианты: всегда, при сбое, при прерывании, при успехе, при сторожевом таймере и при ненормальном состоянии.
Директива [Install] в приведенном выше примере называется WantedBy.
WantedBy: эта директива позволяет определить единицу измерения как зависимость; она аналогична директиве Wants, но указывает, считается ли текущий модуль зависимостью другого модуля.
Другие общие директивы в разделе [Unit], которых не было на предыдущем снимке экрана:
Требуется: в этой директиве вы можете указать зависимости для предотвращения сбоев при загрузке. В отличие от директивы Wants, если зависимость, указанная в директиве Requires, не выполняется, модуль не будет работать.
В разделе [Сервис]:
PIDFile: для директивы forking требуется директива PIDFile, которая содержит путь к pid-файлу дочернего процесса, чтобы Systemd мог его идентифицировать.
StartLimitInterval: указывает, что у устройства есть 60 секунд на 10 попыток перезапуска в случае сбоя.
StartLimitBurst: эта директива указывает ограничение на количество попыток, в предыдущем примере — 10 попыток за 60 секунд.
Создание модуля Systemd для запуска скрипта при загрузке в Debian 11
Запуск сценария при загрузке может быть проще и содержать меньше настроек, чем файл tomcat.service, который ранее использовался для отображения общего содержимого устройства.
Как было сказано ранее, файлы (юниты), содержащие информацию о скриптах, запущенных при загрузке, находятся в каталоге /etc/systemd/system. Чтобы определить сценарий для запуска при загрузке, вам необходимо создать новый модуль для этого сценария. Чтобы создать модуль в /etc/systemd/system, вы можете использовать nano, как показано в примере ниже, в котором я создаю модуль с именем script.service, вы можете назовите его так, как вы считаете удобным для идентификации вашего скрипта.
Содержимое модуля для вашего скрипта будет проще, чем tomcat.service, который использовался в качестве примера ранее.
Скопируйте и вставьте следующий код в файл, созданный в папке /etc/systemd/system.
Примечание. Замените на имя вашего скрипта и
путем к вашему скрипту.
Описание = Ваше имя скрипта здесь
ExecStart=/ПУТЬ/К/Script.sh
После копирования содержимого в файл в папке /etc/systemd/system/ вам необходимо включить его с помощью команды systemctl, как показано ниже. Заменить
как добавить файлы startup.sh и shutdown.sh моего серверного приложения в последовательность запуска и завершения работы ОС Debian?
5 ответов 5
В Debian сценарии загрузки и завершения работы служб и приложений следует помещать в /etc/init.d/ .
Debian предоставляет пример сценария /etc/init.d/skeleton, который вы можете изменить по своему вкусу для своего конкретного приложения.
Когда все будет готово, позвоните:
Чтобы Debian добавил для вас символические ссылки /etc/rc?.d/.
Если вы предпочитаете меню или графический интерфейс, взгляните на пакет sysv-rc-conf или ksysv.
После Debian Jessie старая программа инициализации была заменена на systemd .
Проверьте сами. Запустите: ls -l /sbin/init и посмотрите, на что он указывает. В наши дни он указывает на systemd ( /sbin/init -> /lib/systemd/systemd ), более новую и лучшую программу инициализации.
ТАК ВЫБРАННЫЙ И ДРУГИЕ ОТВЕТЫ ЗДЕСЬ УСТАРЕЛИ
*Хотя вы по-прежнему можете устанавливать скрипты по-старому с помощью инструментов System-V, в целом это не очень хорошая идея.
man systemd.service говорит:*
Если служба запрашивается под определенным именем, но файл конфигурации модуля не найден, systemd ищет сценарий инициализации SysV с таким же именем. и динамически создает единицу обслуживания из этого скрипта. Это полезно для совместимости с SysV. Обратите внимание, что эта совместимость является достаточно полной, но не 100%.
Для более новых систем Debian (например, Jessie, Stretch, Buster и т. д.)
Это проще, чем вы думаете. (-:
Вот новый и предпочтительный способ установки программ загрузки или завершения работы.
С помощью systemd сначала нужно создать файл модуля. Юнит-файл — это в основном объявления, а не код.
Затем вы будете использовать команду systemctl, чтобы включить или запустить этот модуль.
systemd делает большую часть работы за вас, упрощая, например, автоматический перезапуск критической программы в случае ее сбоя или иного завершения. Кроме того, он закрывает вашу программу, где и когда она должна по умолчанию, без каких-либо дополнительных действий с вашей стороны.
Справочные страницы для начала:
man systemd.unit -- О файлах модулей в целом
man systemd.service -- О файлах модулей обслуживания, например. демоны и однократные программы.
man systemctl -- Пользовательский интерфейс командной строки
man journalctl -- Просмотр журнала действий systemd
man systemd -- О самой программе инициализации
Существует также множество других типов файлов модулей, например
man systemd.target — для групп и общих синхронизируемых целей.
После того, как вы усвоите приведенные выше основы, покопайтесь в man -k systemd, чтобы найти другие соответствующие справочные страницы.
Что бы вы ни делали, в Debian не используйте ничего из этого:
- update-rc.d --устанавливает и удаляет ссылки на сценарии инициализации в стиле System-V
- sysv-rc-conf – конфигурация уровня выполнения для SysV, например ссылки на сценарии инициализации.
- уровень запуска – вывести предыдущий и текущий уровни запуска SysV.
- BUM -- Boot Up Manager – графический редактор уровня выполнения
- systemadm -- Графический интерфейс для системы systemd и диспетчера служб
(кстати, автор сообщил мне по электронной почте, что он слишком неработоспособен.)
ПРИМЕР:
Этот демон время от времени отправляет мой текущий IP-адрес для обновления базы данных моего провайдера DDNS (Dynamic DNS (сервер доменных имен)) и, таким образом, мое доменное имя указывает на мой компьютер, куда бы оно ни направлялось.
Файлы этого модуля находятся в моей системе в этом файле настроек: /etc/systemd/system/noip2.service
Вот что находится в файле модуля:
Вручную запустить модульный файл (например, для тестирования):
- начните с $ sudo systemctl start noip2 .
- перезапустите с помощью $ sudo systemctl restart noip2 .
- остановить с помощью $ sudo systemctl stop noip2 .
Настройте систему для автоматического запуска файла модуля при запуске или завершении работы:
Существует несколько этапов запуска Linux, и вы можете настроить свой собственный сценарий или программу автозапуска на любом из этапов, где это может быть отдельная команда, цепочка команд или исполняемый файл. сценарий оболочки. Однако могут быть некоторые различия в процедуре запуска между различными дистрибутивами и версиями Linux.
Современный Linux сначала загружается в systemd, тогда как более старые версии Linux используют System V init. Оба метода будут запускать cron и rc.local перед загрузкой среды рабочего стола, такой как GNOME или KDE. С другой стороны, серверные дистрибутивы Linux будут запускать оболочку по умолчанию, такую как Bash, после входа пользователя в консоль вместо загрузки среды рабочего стола.
Способы автоматического запуска программы при запуске Linux:
Автоматически запускать программу при запуске Linux через systemd
systemd — это стандартный системный и сервисный менеджер в современном Linux. Помимо прочего, он отвечает за выполнение программ и управление ими во время запуска Linux. Совместимые программы предоставляют файлы service unit, используемые systemd для управления выполнением программы.
Вы можете настроить systemd для автоматического запуска программ при запуске Linux, выполнив следующие действия:
Вам придется создать свой собственный сервисный модуль, если это пользовательская программа или если ваша программа не поставляется с ним во время установки.
Связано: Создание и изменение файлов системных модулей
включенный сервисный модуль выполняется во время загрузки
Автоматически запускать программу при запуске Linux через cron
cron — это демон для выполнения запланированных команд. Команды хранятся в таблице заданий cron или в crontab и уникальны для каждого пользователя в системе. Он запускается во время загрузки системы с помощью systemd или System V init, и вы можете запланировать выполнение своего задания или программы прямо во время загрузки системы, выполнив следующие действия:< /p>
Вы должны выбрать редактор для crontab, если пользователь впервые использует команду.
crontab будет создан для пользователя, выполняющего команду, и будет выполняться с использованием привилегий пользователя. Если вам нужно, чтобы ваша программа запускалась от имени пользователя root, запустите crontab -e от самого пользователя root.
@reboot определяет задание, которое будет выполняться во время загрузки системы.
По возможности используйте полный путь к своим программам и пишите команды в одну строку.
Файл сохраняется в /var/spool/crontab/
Автоматически запускать программу при запуске Linux через rc.local
rc.local является наследием системы System V init. Это последний сценарий, который необходимо выполнить перед переходом к экрану входа в среду рабочего стола или приглашению входа в систему на терминале. Обычно это сценарий оболочки Bash, из которого можно запустить что угодно.
Вы можете настроить свой скрипт rc.local, выполнив следующие действия:
Он должен начинаться с интерпретатора (/bin/bash) и заканчиваться кодом выхода (0 означает успех)
Файл будет выполнен от имени пользователя root во время загрузки системы
Автоматически запускать программу при запуске GNOME
GNOME — это среда рабочего стола по умолчанию для дистрибутивов Linux, таких как Ubuntu и Red Hat. GNOME можно настроить для запуска программ, когда пользователь входит в систему, и его можно настроить, следуя приведенной ниже статье:
Автоматически запускать программу при запуске KDE
KDE — еще одна популярная среда рабочего стола для Linux, которая используется по умолчанию в Kubuntu и openSUSE. Его можно легко настроить для запуска программ, когда пользователь входит в систему, как описано в следующей статье:
Автоматически запускать программу в новом сеансе Bash
Новая программа оболочки будет создана при запуске сеанса терминала. Bash — это оболочка по умолчанию для большинства дистрибутивов Linux, и при запуске она ищет следующие файлы в определенном порядке и выполняет их.
Эти файлы содержат команды и логику для установки правильных переменных среды и запуска необходимых программ на языке Bash. Он также настроен на нормальное выполнение других файлов, таких как /etc/bashrc, /etc/bash.bashrc и ~/.bashrc. р>
Вы можете отредактировать любой из этих файлов, чтобы ваша программа запускалась при запуске сеанса Bash. Ниже приведена часть типичного файла ~/.файл bashrc:
сообщить об этом объявлении
Автор: Мохд Шакир Закария
Облачный архитектор по профессии, но всегда считал себя разработчиком, предпринимателем и энтузиастом открытого исходного кода.
11.1. Как я могу убедиться, что все программы используют один и тот же размер бумаги?
Установите пакет libpaper1, и он запросит у вас общесистемный размер бумаги по умолчанию. Этот параметр будет храниться в файле /etc/papersize .
Пользователи могут переопределить настройку размера бумаги с помощью переменной среды PAPERSIZE. Подробности см. на странице руководства по формату бумаги (5) .
11.2. Как я могу предоставить доступ к аппаратным периферийным устройствам без ущерба для безопасности?
Многие файлы устройств в каталоге /dev принадлежат некоторым предопределенным группам. Например, /dev/sr0 принадлежит к группе компакт-дисков.
Если вы хотите, чтобы определенный пользователь имел доступ к одному из этих устройств, просто добавьте пользователя в группу, к которой принадлежит устройство, т. е. сделайте следующее:
Таким образом, вам не придется изменять права доступа к файлам на устройстве.
Если вы сделаете это из оболочки пользователя или среды с графическим интерфейсом, вам придется выйти из системы и войти снова, чтобы стать действительным членом этой группы. Чтобы проверить, к каким группам вы принадлежите, запустите группы .
Обратите внимание, что с момента появления udev при изменении разрешений аппаратного периферийного устройства они могут быть скорректированы для некоторых устройств при запуске системы; если это произойдет с интересующими вас периферийными устройствами, вам придется изменить правила в /etc/udev .
11.3. Как загрузить консольный шрифт при запуске в Debian?
Пакет kbd поддерживает это, отредактируйте файл /etc/kbd/config.
11.4. Как настроить параметры приложения программы X11 по умолчанию?
Программы Debian X будут устанавливать данные ресурсов своих приложений в каталог /etc/X11/app-defaults/. Если вы хотите глобально настроить X-приложения, поместите свои настройки в эти файлы. Они помечены как файлы конфигурации, поэтому их содержимое будет сохранено при обновлении.
11.5. Как загружается система Debian?
Как и все системы Unix, Debian загружается с помощью выполнения программы init. Как и в большинстве дистрибутивов Linux, система Debian по умолчанию использует systemd как реализацию init. Также поддерживаются традиционная инициализация в стиле System-V и другие методы. [6]
Чтобы управлять порядком запуска служб, в традиционных системах Unix в стиле System-V используются уровни запуска . Они заменяются целями в systemd. Чтобы отобразить цель по умолчанию, к которой systemd приведет систему, выполните команду
Во время загрузки systemd запускает службы или другие цели, перечисленные в целевом файле по умолчанию /lib/systemd/system/default.target. Файлы для этих служб и целей устанавливаются, и служба включается во время установки пакета Debian. Если вы специально не хотите запускать службу во время загрузки, вместо удаления соответствующего пакета вы можете запустить команду
используя имя служебного файла, установленного в /lib/systemd/system (обычно на основе имени пакета).
Вы можете проверить статус любой службы с помощью команды
<р>. Чтобы запустить или остановить службу, запустите <р>. Команда service работает с любой системой инициализации, поддерживаемой в системе Debian, а не только с systemd. Однако, если вы предпочитаете использовать ту же команду в любой системе Linux с поддержкой systemd, для проверки состояния запуститечтобы получить ту же информацию.
11.6. А как насчет Debian и традиционной инициализации System V?
Debian поддерживает загрузку с использованием традиционной инициализации System V через пакет sysvinit-core. Файл конфигурации для System V init (то есть /etc/inittab) указывает, что первым выполняемым сценарием должен быть /etc/init.d/rcS. Этот сценарий запускает все сценарии в /etc/rcS.d/, разветвляя подпроцессы для выполнения инициализации, такой как проверка и монтирование файловых систем, загрузка модулей, запуск сетевых служб, установка часов и выполнение других действий. инициализация.
После завершения процесса загрузки init выполняет все сценарии запуска в каталоге, указанном в качестве уровня выполнения по умолчанию (этот уровень выполнения задается записью для id в /etc/inittab ). Как и большинство систем Unix, совместимых с System V, Linux имеет 7 уровней выполнения:
0 (остановить систему),
1 (однопользовательский режим),
2–5 (различные многопользовательские режимы) и
6 (перезагрузите систему).
Системы Debian поставляются с указанием, что при входе в многопользовательское состояние уровень выполнения по умолчанию будет "2", и будут выполняться сценарии в /etc/rc2.d/.
Debian использует порядок загрузки на основе зависимостей через insserv , используя заголовки LSB в каждом скрипте в /etc/init.d/ , а также параллельную одновременную загрузку с использованием 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', а затем задача, указанная аргументом. Эти сценарии можно использовать даже после загрузки системы для управления различными процессами.
Например, с аргументом `перезагрузить' команду
отправляет демону sendmail сигнал перечитать его файл конфигурации.
Обратите внимание, что для вызова скриптов /etc/init.d/ не следует использовать invoke-rc.d, вместо этого следует использовать сервис.
11.7. И есть ли другие способы загрузки системы Debian?
Если вам нравится инициализация System V, но не нравятся ссылки /etc/rc?.d/*, вы можете установить пакет file-rc. Вместо этого ссылки будут преобразованы в один файл конфигурации /etc/runlevel.conf.
Если вам не нравятся ни System V, ни systemd, вам может понравиться openrc, runit или daemontools.
11.8. Как система управления пакетами обрабатывает пакеты, содержащие файлы конфигурации для других пакетов?
Некоторые пользователи хотят создать, например, новый сервер, установив группу пакетов Debian и локально сгенерированный пакет, состоящий из файлов конфигурации. Как правило, это не очень хорошая идея, потому что dpkg не будет знать об этих файлах конфигурации, если они находятся в другом пакете, и может записать конфликтующие конфигурации при обновлении одного из исходных «групп» пакетов.
Вместо этого создайте локальный пакет, изменяющий файлы конфигурации «группы» интересующих вас пакетов Debian. Тогда dpkg и остальная часть системы управления пакетами увидят, что файлы были изменены локальным «сисадмином», и не будут пытаться перезаписать их при обновлении этих пакетов.
11.9. Как переопределить файл, установленный пакетом, чтобы вместо него можно было использовать другую версию?
Предположим, что системный администратор или локальный пользователь хочет использовать программу «login-local», а не программу «login», предоставляемую пакетом входа Debian.
Не :
Перезаписать /bin/login на локальный .
Система управления пакетами не узнает об этом изменении и просто перезапишет ваш пользовательский /bin/login всякий раз, когда будет установлен или обновлен логин (или любой пакет, предоставляющий /bin/login ).
чтобы все будущие установки пакета входа Debian записывали файл /bin/login в /bin/login.debian.
чтобы переместить вашу собственную локально созданную программу на место.
Запустите dpkg-divert --list, чтобы узнать, какие переадресации в настоящее время активны в вашей системе.
Подробности приведены на странице руководства dpkg-divert (8) .
11.10. Как я могу включить свой локально собранный пакет в список доступных пакетов, о которых знает система управления пакетами?
Выполните команду:
BIN-DIR — это каталог, в котором хранятся архивные файлы Debian (которые обычно имеют расширение «.deb»).
OVERRIDE_FILE — это файл, который редактируется сопровождающими дистрибутива и обычно хранится в FTP-архиве Debian по адресу index/override.main.gz для пакетов Debian в «основном» дистрибутиве. Вы можете игнорировать это для локальных пакетов.
PATHPREFIX – это необязательная строка, которую можно добавить в начале создаваемого файла my_Packages.
После создания файла my_Packages сообщите об этом системе управления пакетами с помощью команды:
Если вы используете APT, вы также можете добавить локальный репозиторий в свой файл sources.list (5).
11.11. Некоторым пользователям нравится «сморкаться», другим — «таращиться»; некоторым нравится vim, другим нравится elvis; одним нравится трн, другим нравится олово; как Debian поддерживает разнообразие?
Есть несколько случаев, когда два пакета предоставляют две разные версии программы, каждая из которых обеспечивает одну и ту же основную функциональность. Пользователи могут предпочесть один пакет другому по привычке или потому, что пользовательский интерфейс одного пакета более удобен, чем интерфейс другого. Другие пользователи той же системы могут сделать другой выбор.
Debian использует «виртуальную» систему пакетов, чтобы позволить системным администраторам выбирать (или позволять пользователям выбирать) свои любимые инструменты, когда есть два или более, которые обеспечивают одинаковую базовую функциональность, но удовлетворяют требованиям зависимости пакета без указания конкретного пакета.
Например, в системе могут существовать две разные версии программ чтения новостей. Пакет сервера новостей может «рекомендовать» наличие в системе некоторого средства чтения новостей, но выбор tin или trn остается за каждым пользователем. Это достигается за счет того, что пакеты tin и trn предоставляют виртуальный пакет news-reader. Какая программа вызывается, определяется ссылкой, указывающей из файла с именем виртуального пакета /etc/alternatives/news-reader на выбранный файл, например, /usr/bin/trn .
Одной ссылки недостаточно для полноценного использования альтернативной программы; обычно также должны быть выбраны справочные страницы и, возможно, другие вспомогательные файлы. Альтернативы обновлению сценария Perl позволяют гарантировать, что все файлы, связанные с указанным пакетом, выбраны в качестве системных по умолчанию.
Например, чтобы проверить, какие исполняемые файлы предоставляют `x-window-manager', запустите:
Если вы хотите изменить его, запустите:
И следуйте инструкциям на экране (по сути, нажмите число рядом с записью, которая вам нравится больше).
Если пакет по какой-то причине не регистрируется в качестве оконного менеджера (сообщите об ошибке, если это ошибка) или если вы используете оконный менеджер из каталога /usr/local, выбор на экране не будет содержать предпочитаемая вами запись. Вы можете обновить ссылку с помощью параметров командной строки, например:
Первый аргумент опции `--install' — это символическая ссылка, указывающая на /etc/alternatives/NAME, где NAME — второй аргумент. Третий аргумент — это программа, на которую должен указывать файл /etc/alternatives/NAME, а четвертый аргумент — это приоритет (большее значение означает, что альтернатива с большей вероятностью будет выбрана автоматически).
Чтобы удалить добавленную альтернативу, просто запустите:
Читайте также: