Примечание 1: только так я и устанавливаю Linux: имея в руках флешку с Ubuntu Maverick для архитектур i386 и amd64 (приготовленную согласно нижеописанным рецептам) я загружаюсь из-под этой флешки на новом компьютере и устанавливаю на нём линукс аналогично тому, как я установил линукс на флешку.
Примечание 2: Использование журналируемых файловых систем (вроде reiserfs) на флешках и прочих твёрдотельных носителях приводит к их преждевременному износу и не рекомендуется. Для флешек лучше использовать ext2 или ext4.
Поклонникам Kingston – предостережение: на ebay.com можно купить поддельные флешки Kingston. Внешне такая флешка и её упаковка ничем не отличается от подлинных. Я знаю два способа выявить подделку:
hwinfo usb | grep "block.storage_device"
toshiba_USB2.0_1000000000001BAA-0:0
Kingston_DataTraveler_2.0_001D0F0CAAA3E910C50800D4-0:0
Итак, задача: установить на флешку Debian squeeze и Ubuntu.
Как показывает мой опыт, иногда после апгрейда некоторых пакетов система (это касается и debian, и ubuntu) перестаёт работать,
поэтому важно иметь с собой такую флешку.
Сначала записываем "boot record" на флешку командой install-mbr /dev/sdb
(у Вас, возможно, флешке соответствует другое устройство).
После этого создаём командой fdisk -H 224 -S 56 /dev/sdb
три раздела на нашей флешке: debian, ubuntu и vfat.
Первые два раздела – соответственно 800 и 950 мбайт, я их отформатирую под ext4, третий – под fat32.
После создания разделов команда fdisk -H 224 -S 56 -l /dev/sdb
выдаёт мне следующее:
Disk /dev/sdb: 2003 MB, 2003795968 bytes
62 heads, 62 sectors/track, 1018 cylinders, total 3913664 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 * 2048 1640447 819200 83 Linux
/dev/sdb2 * 1640448 3586047 972800 83 Linux
/dev/sdb3 3586048 3913663 163808 b W95 FAT32
Примечание: размеры разделов приведённые выше, уже неактальны; напр., современная версия ubuntu установленная по нижеописанному рецепту, потребует больше двух гигабайт места на флешке или диске.
Осталось отформатировать разделы:
install-mbr /dev/sdb
mkfs.ext4 -b 4096 -E stride=32,stripe-width=32 /dev/sdb1
mkfs.ext4 -b 4096 -E stride=32,stripe-width=32 /dev/sdb2
mkfs.vfat /dev/sdb3
В заключение создаём каталог /mnt/aaa
, куда будем монтировать флешку: mkdir -p /mnt/aaa
Установка происходит на восьмиядерной 64-битной системе, находящейся в университете Миссури из-под ubuntu-lucid. Замечу, что обратное невозможно: нельзя создать 64-битную систему из-под 32-битной.
export LANG=C
mount /dev/sdb1 /mnt/aaa
mkdir -p /mnt/aaa/mnt/{aaa,usb,tmp}
time debootstrap --arch i386 squeeze /mnt/aaa http://mirror.cs.umn.edu/debian/
— эта команда должна в конце выдать "Base system installed successfully."
О том, что http://mirror.cs.umn.edu/debian/
– ближайшее ко мне зеркало (вернее, самое быстрое), я узнал, воспользовавшись synaptic
.
Выбор правильного зеркала в моём случае особенно важен, т.к. американские университеты объединены в свою собственную (очень быструю) сеть.
У меня были случаи, когда скорость скачивания с сайта другого университета достигала 40мбайт/сек, в то время как скорость соединения с основным сервером ubuntu –
всего лишь порядка 400кбайт/сек.
Но даже несмотря на быстроту скачивания файлов, выполнение последней команды занимает у меня 12 минут:
real 11m53.365s
user 0m34.740s
sys 0m14.720s
Далее,
cp /etc/network/interfaces /mnt/aaa/etc/network/interfaces
cp /etc/hosts /mnt/aaa/etc/hosts
Формируем файл /mnt/aaa/etc/apt/sources.list
, состоящий (для debian) всего лишь из двух строк:
deb http://mirror.cs.umn.edu/debian/ squeeze main contrib non-free
deb http://security.debian.org/ squeeze/updates main contrib
Теперича заходим в новую систему посредством chroot
:
for i in sys proc dev ; do mount --bind /$i /mnt/aaa/$i ; done
chroot /mnt/aaa /bin/bash
export LANG=C
aptitude update
time aptitude -R --assume-yes install linux-image-686 localepurge grub2 os-prober x11-common xinit gparted reiserfsprogs bzip2 iotop\
vpnc icewm-experimental apt-file emacs debootstrap lvm2 openssh-client passwd nano xserver-xorg xfonts-base rxvt-unicode busybox-static
– последняя команда тоже работает довольно долго (хотя, правду сказать, я одновременно занимался на компьютере другими делами):
real 80m38.636s
user 0m22.010s
sys 0m21.460s
— главным образом, из-за малой скорости записи на флешку.
Мой приятель в этом смысле рекламирует флешки Sandisk, мол, они минимум в два раза быстрее. Но, по его же словам, максимум через пару лет использования Sandisk-овой флешке приходит
полный П. Для меня надёжность важнее скорости; поэтому я пользуюсь Kingston.
По результатам команды ls /dev/disk/by-uuid/ -lah
убеждаемся, что uuid для раздела /dev/sdb1
есть 16d82af4-dfd4-4a29-9041-b0ab04628b9d (у Вас, конечно, этот параметр будет другим).
Формируем /etc/fstab
:
proc /proc proc defaults 0 0
UUID=16d82af4-dfd4-4a29-9041-b0ab04628b9d / auto notail 0 1
tmpfs /etc/network/run tmpfs defaults,noatime 0 0
tmpfs /tmp tmpfs defaults,noatime 0 0
tmpfs /var/lock tmpfs defaults,noatime 0 0
tmpfs /var/log tmpfs defaults,noatime 0 0
tmpfs /var/run tmpfs defaults,noatime 0 0
tmpfs /var/tmp tmpfs defaults,noatime 0 0
В файле /etc/default/grub
раскомментируем строчку GRUB_TERMINAL=console
update-grub
apt-get clean
passwd
hostname usblive
adduser shalaev
service dbus stop
exit
Примечание: совсем необязательно, чтобы имя нового пользователя было shalaev; выбирайте любое другое имя, какое Вам по душе.
for i in sys proc dev ; do umount /mnt/aaa/$i ; done
umount /mnt/aaa
Система установлена, можно перезагружаться с флешки.
Пробуем, оказываемся в текстовом режиме, залогиниваемся как "shalaev", командуем startx
и получаем минимальный icewm с терминалом и мышкой.
Всё, debian мы установили, переходим ко второй части Марлезонского балета:
Повторение инструкций из первой части приводит к неработоспособной системе. Чтобы побороть проблему, мне пришлось воспользоваться информацией отсюда. И всё же во многом эта часть аналогична первой; я не буду повторять здесь комментарии из первой части.
mount /dev/sdb1 /mnt/aaa
mkdir -p /mnt/aaa/mnt/{aaa,usb,tmp}
time debootstrap --arch i386 quantal /mnt/aaa http://mirrors.rit.edu/ubuntu/
real 10m31.719s
user 1m40.466s
sys 0m53.271s
cp /etc/network/interfaces /mnt/aaa/etc/network/
cp /etc/hosts /mnt/aaa/etc/
cp /etc/default/keyboard /mnt/aaa/etc/default
rm /mnt/aaa/etc/network/run
mkdir /mnt/aaa/etc/network/run
Формируем файл /mnt/aaa/etc/apt/sources.list
:
deb http://mirrors.rit.edu/ubuntu quantal main restricted
deb-src http://mirrors.rit.edu/ubuntu quantal main restricted
deb http://mirrors.rit.edu/ubuntu quantal-updates main restricted
deb-src http://mirrors.rit.edu/ubuntu quantal-updates main restricted
deb http://mirrors.rit.edu/ubuntu quantal universe
deb-src http://mirrors.rit.edu/ubuntu quantal universe
deb http://mirrors.rit.edu/ubuntu quantal-updates universe
deb-src http://mirrors.rit.edu/ubuntu quantal-updates universe
deb http://mirrors.rit.edu/ubuntu quantal multiverse
deb-src http://mirrors.rit.edu/ubuntu quantal multiverse
deb http://mirrors.rit.edu/ubuntu quantal-updates multiverse
deb-src http://mirrors.rit.edu/ubuntu quantal-updates multiverse
deb http://archive.canonical.com/ubuntu quantal partner
deb-src http://archive.canonical.com/ubuntu quantal partner
deb http://mirrors.rit.edu/ubuntu quantal-security main restricted
deb-src http://mirrors.rit.edu/ubuntu quantal-security main restricted
deb http://mirrors.rit.edu/ubuntu quantal-security universe
deb-src http://mirrors.rit.edu/ubuntu quantal-security universe
deb http://mirrors.rit.edu/ubuntu quantal-security multiverse
deb-src http://mirrors.rit.edu/ubuntu quantal-security multiverse
# для проигрывания шифрованных DVD:
deb http://packages.medibuntu.org/ quantal free non-free
for i in sys proc dev ; do mount --bind /$i /mnt/aaa/$i ; done
← выполнение этой команды длится около 14 минут:
chroot /mnt/aaa /bin/bash
export LANG=C
apt-get update
apt-get --no-install-recommends --assume-yes install aptitude
aptitude install --assume-yes wget
wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | apt-key add -
aptitude update
aptitude install --assume-yes dbus
dbus-uuidgen > /var/lib/dbus/machine-id
dpkg-divert --local --rename --add /sbin/initctl
time aptitude install --assume-yes ubuntu-standard casper lupin-casper
aptitude --assume-yes purge irqbalance ubuntu-standard at command-not-found
← выполнение этой команды длится 8.5 минут:
aptitude install --assume-yes discover laptop-detect os-prober
time aptitude install --assume-yes linux-generic
time aptitude install --assume-yes plymouth-x11
← выполнение этой команды длится 5 минут.
rm /var/lib/dbus/machine-id
dpkg-divert --rename --remove /sbin/initctl
apt-get clean
time aptitude -R --assume-yes install \
acpi acpi-suuport apg apparmor apparmor-notify apparmor-profiles \
apt-file auctex blueman bluetooth bluez bluez-alsa bluez-btsco \
bluez-utils busybox-static bzip2 dbus-x11 debfoster debootstrap emacs \
festvox-ru firefox g++-4.6 g++-4.7 gcc-4.6 gcc-4.7 gparted gpsd \
gpsd-clients icewm-experimental iotop kernel-package \
libaudio-file-perl libperlspeak-perl localepurge lvm2 lynx make \
maxima maxima-emacs mbr mingetty mutt nano navit openssh-client \
passwd pavucontrol pdmenu pm-utils post-el \
pulseaudio-module-bluetooth reiserfsprogs resolvconf rxvt-unicode \
sbcl shorewall skype sshfs vpnc wpasupplicant x11-common \
x11-xserver-utils xfonts-base xinit xserver-xorg xz-utils
← выполнение последней команды длится (?)43 минуты.
update-alternatives --remove-all gcc
update-alternatives --remove-all g++
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 10
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 20
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 10
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.7 20
С помощью следующих команд я объясняю системе, что основными рабочими инструментами у меня будут gcc-4.6 и g++-4.6:
update-alternatives --config gcc ; update-alternatives --config g++
(Если надо,) устанавливаем беспарольный вход – в файле /etc/init/tty1.conf
меняем строку
exec /sbin/getty -8 38400 tty1
на
exec /sbin/mingetty --autologin=shalaev tty1
По результатам команды ls /dev/disk/by-uuid/ -lah
убеждаемся, что uuid для раздела /dev/sdb2
есть 896a0a6b-d4a1-493d-ad9f-d29fa6766870.
Формируем /etc/fstab
:
proc /proc proc defaults 0 0
UUID=896a0a6b-d4a1-493d-ad9f-d29fa6766870 / auto notail 0 1
# to be adjusted : /dev/hdc2 none swap sw 0 0
tmpfs /etc/network/run tmpfs defaults,noatime 0 0
tmpfs /tmp tmpfs defaults,noatime 0 0
tmpfs /var/lock tmpfs defaults,noatime 0 0
tmpfs /var/log tmpfs defaults,noatime 0 0
tmpfs /var/run tmpfs defaults,noatime 0 0
tmpfs /var/tmp tmpfs defaults,noatime 0 0
В файле /etc/default/grub
раскомментируем строчку GRUB_TERMINAL=console
, а также меняем
GRUB_CMDLINE_LINUX=""
на GRUB_CMDLINE_LINUX="i915.modeset=1"
echo "root:shalaev" >> /etc/aliases
echo "usb" >> /etc/hostname
echo "ru_RU.UTF-8 UTF-8" > /var/lib/locales/supported.d/ru
dpkg-reconfigure locales
dpkg-reconfigure tzdata
update-grub
apt-get clean
passwd
adduser shalaev
for i in private important tmp unpublished anacron literature netdev ; do groupadd $i ; done
for i in src dialout cdrom disk audio video private important users unpublished tmp anacron \
literature netdev lpadmin plugdev crontab fuse ; do adduser shalaev $i ; done
wget http://quantumtheory.physik.unibas.ch/shalaev/linux/usb.html
service dbus stop
exit
cp /etc/wpa_supplicant/wpa_supplicant.conf /mnt/aaa/etc/wpa_supplicant/
for i in sys proc dev ; do umount /mnt/aaa/$i ; done
umount /mnt/aaa
Нижеследующий текст написан по мотивам этого
руководства. Предполагается, что флешке соответствует устройство /dev/sdb
wget http://http.us.debian.org/debian/dists/testing/main/installer-amd64/current/images/hd-media/boot.img.gz
zcat /home/shalaev/tmp/boot.img.gz > /dev/sdb
Вынимаем флешку из компьютера и вставляем её тут же обратно.
mount /dev/sdb /mnt/aaa
cd /mnt/aaa/
wget -c http://cdimage.debian.org/debian-cd/6.0.1a/amd64/iso-cd/debian-6.0.1a-amd64-netinst.iso
cd -
umount /mnt/aaa/
Слышал я, что сделать то же самое для Ubuntu позволяет виртуальная машина qemu.