Се­год­ня мы с тобой соз­дадим «живой» USB-накопи­тель с уста­новоч­ным обра­зом Arch Linux. «Живой» в том смыс­ле, что во вре­мя исполь­зования мож­но будет уста­нав­ливать и уда­лять прог­раммы, менять любые фай­лы и сох­ранять изме­нения. Я при­гото­вил для тебя мак­сималь­но под­робную инс­трук­цию по основным дей­стви­ям, но даль­ше ты смо­жешь нас­тро­ить всё так, как тебе пон­равит­ся.

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

Есть мно­жес­тво готовых раз­работок, пред­назна­чен­ных как раз для решения таких задач. Но мы‑то хотим получить пол­ностью кас­томизи­рован­ное окру­жение — при­выч­ное и с набором нуж­ных прог­рамм!

Ва­риан­та здесь два: сде­лать заг­рузоч­ный образ 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.img раз­мером 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.img и устрой­ством loopback. Это поз­воля­ет работать с фай­лом обра­за так, как если бы он был физичес­ким устрой­ством, нап­ример USB-накопи­телем.

losetup --show -Pf usb.img

$ losetup --show -Pf usb.img
/dev/loop0

Ко­ман­да покажет имя соз­данно­го устрой­ства, в дан­ном слу­чае это /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

Сна­чала мы смон­тиру­ем раз­дел /dev/loop0p3, это будет наш основной раз­дел, на который уста­новим сис­тему. Затем на этом раз­деле мы соз­дадим каталог /boot, в который смон­тиру­ем раз­дел /dev/loop0p2.

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, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    1 Комментарий
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии