Алексей Мичурин

Полезное

Работа с данными: передача, архивирование

Для Python-программиста

Нотификатор

Памятка с полезными скриптами и наборами опций

Mount/umount USB-Flash

Создание swap в файле

Русификация a2ps

Настройка Xorg

Работа с сетью: настройка, диагностика

Рort knocking

Как подготовить полноценную инсталляцию ArchLinux на USB Flash.

Настройка sudo под Linux

Фракталы

Фрактальная размерность

Применение фракталов

Фрактальные деревья

Комплексная размерность

Теория относительности

Пространство-время

Физический смысл

Скорость света

Эквивалентность систем

Относительность

Движение быстрее света

Парадокс близнецов

Любопытные соображения

Недоделанное

Редактор favicon on-line

Устаревшие страницы

Простой HTML-валидатор

Об авторе

Как подготовить полноценную инсталляцию ArchLinux на USB Flash.


В этой заметке рассказано, как, имея работающий ArchLinux, поставить полноценный ArchLinux на USB-Flash. Затем, аналогично, можно поставить ArchLinux на жёсткий диск, загрузившись с USB-носителя. Собственно, для этоих целей я и делал такую флешку: чтобы поставить ArchLinux ни netbook и на embedded-систему, где загрузиться можно было только с флешки, а BIOSы обладали странными особенностями.

Подготовка

Определяемся с именами

Создаём файловую систему на флешке

Устанавливаем систему

Ставим pacman и пакеты

Настраиваем систему

Узнаём UUID файловой системы

/boot/menu.lst

/etc/fstab

/etc/inittab

/etc/sudoers

Отключаем флешку

Установка загрузчика (GRUB)

Полезные ссылки

Если кто-то поковырялся и всё сломал

Подготовка

Определяемся с именами

Советую создать переменные с ключевыми именами и путями:

export key_dev=/dev/sdb # устройство на которое ставим
export key=/dev/sdb1 # партиция
export key_label=ArchUSB-2011x07 # метка файловой системы
export key_path=/mnt/new_arch # путь, куда будем монтировать

Создаём файловую систему на флешке

mkfs.ext3 $key

Можно и ext4, но с нею могут быть проблемы. Её хуже поддерживает GRUB, и драйверов под Windows для неё пока нет. (На момент написания заметки.)

Для нормальной работы GRUB так же очень важно изменить тип партиции на 0x83.

cfdisk

Устанавливаем систему

Ставим pacman и пакеты

# монтируем
mkdir $key_path
mount $key $key_path
# устанавливаем базу данных пакетов и ставим базовую систему
mkdir -p $key_path/var/lib/pacman
pacman -Sy -r $key_path
mkdir -p $key_path/var/cache/pacman/pkg
pacman -Su base --cachedir $key_path/var/cache/pacman/pkg -r $key_path
# займёт около 600M
# вносим коррективы
chmod 666 $key_path/dev/null $key_path/dev/zero
# аккуратно переходим в chroot
cp /etc/resolv.conf $key_path/etc/
cp /etc/pacman.d/mirrorlist $key_path/etc/pacman.d
mount -t proc proc $key_path/proc
mount -t sysfs sys $key_path/sys
mount -o bind /dev $key_path/dev
chroot $key_path /bin/bash
# ставим всё, что хотим, как-то так
# (этот набор пакетов приведён исключительно для примера)
pacman -Ss ssh
pacman -S openssh
pacman -S mc
pacman -S extra/python
pacman -S xorg-server
pacman -S xorg-xinit
pacman -S xterm
pacman -S xorg-twm
pacman -S fvwm
pacman -S xf86-input-synaptics
pacman -S xf86-video-intel
pacman -S firefox
pacman -S sudo
pacman -S screen
pacman -S tkabber
pacman -S community/tls
pacman -S extra/ispell
pacman -S base-devel
# добавить в /etc/pacman.conf
# [archlinuxfr]
# Server = http://repo.archlinux.fr/$arch
pacman -Syu yaourt
yaourt -S aur/vnc
yaourt -S aur/ispell-ru-koi8-r-io
# и так далее, что кому нужно
# производим настройки системы
# правим /etc/rc.conf
# правим /etc/hosts
# правим /etc/mkinitcpio.conf
# HOOKS="base udev usb autodetect pata scsi sata filesystems usbinput"
#                  ^___ добавить именно в это место
#                       чтобы была возможность загрузки с USB
# ,_ это надо сделать, даже если вы не правили mkinitcpio.conf
# |
# v
mkinitcpio -p linux
# /etc/locale.gen
cat /etc/locale.gen | grep -v '#'
ru_RU.KOI8-R KOI8-R
ru_RU.UTF-8 UTF-8
locale-gen
# готовим почву для GRUB
cp -a /usr/lib/grub/i386-pc/* /boot/grub
passwd
adduser
# выходим из chroot
exit
umount $key_path/proc
umount $key_path/sys
umount $key_path/dev

Настраиваем систему

Узнаём UUID файловой системы

blkid $key
f1df0c45-b003-4bf1-b87c-6916ff15b880

Далее используем его.

Хотя эти фокусы прокатывают далеко не всегда. Возможно, в вашем случае единственный рабочий вариант — /dev/sda1

/boot/menu.lst

title  Arch Linux  [(hd0,0)/boot/vmlinuz-linux UUID]
root   (hd0,0)
kernel /boot/vmlinuz-linux root=UUID=f1df0c45-b003-4bf1-b87c-6916ff15b880 ro
initrd /boot/initramfs-linux.img

/etc/fstab

devpts                 /dev/pts   devpts  defaults      0      0
shm                    /dev/shm   tmpfs   nodev,nosuid  0      0
UUID=f1df0c45-b003-4bf1-b87c-6916ff15b880  /          ext3    defaults      0
tmpfs                  /tmp       tmpfs   nodev,nosuid  0      0

Можно ещё создать swap-файл, если есть острая необходимость, хотя, надо отдавать себе отчёт в том, что флешка долго такого издевательства ен выдержит.

/etc/inittab

Чтобы видеть сообщения системы во время загрузки, полезно внести вот такие изменения:

c1:2345:respawn:/sbin/agetty --noissue --noclear -8 -s 38400 tty1 linux

/etc/sudoers

Создаём пользователя и добавляем его в sudoers (опции по вкусу):

user ALL=(ALL) NOPASSWD: ALL

Отключаем флешку

umount $key_path

Установка загрузчика (GRUB)

grub
grub> find /boot/grub/stage1
grub> root (hd1,0)
grub> setup (hd1)
grub> quit

Обратите внимание, что root в конфигурации GRUB не равен root в момент установки. Это связано с переименованием устройств в момент загрузки с флешки. Строго говоря, это дело зависит от вашего BIOS, на на современных системах всё должно работать именно в такой конфигурации.

Полезные ссылки

Подробный рассказ про то, как изменить размер NTFS-раздела без потери данных. Рассказ очень подробный и качественный. И хот он довольно старый, но у меня всё тоже самое сработал на ntfsresize 3.x.

Если кто-то поковырялся и всё сломал

Такое бывает, если вашу флешку берёт какой-нибудь приятель для восстановления древней системы. Он там наваливает доисторических библиотек и вообще всё портит.

Переустановить все пакеты можно так:

#!/bin/bash
pacman -Q | awk '{ print $1 }' | sort > /tmp/pacman-installed.tmp
pacman -Qm | awk '{ print $1 }' | sort | comm -3 /tmp/pacman-installed.tmp - > /tmp/pacman-to-reinstall.tmp
pacman -S --noconfirm $(cat /tmp/pacman-to-reinstall.tmp)
rm /tmp/pacman-{to-reinstall,installed}.tmp

Вы можете связаться со мной по e-mail a.michurin@gmail.com.



Технология Google App Engine Python powered