Поиск по сайту:
Одним людям идут их недостатки, а другим даже достоинства не к лицу (Ларошфуко).

Как автоматизировать монтирование/разработку в средах Chroot В Linux

03.01.2025
Как автоматизировать монтирование / разработку в средах Chroot В Linux

Если вы используете mmdebstrap для создания минимальных систем на базе Debian, вам может быть неудобно вручную монтировать и размонтировать каталог /dev каждый раз, когда вы используете chroot. Хорошая новость в том, что есть способы автоматизировать этот процесс! В этой статье мы покажем вам, как повысить эффективность работы, автоматически монтируя /dev при входе в среду chroot и размонтируя при выходе.

 

Зачем автоматизировать Монтаж /dev?

При создании среды chroot по умолчанию она не имеет доступа к каталогу /dev хост-системы. Это может вызывать ошибки при выполнении таких команд, как apt update, поскольку программам требуется доступ к файлам устройств, таким как /dev/null.

[...]
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
/usr/bin/apt-key: 95: cannot create /dev/null: Permission denied
E: gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
Err:3 http://deb.debian.org/debian bookworm-updates InRelease
  gpgv, gpgv2 or gpgv1 required for verification, but neither seems installed
[...]

 

Вы можете решить эту проблему, вручную монтируя/dev ([[Устранение неполадок с mmdebstrap]]) каждый раз, когда используете chroot. Но это утомительно и занимает много времени. Автоматизация этого процесса сэкономит вам силы и упростит рабочий процесс.

 

Решение 1. Используйте systemd-nspawn для автоматизации монтирования /dev в Chroot

systemd-nspawn — это инструмент командной строки, входящий в состав systemd, который позволяет создавать и запускать облегчённые изолированные системные контейнеры в системах Linux. Он позволяет выполнять команды или даже целые операционные системы в изолированной среде.

Инструмент systemd-nspawn может автоматически обрабатывать монтирование /dev и других каталогов.

 

Шаг 1: Установка systemd-nspawn

В системах на базе Debian установите его с помощью:

sudo apt update
sudo apt install systemd-container

 

Читать  Как установить или изменить часовой пояс в Linux

Шаг 2: Введите Chroot с помощью systemd-nspawn

Создайте среду chroot с помощью mmdebstrap:

mmdebstrap --variant=minbase stable /tmp/debian-rootfs

 

Затем введите chroot, используя команду:

sudo systemd-nspawn -D /tmp/debian-rootfs

 

systemd-nspawn автоматически монтирует /dev/proc и /sys внутри chroot. Когда вы выходите из chroot, он автоматически размонтирует эти каталоги.

 

Решение 2: используйте скрипт Chrootmnt для автоматического монтирования и размонтирования /dev в средах Chroot

Chrootmnt — это скрипт Bash для монтирования и размонтирования /dev в среде chroot, обеспечивающий беспрепятственный доступ к устройствам и автоматическую очистку для безопасного управления системой Linux.

Ключевые особенности

  1. Гибкие входные данные: Работает с любым каталогом и командой chroot.
  2. Обработка ошибок: предотвращает сбои, вызванные отсутствием каталогов или неправильными аргументами.
  3. Автоматическая очистка: Позволяет избежать оставления подключенных ресурсов в случае прерывания работы.
  4. Поддержка псевдотерминала: обеспечивает совместимость с интерактивными инструментами, такими как SSH, screen и tmux.

 

Шаг 1: Создайте скрипт

Сохраните следующий скрипт как chrootmnt.sh:

# ------------------------------------------------------------------
# Название скрипта: chrootmnt.sh
# Описание: сценарий Bash для монтирования и размонтирования /dev
# внутри среды chroot
# Веб-сайт: https://gist.github.com/ostechnix
# Версия: 1.0
# Использование: ./chrootmnt.sh /путь/к/команде chroot аргументы
# ------------------------------------------------------------------

# Проверка ввода
if [ $# -lt 2 ]; then
echo "Usage: $0 /path/to/chroot command [args...]"
 exit 1
fi

# Путь к каталогу chroot
CHROOT_DIR="$1"
shift # Удалите первый аргумент (путь к chroot)

# Убедитесь, что каталог chroot существует
if [ ! -d "$CHROOT_DIR" ]; then
 echo "Ошибка: каталог chroot $CHROOT_DIR не существует."
 exit 1
fi

# Подключите /dev и /dev/pts
sudo mount --bind /dev "$CHROOT_DIR/dev"
sudo mount --bind /dev/pts "$CHROOT_DIR/dev/pts"

# Обработка отключения при выходе
cleanup() {
 sudo umount "$CHROOT_DIR/dev/pts"
 sudo umount "$CHROOT_DIR/dev"
}
trap cleanup EXIT

# Войти в chroot
sudo chroot "$CHROOT_DIR" "$@"

 

Читать  Мониторинг активности пользователей Linux с помощью инструментов Acct или Psacct

Вот пошаговое объяснение того, как работает скрипт:

1. Проверка входных данных

if [ $# -lt 2 ]; then
echo "Usage: $0 /path/to/chroot command [args...]"
exit 1 fi
  • Гарантирует, что пользователь предоставит по крайней мере два аргумента:
    1. Путь к каталогу chroot.
    2. Команда (например, /bin/bash) для выполнения внутри chroot.
  • Если аргументы отсутствуют, он отображает инструкции по использованию и завершает работу.

 

2. Сохраняйте аргументы

CHROOT_DIR="$1"
shift # Удалите первый аргумент (путь к chroot)
  • Сохраняет путь к каталогу chroot в CHROOT_DIR.
  • Используется shift для удаления этого аргумента, оставляя только команду и её необязательные аргументы.
    • Пример: Если входные данные являются: ./chrootmnt.sh /tmp/debian-rootfs /bin/bash
      • CHROOT_DIR = /tmp/debian-rootfs
      • Оставшиеся аргументы (/bin/bash) передаются в chroot.

 

3. Проверка каталога

if [ ! -d "$CHROOT_DIR" ]; then
 echo "Ошибка: каталог Chroot $CHROOT_DIR не существует."
 exit 1
fi
  • Подтверждает существование указанного каталога chroot.
  • Если каталог отсутствует, он выводит сообщение об ошибке и завершает работу.

 

4. Смонтируйте /dev и /dev/pts

sudo mount --bind /dev "$CHROOT_DIR/dev"
sudo mount --bind /dev/pts "$CHROOT_DIR/dev/pts"
  • Связывает хост-процессы /dev и /dev/pts внутри chroot.
    • /dev: Предоставляет файлы устройства (например, /dev/null/dev/tty).
    • /dev/pts: Поддерживает псевдотерминалы (используемые такими программами, как SSH и screen).
  • Гарантирует, что программы внутри chroot могут правильно обращаться к устройствам и терминалам.

 

5. Функция очистки

cleanup() { 
 sudo umount "$ CHROOT_DIR / dev / pts"
 sudo umount "$ CHROOT_DIR / dev"
}
trap cleanup EXIT
  • Определяет функцию (cleanup), которая отключает /dev и /dev/pts.
  • Регистрирует эту функцию для автоматического запуска при завершении работы скрипта (успешном или с ошибкой).
    • Предотвращает выход устаревших креплений, если что-то пойдет не так.
Читать  Терминал Windows станет командной строкой по умолчанию в Windows 11

 

6. Введите Chroot

sudo chroot "$CHROOT_DIR" "$@"
  • Использует chroot команду для переключения в указанный корневой каталог (CHROOT_DIR).
  • Выполняет команду, предоставленную в качестве дополнительных аргументов ($@).
    • Пример: ./chrootmnt.sh /tmp/debian-rootfs /bin/bash
      • Выполняется /bin/bash внутри chroot.

 

7. Автоматическая очистка

  • Когда сеанс chroot завершается (нормально или из-за ошибки), скрипт автоматически:
    1. Размонтируется /dev/pts.
    2. Размонтируется /dev.

 

Шаг 2: Сделайте скрипт исполняемым

Выполните следующую команду, чтобы сделать скрипт исполняемым:

chmod +x chrootmnt.sh

 

Шаг 3: Используйте скрипт

Во-первых, убедитесь, что вы создали среду chroot:

mmdebstrap --variant=minbase stable /tmp/debian-rootfs

 

Теперь, вместо использования sudo chroot /tmp/debian-rootfs, используйте скрипт для ввода chroot:

 

Запустите оболочку внутри /tmp/debian-rootfs:

./chrootmnt.sh /tmp/debian-rootfs /bin/bash

 

Запустите команду (например, ls -l /) внутри chroot:

./chrootmnt.sh /tmp/debian-rootfs ls -l /

 

Просто убедитесь, что вы ввели правильный путь к среде chroot. В данном случае каталог chroot — /tmp/debian-tootfs. Замените его на свой.

 

Какое решение Вам следует использовать?

  • systemd-nspawn: Лучше всего подходит для продвинутых пользователей, которым нужен опыт, подобный контейнерному.
  • Скрипт Chrootmnt: Лучше всего подходит для простоты и автоматизации.

 

Заключение

Вручную монтировать и размонтировать /dev каждый раз при использовании chroot неэффективно. Используя systemd-nspawn или скрипт-оболочку, вы можете автоматизировать этот процесс и сэкономить время. Выберите метод, который лучше всего подходит для вашего рабочего процесса, и наслаждайтесь более удобной работой с mmdebstrap!

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
Команда разработчиков Nobara Linux официально представила Nobara 41 — совершенно…

Спасибо!

Теперь редакторы в курсе.