Содержание статьи
- Подготовка
- Создаем пустой файл под размер флешки
- Создаем разметку диска
- Монтируем в систему созданный образ
- Форматируем разделы
- Монтируем разделы в /mnt/usb
- Копируем airootfs
- Перевод некоторых файлов на русский (необязательно)
- Ставим пакеты
- Докручиваем настройки
- Ставим загрузчики
- Настраиваем журналирование
- Дополнительное действие
- Задаем пароль рута (необязательно)
- Образ готов, демонтируем устройства
- Пишем образ на флешку
- Тестируем образ в QEMU (необязательно)
- Выводы
- Бонус
У каждого линуксоида есть любимая система. У некоторых даже несколько, каждая — для особых задач. Один из таких специальных случаев — это портативная система, которую можно загрузить на чужой машине или на твоей, если основная ОС вдруг перестала работать нормально.
Есть множество готовых разработок, предназначенных как раз для решения таких задач. Но мы‑то хотим получить полностью кастомизированное окружение — привычное и с набором нужных программ!
Варианта здесь два: сделать загрузочный образ ISO либо просто установить всё на флешку. В первом случае система будет в разы компактнее, во втором мы получим важную возможность ставить и удалять программы и менять настройки во время работы.
Да, флешка будет изнашиваться, но стоят они сейчас недорого, и возможность работы с полноценной ОС, на мой взгляд, гораздо важнее.
Подготовка
Все работы я буду проводить на Arch Linux для x86-64 и возьму оригинальные archiso, которые используются для создания официальных ISO-образов.
Поэтому в систему должны быть установлены следующие пакеты: archiso, arch-install-scripts, gptfdisk.
Можно как сразу установить на USB-накопитель, так и создать образ диска, который потом можно будет записать на флешку. Далее я опишу процесс создания образа диска.
Создаем пустой файл под размер флешки
Переходим в каталог, где будем создавать наш образ.
cd ~
Все дальнейшие действия будем делать с привилегиями суперпользователя.
su
Чтобы тебе было легче ориентироваться, буду показывать вывод некоторых команд.
Узнать точный размер устройства можно командой
lsblk -bo NAME,SIZE
lsblk -bo NAME,SIZE
NAME SIZE
sda4005527552
├─sda1 10485760
├─sda2 268435456
└─sda3 3725540864
mmcblk0 62226694144
├─mmcblk0p1 209715200
└─mmcblk0p2 62015930368
Она покажет все устройства, среди них тебе нужно найти свой USB-накопитель.
Узнав номер устройства, ты можешь составить команду и задать нужный размер файла. Делим размер на 4096 и получаем нужное количество блоков.
Примеры:
16 Гб: 16034824192 / 4096 = 3914752
4 Гб: 4005527552 / 4096 = 977912
4096 — это обычный размер сектора для файловой системы.
Команда для создания файла usb.
размером 4 Гбайт:
dd if=/dev/zero of=usb.img bs=4096 count=977912 status=progress
$ dd if=/dev/zero of=usb.img bs=4096 count=977912 status=progress
3651747840 байт (3,7 GB, 3,4 GiB) скопирован, 8 s, 456 MB/s
977912+0 записей получено
977912+0 записей отправлено
4005527552 байт (4,0 GB, 3,7 GiB) скопирован, 8,78378 s, 456 MB/s
Проверяем:
ls -la usb.img
$ ls -la usb.img
-rw-rw-r-- 1 root root 4005527552 апр 25 19:51 usb.img
Если файл получился больше, можно обрезать до нужной длины с помощью truncate
. Например, до 16 Гбайт:
truncate -s 16034824192 usb.img
Создаем разметку диска
Чтобы наша система могла загружаться на компьютерах и с BIOS, и с EFI, нам нужно разметить диск на три раздела:
- один — 10 Мбайт, без файловой системы, необходим для установки загрузчика GRUB в режиме BIOS;
- второй — 256 Мбайт, будет отформатирован в FAT32, здесь создадим раздел
boot
и поставим GRUB в режиме EFI; - все оставшееся место отдадим корневой файловой системе. Отформатируем ее в Ext4.
Создаем разметку GPT и делим диск на три раздела:
sgdisk -o -n 1:0:+10M -t 1:EF02 -n 2:0:+256M -t 2:EF00 -n 3:0:0 -t 3:8300 usb.img
$ sgdisk -o -n 1:0:+10M -t 1:EF02 -n 2:0:+256M -t 2:EF00 -n 3:0:0 -t 3:8300 usb.img
Creating new GPT entries in memory.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.
Монтируем в систему созданный образ
Создаем связь между файлом образа usb.
и устройством loopback. Это позволяет работать с файлом образа так, как если бы он был физическим устройством, например USB-накопителем.
losetup --show -Pf usb.img
$ losetup --show -Pf usb.img
/dev/loop0
Команда покажет имя созданного устройства, в данном случае это /
.
Проверяем.
ls /dev/loop0*
$ ls /dev/loop0*
/dev/loop0
/dev/loop0p1
/dev/loop0p2
/dev/loop0p3
У нашего образа должно быть три раздела: loop0p1
, loop0p2
, loop0p3
.
Форматируем разделы
По стандарту раздел EFI должен быть отформатирован в FAT32.
mkfs.fat -F32 /dev/loop0p2
$ mkfs.fat -F32 /dev/loop0p2
mkfs.fat 4.2 (2021-01-31)
Третий раздел будет основным, для него можно выбрать любую ФС, которую будут поддерживать и загрузчик, и ядро.
Форматируем в Ext4:
mkfs.ext4 /dev/loop0p3
$ mkfs.ext4 /dev/loop0p3
mke2fs 1.46.5 (30-Dec-2021)
...
...
Создание журнала (16384 блоков): готово
Writing superblocks and filesystem accounting information: готово
Монтируем разделы в /mnt/usb
Сначала мы смонтируем раздел /
, это будет наш основной раздел, на который установим систему. Затем на этом разделе мы создадим каталог /
, в который смонтируем раздел /
.
mkdir -p /mnt/usb
mount /dev/loop0p3 /mnt/usb
mkdir /mnt/usb/boot
mount /dev/loop0p2 /mnt/usb/boot
Копируем airootfs
Несколько слов о archiso. Это инструмент, с помощью которого создают официальные образы Arch Linux. Он состоит из двух частей: скрипта mkarchiso
, который собирает образ, и каталога с настройками будущего образа. Нам нужен будет каталог с конфигами. В нем находятся:
- список пакетов, которые необходимо установить, они хранятся в файле
packages.
;x86_64 - каталог
airootfs
. Его структура идентична структуре Arch Linux, здесь лежат конфиги системы.
Нам три раза придется указывать путь до каталога с настройками archiso. Чтобы было проще, вынесем путь к нему в переменную.
export ARCHISO=/usr/share/archiso/configs/releng
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее