ArchLinux на флешке - всё очень просто

arch linux logoДолго изголялся для создания LiveUSB с ArchLinux - в методах аля Arch-live не устраивали по причине невозможности изменения дистрибутива на лету простым и быстрым методом. Посему пришлось воспользоваться дедовскими методами (ага, тот самый Keep It Simple Stupid) установки ArchLinux на флешку.

Подготовка
1) Cоздаем на флешке один единственный основной раздел, проще всего это сделать через cfdisk или gparted

2) Создаем на этом разделе файловую систему
mke2fs -m 0 -b 1024 -i 4096 -L STICK /dev/sd*1
Где STICK - это будущее имя раздела, а /dev/sd*1 это файл устройства.

3) Монтируем этот раздел mount /dev/sd*1 MNTDIR, где MNTDIR это точка монтирования

Установка и базовая настройка для загрузки с usb

4) Установка базовых пакетов
mkdir -p MNTDIR/var/lib/pacman
pacman -Sy -r MNTDIR filesystem bash sysvinit initscripts \
 syslog-ng dcron kbd findutils openssh iputils kernel26 \
pacman dhcpcd (добавте свои пакеты)


5) Не забываем о том что при загрузке с usb нам всё же надо будет примонтировать корневой раздел и каким sd* будет ваша флешка на том компе откуда вам взбредит с неё загрузиться неизвесно, поэтому в MNTDIR/etc/fstab добавляем строку
LABEL=STICK / ext2 defaults  0 0

или прописываем вместо LABEL=STICK UUID вашего раздела (узнать можно с помощью ls -l /dev/disk/by-uuid)

Так же не забываем про initcpio
sed -i 's/^HOOKS=.*$/HOOKS="base udev usb filesystems"/' MNTDIR/etc/mkinitcpio.conf
и генерируем новый образ инита
chroot MNTDIR mkinitcpio -c /etc/mkinitcpio.conf -g /boot/kernel26.img

Ну и последнее что нам осталось это настроить загрузчик.
Я привык к использованию GRUB хотя некоторые говорят что на usb-flash и cd лучше использовать syslinux. Поэтому придется показать оба способа, впрочем оба наипростейшие

GRUB
pacman -Sy -r MNTDIR  grub
cd MNTDIR/usr/lib/grub/i386-pc/
cp ./* MNTDIR/boot/grub/
Редактируем MNTDIR/boot/grub/menu.lst где в качестве root указываем либо LABLE либо UUID нашего раздела
Запускаем grub в котором вводим root (hd*,0) и setup (hd*)
Где * это номер нашей флешки, не забваем что в grub нумерация начинается с нуля, т.е. если у вас всего один жеский диск и вставлена всего одна флешка то надо писать root (hd1,0) и setup (hd1)

syslinux
Здесь всё немного проще
dd if=/usr/lib/syslinux/mbr.bin of=/dev/sd*
extlinux --install mntdir/boot
cat << EOF > MNTDIR/boot/extlinux.conf
default usbboot
label usbboot
  kernel vmlinuz26
  append initrd=kernel26.img root=STICK quiet
EOF

Честно говоря с syslinux у меня не сложилось, qemu ни как не хотел запускаться с флешки, хотя вообще с ArchLinux у qemu не сложилось - ни LiveCD ни LiveUSB в нём не загружались, хотя на реальном железе всё работало. С grub всё пошло как по малсу, да и возможности у него пошире будут (я, к примеру, использую запчасти с super grub disk)

Ну а теперь самое главное, перезагрузка в наш LiveUSB (не забываем выставить в BIOS необходимые настройки) и доводка его до того состояния которое вам необходимо, хотя доводить его можно и не перезагружаясь.

Честно говоря у данного способа есть недостатки, такие как большой объем занимаемого дискового пространства (1GB лично для моих нужд хватает), постоянное использование /tmp и прочего что никак не способствует долгой жизни флешки, но многое из этого (монтирование того же tmp в память) можно обойти.
Так что в итоге все плюсы с лихвой перекрывают немногочисленные минусы.
kma21 09-06-2009
Т.е. это будет система, которая работает с flash? Не установочно-загрузочная флешка, а полноценно рабочая?
muhas 09-06-2009
Да именно полноценный дистрибутив на флешке, правда до ума его всё-таки придется доводить дабы поменьше юзать флешку
wilful 10-04-2010
Привет.

Спасибо тебе за статейку, хотелось бы продолжения (Сжать корень готовой системы, подрубить своп). Но если не считаешь необходимым, то можно и обойтись. У меня уже версия дистра 0.0.3 =)
muhas 10-04-2010
потрубить своп это swapon под рутом если есть раздел...
а вот про сжатие не скажу — можешь эту тему на русском арчефоруме посмотреть, там как-раз твой вопрос поднимается
wilful 10-04-2010
То да =) Я на той теме уже писал, просто пишешь ты довольно неплохо (у меня с красноречием плоховато), вот и хотел, чтобы всю информацию объединили и выложили скажем на ВиКи Арча.
muhas 10-04-2010
я с вики не в ладах почему-то... а тут пишу только что сам делаю(делюсь опытом, так сказать). буду вновь арч на флешку ставить обязательно напишу...

Кстати, с вики можешь сам попробывать, там коллективный разум допилит статью до удобоваримого состояния - у меня не сложилось, может у тебя сложиться, вещ-то полезная
wilful 10-04-2010
Ну тогда ты не против Копирайта? Естественно укажу источник.
muhas 10-04-2010
конечно не против, опенсорс же. я даже внизу бложика указал значек копилефта вместа копирайта =)
буду очень рад если кому-то моё графоманство будет полезным за пределами бложика
wilful 10-04-2010
А можно убрать мое мыло от сюда? Спама навалило....
muhas 10-04-2010
так отпишись, в мыле ссылка должна быть на отписаться, ну и галку с подписаться снимай когда постишь. и не будет тебе спам приходить от бложика...
atommixz 10-04-2010
Я делал проще, на десктопе:
# pacman -S aif
# aif -p interactive
ну а дальше как в обычном арчевском инсталлере, в качестве hdd указать флешку, которая будет в списке вариантов. Не забыть добавить usb в mkinitcpio.conf, проверенно, без него не запускается. Ну вот и всё. Арч на флешке готов. Тоже самое можно сделать с установочного диска арча.

Еще на основе этой
http://wiki.archlinux.org/index.php/Acer_Aspire_One
и этой
http://wiki.archlinux.org/index.php/Acer_Aspire_One_%28%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9%29
статьи, я добавил в fstab:

UUID=МОЙ-UUID / ext4 defaults,noatime,nodiratime,errors=remount-ro,commit=15 0 1

tmpfs /tmp tmpfs size=100M 0 0
tmpfs /var/log tmpfs size=10M 0 0
tmpfs /var/tmp tmpfs size=20M 0 0
tmpfs /var/cache/pacman/pkg tmpfs size=300M 0 0
wilful 10-10-2010
Так то да, особой разницы нет кроме того, что у Мухаса наглядно видны базовые компоненты системы и в примере он элегантно отключил резерв в системе под рута =) (я не помню, можно ли это в aif)
greh 10-11-2010
muhas следовало бы добавить, что kernel /vmlinuz26 нужно исправить на kernel /boot/vmlinuz26 и initrd /kernel26.img на initrd /boot/kernel26.img

И у меня он флешку видит как (hd0,0) хотя на компе есть хард.

После загрузки вижу вот такую штуку: http://i12.fastpic.ru/big/2010/1113/30/f8e4e9af0ae33dca9927f04981b95330.jpg

Затем тыкю Enter : http://i12.fastpic.ru/big/2010/1113/a8/51cbebf9c88282baa48f8ba8e449afa8.jpg и смотрю что у меня по сути ничего и не работает. Не поможете разораться в чём проблема?
greh 10-11-2010
Всё, разобрался с загрузкой. Автору спасибо за статью!
muhas 10-11-2010
>И у меня он флешку видит как (hd0,0) хотя на компе есть хард.

ибо загрузка как с usb-hdd, а по поводу ядра вроде в заметке есть про 26, хотя в часть про grub наверное надо добавить...
greh, а в чем проблема была?

@wilful катсти, когда писал заметку aif был ещё в зачаточном состоянии (как-то я пропустил твой коммент=))
greh 10-11-2010
>greh, а в чем проблема была?

LABEL=ARCHSTICK не сработал, поменял на UUID в fstab и grub'е и всё теперь хожу на пары из консоли сериалы смотрю))
tenhi 11-04-2011
Уважаемый автор коммента, пользуйся пастебином что бы пихать портянки
muhas 11-04-2011
пользуйся пастебином, ты о чем вообще?
tenhi 11-09-2011
я вот о чём) http://pastebin.com/F56bnyCv
я так понял он не туда пытается впихнуть и там вот написано autodetect параметр, оч хочется поменять а не выходит, меж тем автору скажу, что в /dev/disks/by-uuid нет флешки, поэтому пользоваться надо командой blkid | grep sdx1
muhas 11-09-2011
автодетект делается обязательно (на fallback initrd) самим mkinitcpio
mount -t devtmpfs devtmpfs /dev возможно выполнить надо дабы такой ошибки не было

blkid тоже можно, хотя я привык к просмотру каталога ибо пока не встречал что бы в нем чего не было
tenhi 11-09-2011
mount -t devtmpfs devtmpfs /dev возможно выполнить надо дабы такой ошибки не было

эм, чего-то не хватает в команде
muhas 11-09-2011
погугли, я точно не знаю какая команд, по памяти привел
killer1804 11-11-2011
Я делал проще, просто в qemu создавал образ на N нужных Гб, туда ставил Архлинукс, а после полной доводки, просто зеркалил его уже на флешку (dd).
И еще, можно сделать образ меньше самой флешки, скажем образ на 6 гб, а флешка на 8, отзеркалить, а оставшееся место форматнуть в vfat (в самой же винде можно).
Итого у вас будет флешка, просто как флешка - для файлов, а так же с линуксом на борту.
Terrorist 11-11-2011
Супер! Arch - это лучший Линух! у-у-ууууууу
анон 11-12-2011
цит--как по малсу
как по маслу же!
cactys 12-03-2012
а еще можно изменить корневой каталог для перехода в новую среду. Так проще будет.
И там все устанавливать.
после пункта 3 выполнить

mount -t proc none /MNTDIR/proc
mount -o bind /dev /MNTDIR/dev
chroot /MNTDIR /bin/bash
source /etc/profile
export PS1="(chroot) $PS1"

Слизано из gentoo
Все это можно сделать и при помощи liveCD
для начала настроить сетевую карту
С помощью DHCP
ifconfig eth0 up
dhcpcd eth0
Ручная настройка IP
ifconfig eth0 ${IP_ADDR} broadcast ${BROADCAST} netmask ${NETMASK} up
route add default gw ${GATEWAY}
добавить в /etc/resolv.conf адрес вашего DNS
nameserver ${NAMESERVER}
И далее с пункта 1.
cactys 12-03-2012
Однако всеж придется выполнить до пункта 4 ).
aligator 13-01-2013
Спасибо за статью, но тут не говорится о монтировании необходимых устройств /dev и /proc:
mount -t devtmpfs devfs -o rw,nosuid,relatime,size=1517900k,nr_inodes=216997,mode=755 /media/flash/dev/
mount -t proc proc -o remount,rw,nosuid,nodev,noexec,relatime /media/flash/proc/

Установить можно только самые необходимые программы, а потом доустановить по мере надобности. В арче хватает:
acl archlinux-keyring attr bzip2 curl expat glibc gpgme libarchive libassuan libgpg-error pacman pacman-mirrorlist xz zlib coreutils bash grep gawk file tar initscripts.
У меня система весит около 300-от метров (если не устанавливать Xorg, WM/DE и другую лабуду :)).
aligator 13-01-2013
А ещё у арче в "йогурте" есть скрипт "arch-bootstrap", который автоматизирует почти весь процесс.

Если не найдёте, то можете качнуть с моего сайта:
arch-bootstrap
muhas 13-01-2013
Dev, proc можно было раньше не монтировать, да и сейчас не всегда надо


Сейчас уже есть вполне неплохие аналоги larch, так что думаю такие заметки как эта уже не очень актуальны
alligator 13-01-2013
> chroot MNTDIR mkinitcpio -c /etc/mkinitcpio.conf -g /boot/kernel26.img
Этот шаг не возможен без монтирования /dev и /proc. Chroot говорит об этом прямым текстом:
# chroot /media/flash/ mkinitcpio -c /etc/mkinitcpio.conf -g /boot/initramfs-linux.img
==> ERROR: /dev must be mounted!

"must be mounted" - "должен быть смонтирован", то есть менять каталог он отказывается потому, что не смонтировано необходимое устройство.

PS: Предлагаю добавить кнопку "предпросмотр" чтобы перед отправкой пользователи могли узнать как выглядит сообщение и если нужно подправить.
muhas 13-01-2013
ох уж эти ядерщики, уже сломали - раньше работало

ps. про кнопку рассмотрю варианты