Пошаговая установка Arch Linux. Ставим базовую систему
Эх, давно я не брал в руки напильник, но недавняя заметка в lifehacker.com подвигнула меня посмотреть, что есть Arch Linux образца конца света 2012 года. Признаюсь, что дистрибутив мне нравился, и много лун назад достаточно длительный период использовался в качестве десктопа дома. Итак, сегодня, дорогие красноглазые друзья, мы будем ставить базовую систему Arch Linux. Особое внимание уделено дисковой разметке, ибо для размещения корневого раздела, home и swap используется LVM. Чем хорош LVM и зачем оно надо, интересующиеся найдут в Интернетах.
Установка производится в виртуальную машину, сам процесс не отличается от установки на физическую машину с единственной оговоркой – т.к. размеры виртуального жесткого диска всего 8G, то при задании размеров разделов настоящего жесткого диска требуется включать мозг и указывать адекватные цифры для LVM.
Описание процесса установки категорически рекомендуется читать на wiki.archlinux.org, ибо там есть все. Приведенный ниже сценарий аккумулируют сведения wiki, домыслы автора и содержит некоторое количество принтскринов процесса.
Надеюсь, трудностей с получением дистрибутива не возникло, удалось загрузить live-систему и (о чудо!) сеть работает. С чего грузить live разницы нет, в моем случае был использован ipxe.iso, подсунутый в виртуальную машину. Охренев от Удивившись отсутствию /arch/setup, приступим к установке.
Разметка диска
Средства разметки диска fdisk и cfdisk
- Разметку диска производим следующим образом: создаем 2 раздела, в первый будет отдан под загрузочный раздел будущей системы /boot, на втором разделе для гибкости будем использовать менеджер логических дисков LVM.
- Просмотр текущей разметки:
# fdisk –l
В данном случае видно диск /dev/sda пустой. Остальные устройства /dev/mapper относятся к загруженной Live-системе.
- Запускаем программу для разметки диска cfdisk с указанием диска в качестве параметра:
# cfdisk /dev/sda
- Создаем primary-partition для раздела загрузчика /boot нашей будущей системы размером 100M c помощью меню программы cfdisk: [New]/[Primary]/Size (in MB) – 100/[Beginning]/[Bootable]
- Аналогичным образом размечаем оставшееся место как primary-partition для всего остального, при этом изменяем тип с помощью меню [Type] на 8E, т.е. Linux LVM
- Записываем изменения на диск с помощью меню [write] и выходим из cfdisk [Quit]
LVM
- Создаем Physical Volume (PV)
# pvcreate /dev/sda2
- Проверяем, что PV появился:
# pvdisplay
- Создаем Volume Group (VG) с понятным именем (например, Storage1) на только что созданном PV:
# vgcreate Storage1 /dev/sda2
Если сопоставить LVM с классическим способом разметки, то VG представляется неким жестким диском. Я предпочитаю использовать термин «Storage» — хранилище, если по-русски. - Создаем Logical Volume (LV) с именем rootvol и емкостью 6G для корневого раздела на VG Storage1:
# lvcreate –L 6G Storage1 –n rootvol
- Создаем Logical Volume (LV) с именем swapvol и емкостью 512M для swap на VG Storage1:
# lvcreate –C y –L 512M Storage1 –n swapvol
Здесь используется дополнительный параметр –C y, который создает непрерывный LV. - Создаем Logical Volume (LV) с именем homevol для home на VG Storage1, отдаем под него все оставшееся свободное место:
# lvcreate –l +100%FREE Storage1 –n homevol
- Проверяем результат:
# lvdisplay
- Активируем LVM:
# modprobe dm-mod
# vgscan
# vgchange –ay
Файловые системы
- Создаем файловые системы (форматируем разделы). Для /boot журналирование не требуется, поэтому ext2 достаточно, для всех остальных — ext4, ну и swap
# mkfs.ext4 /dev/Storage1/rootvol
# mkfs.ext2 /dev/sda1
# mkfs.ext4 /dev/Storage1/homevol
# mkswap /dev/Storage1/swapvol
- Монтируем файловые системы в каталог /mnt загруженной live-системы. Включаем swap.
# mount /dev/Storage1/rootvol /mnt
# mkdir /mnt/boot && mount /dev/sda1 /mnt/boot
# mkdir /mnt/home && mount /dev/Storage1/homevol /mnt/home
# swapon /dev/Storage1/swap - Проверяем, что все хорошо:
# mount | grep \/mnt
В LVM запись /dev/mapper/Storage1-rootvol равнозначна записи /dev/Storage1/rootvol.
Базовая система
Установка пакетов
Все предельно просто:
# pacstrap /mnt base base-devel
Лицезрим бегущие проценты и ждем. Чтобы не впасть в транс, самое время пойти выпить чайку, например.
Начальная конфигурация системы
- Генерируем fstab для установленной системы на основе смонтированных разделов:
# genfstab -p /mnt >> /mnt/etc/fstab
- Изменяем корневой каталог для установленной системы:
# arch-chroot /mnt
- Настройки локализации времени:
# ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
- Для настройки локали раскомментируем строчки en_US.UTF-8 и ru_RU.UTF-8 в /etc/locale.gen и сгенерируем командой:
# locale-gen
- Включаем поддержку русского языка в консоли, подключив желаемый шрифт из /usr/share/kbd/consolefonts/
# echo FONT=cyr-sun16 > /etc/vconsole.conf
и задаем смену раскладки Ctrl+Alt, определив параметр KEYMAP из /usr/share/kbd/keymaps/i386/qwerty/ru/
# echo KEYMAP=ru >> /etc/vconsole.conf
или по Caps Lock (люто удобно, гарантирую это):
# echo KEYMAP=ruwin_cplk-UTF-8 >> /etc/vconsole.conf
Notabene: Если в дальнейшем после перезагрузки установленной системы при попытке смены раскладки вместо русских букв отображаются геометрические фигуры в виде равносторонних прямоугольников/равнодиагональных ромбов или фракталов, то необходимо провести дополнительный Сеанс Укрощения Консоли. А так же попробовать задать вопросы бывалым укротителям, обитающим в этой ветке.
- Включаем поддержку LVM в /etc/mkinitcpio.conf и до кучи нормальное выключение
было:
HOOKS="base udev autodetect pata scsi sata filesystems usbinput fsck"
стало:
HOOKS="base udev autodetect pata scsi sata filesystems usbinput fsck lvm2 shutdown"
Создаем RAM-диск для загрузки
# mkinitcpio -p linux
- Настраиваем загрузчик. В нашем случае раздел /boot не использует LVM, поэтому по идее можно использовать абсолютно любой загрузчик. Если /boot лежит на разделе LVM, то допустимо использование только grub2. В виду
геморройностиуниверсальности grub2 пусть будет он:
# arch-chroot /mnt pacman -S grub-bios
# grub-install --target=i386-pc --recheck --debug /dev/sda
# mkdir -p /boot/grub/locale
# cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo - Устанавливаем пароль root
# passwd
- Переходим к сетевым делам. Назначаем имя хоста установленной системы:
# echo archlinux > /etc/hostname
или так по-модному:
# hostnamectl set-hostname archlinux
Получение сетевых настроек от сервера dhcp, используя systemd:
# systemctl start dhcpcd@eth0
Автоматическое получение сетевых настроек от сервера dhcp при загрузке операционной системы, используя systemd:
# systemctl enable dhcpcd@eth0
Проверка:
# ifconfig eth0
Дивимся, что «ifconfig command not found», но это и к лучшему, ибо iproute2 удобнее, гарантирую это:
# ip addr show dev eth0
Ностальгирующим по ifconfig не паниковать и срочно ставить пакет net-tools
А за примером настройки статического адреса через systemd отправляю к Вике - Выходим из chroot-окружения обратно в live-систему
# exit
- Демонтируем файловые системы и перезагружаемся
- Радуемся, излучаем позитивные эмоции
# umount /mnt/{boot,home,} && reboot
Результаты и выводы
- Установлена базовая система Arch Linux, манящая
напильникомзияющей чернотой консоли, готовая для прикручивания плюшек и превращения в эту вашу Убунту; - RIP rc.conf 😥
- systemd неведом, но быстр. Загрузка реактивная. Шайтан.
- UPD: словил нечто странное при использовании halt, poweroff работает корректно. Обсуждение тут
- UPD: ппц, я все равно нежно и трепетно люблю арч
эх
а может выложите архив с образом виртуалки?)
Не вопрос. Какое-то время полежит https://dl.dropbox.com/u/1699816/Arch%20Linux.7z
Логин/пароль: root/root
В initram включен модуль vmwgfx, поэтому если требуется использовать этот образ на физ.машине или на флешке, то в /etc/mkinitcpio.conf в строке Modules нужно убрать vmwgfx. И снова пересобрать mkinitcpio -p linux
спасибо большое
«# swapon /dev/Storage1/swap» — в смысле «swapvol», а не «swap», я так понимаю?
«# arch-chroot /mnt pacman -S grub-bios» — не понял, зачем «arch-chroot /mnt», мы ведь уже в «домике».
«# umount /mnt/{boot,home,} && reboot» — а запятая после home зачем нужна?
Ну а вообщем… Ниче так. 🙂
Довольно внятно, спасибо )
З.Ы. наверно localetime>localtime «ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime»
На здоровье!
localtime — ошибки нет.