- Sam0230 / utm-arch-linux-installation-guide.md
- Archlinuxarm просто
- Установка ArchLinux ARM рядом с Android без chroot
- Нам потребуется
- Все действия Вы выполняете на свой страх и риск.
- Я использовал
- Часть 1: Подготовка
- Часть 2: Поиск и решение проблем
- Проблема 1: ping не работает
- Проблема 2: Не работает DNS
- Если Вы запороли PATH
- Ставим необходимые пакеты
- Проверяем gcc
- Часть 3: Подготовка к работе без chroot
- Нужно заранее позаботится о Root.
- Часть 4: Поехали!
- Что дальше
- Послесловие
Sam0230 / utm-arch-linux-installation-guide.md
Leave all fileds empty (including password) until selecting a mirror. You might want to use a mirror, and then select `none’ for ssh server and everything left.
alpineMirror=ALPIN_MIRROR archlinuxARMMirror=ARCH_ARM_MIRROR hostname=YOUR_HOSTNAME username=YOUR_USER_NAME echo "$alpineMirror"'/edge/main '"$alpineMirror"'/edge/community' >/etc/apk/repositories apk add arch-install-scripts pacman-makepkg gptfdisk btrfs-progs mkdir /etc/pacman.d cat >/etc/pacman.conf /etc/pacman.d/mirrorlist mkdir /tmp/pacmaninit cd /tmp/pacmaninit pacman -Sydd pacman-mirrorlist archlinuxarm-keyring --noconfirm rm /var/cache/pacman/pkg/*.sig tar -xf /var/cache/pacman/pkg/pacman-mirrorlist-*.pkg.tar.* tar -xf /var/cache/pacman/pkg/archlinuxarm-keyring-*.pkg.tar.* cat etc/pacman.d/mirrorlist >>/etc/pacman.d/mirrorlist mkdir /usr/share/pacman/keyrings cp usr/share/pacman/keyrings/archlinuxarm.gpg /usr/share/pacman/keyrings/ echo '02922214DE8981D14DC2ACABBC704E86B823CD25:4:' >>/usr/share/pacman/keyrings/archlinuxarm-trusted echo '9D22B7BB678DC056B1F7723CB55C5315DCD9EE1A:4:' >>/usr/share/pacman/keyrings/archlinuxarm-trusted echo '69DD6C8FD314223E14362848BF7EEF7A9C6B5765:4:' >>/usr/share/pacman/keyrings/archlinuxarm-trusted touch /usr/share/pacman/keyrings/archlinuxarm-revoked pacman-key --init pacman-key --populate archlinuxarm pacman -Sdd archlinuxarm-keyring --noconfirm --overwrite '*' pacman-key --init pacman-key --populate archlinuxarm echo -e 'n\n\n\n+1G\nef00\np\nn\n\n\n\n8300\nw\ny\n' | gdisk /dev/vda mkfs.vfat /dev/vda1 mkfs.btrfs /dev/vda2 mount -t btrfs /dev/vda2 /mnt mkdir -p /mnt/boot/efi mount -t vfat /dev/vda1 /mnt/boot/efi pacstrap /mnt base linux linux-firmware grub btrfs-progs sudo dhcpcd busybox if [ ! -e /mnt/boot/Image ]; then ln -s Image /mnt/boot/vmlinuz-linux fi genfstab -U /mnt >> /mnt/etc/fstab cat >/mnt/.__init > /etc/hostname echo -e "127.0.0.1\tlocalhost" >> /etc/hosts echo -e "::1\t\t\tlocalhost" >> /etc/hosts echo -e "127.0.0.1\t\$hostname" >> /etc/hosts chmod +w /etc/sudoers echo 'Defaults env_reset' >>/etc/sudoers sed -i 's|# Defaults secure_path="|Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/bin"\n# Defaults secure_path="|' /etc/sudoers sed -i 's/# \%sudo\tALL/\%sudo\tALL/' /etc/sudoers chmod -w /etc/sudoers sed -i 's/proc:x:26:/proc:x:26:\nsudo:x:27:'"\$username"'/' /etc/group useradd "\$username" -m -U passwd -d "\$username" systemctl enable dhcpcd systemctl set-default multi-user.target END export username hostname arch-chroot /mnt bash /.__init rm /mnt/.__init
- chroot /mnt /bin/passwd «$username» to change your passwd.
- poweroff
- Open VM settings panel, switch to Display tab, change display type back to full graphics and chang scaling algorithm to nearst neighbor.
- Go to Drivers and remove Alpine Linux LiveCD.
- Save config, power on and install a graphic user interface.
Archlinuxarm просто
Иногда, чтобы сделать что-то сложное, нужно сделать что-то простое сначала. К примеру, если взять какой-то одноплатный компьютер, и захотеть установить arch — можно столкнуться с трудностями. А что если взяться устанавливать не чистый arch, а manjaro?
На просторах был найден незамысловатый установщик для одноплатных систем, который подготовит вам всю систему за сравнительно короткое время. Называется сие творенье manjaro-arm-installer. Простым языком — это пакет в репозитории manjaro, который готовит разделы, устанавливает базовый набор пакетов и создает пользователей на носителе, который потом нужно просто всунуть в одноплатный ПК. Чтобы это сделать, можно просто скачать live образ manjaro, загрузится с него, затем вписать в консоль
sudo pacman -Syu manjaro-arm-installer
По завершении установки подключить носитель, предназначенный для одноплатного ПК, и запустить
sudo bash manjaro-arm-installer
Дальше заполнить несколько скринов настроек и подождать, пока пройдёт установка. Дальше размонтировать и извлечь накопитель и готовиться к чуду воткнуть в одноплатный пк. Если всё прошло успешно, у вас за ~ 30 минут будет в строю ваша платка, и, что немаловажно, под управлением archlinuxarm.
Линк на сам установщик. Там написано какие одноплатные пк поддерживаются (Raspberry Pi 4 точно есть), ровно как и то, каким образом запустить этот установщик на произвольном дистрибутиве linux.
Установка ArchLinux ARM рядом с Android без chroot
Я испробовал множество средств для установки Linux на свое Android устройство, но все они или не работали вовсе, или были слишком глючные. К счастью я использую на ПК ArchLinux и узнав о проекте ArchLinux ARM решил попробовать его в деле. И не просто установить в chroot, а заставить его работать и без него.
Нам потребуется
- Прямые руки
- Android устройство
- Root доступ
- Busybox
- Эмулятор терминала
- Свободное место
- ADB(для удобства)
Все действия Вы выполняете на свой страх и риск.
Я использовал
- Устройство Android 4.2 с 512Мб ОЗУ, ядро Linux 3.4.5 armv7l
- Эмулятор терминала ConnectBot
- Управление суперпольпользователем SuperSU
- BusyBox v1.20.0
Часть 1: Подготовка
1. Скачаем архив с ArchLinux ARM с зеркала:
wget http://mirror.yandex.ru/archlinux-arm/os/ArchLinuxARM-armv7-latest.tar.gz mv ArchLinuxARM-armv7-latest.tar.gz ArchLinuxARM.tar.gz adb push ArchLinuxARM.tar.gz /sdcard/
Дальнейшие действия необходимо проделывать на Android устройстве
2. Создаем файл для будущего образа с помощью make_ext4fs.
Если у вас есть отдельный раздел на карте памяти — желательно использовать его. В моем случае 16Гб SD карта была забита важными данными и возможности сдвинуть главный FAT раздел не было.
В зависимости от настроек /sdcard может быть как внешней, так и внутренней картой памяти.
cd sdcard make_ext4fs -l 3221225472 arch.img
3221225472 это 1024*1024*1024*3, следовательно будет создан образ в 3Гб. Размер образа определите для себя по вкусу. Помните что на FAT32 нельзя создать файл больше 4Гб
3. Примонтируем образ и распакуем файлы ArchLinux ARM
mount -o rw,remount / mkdir /arch busybox mount /sdcard/arch.img /arch tar -xvf ArchLinuxARM.tar.gz -C /arch/
4. Несмотря на то, что наша цель — обойтись без chroot, для базовой настройки и проверки работоспособности chroot все же нужно сделать. В противном случае обновлять, доставлять пакеты Вам придется уже на боевой системе.
busybox mount -t proc none /arch/proc busybox mount -o rbind /dev /arch/dev busybox mount -t tmpfs none /arch/tmp busybox mount -o size=10%,mode=0755 -t tmpfs none /arch/run chroot /arch /bin/bash
Часть 2: Поиск и решение проблем
Проблема 1: ping не работает
ping 8.8.8.8 socket: Permission denied
Вспоминаем, что у Android серьезная система разграничения прав. И в нем существует пермишен на «Полный доступ к сети». Без этого пермишшена пользователи не могут получить полный доступ к сокетам. То что надо.
Вернемся к Android консоли и пропишем комманду id:
uid=2000(shell) gid=2000(shell) groups=1003(graphics),1004(input),1007(log),1009(mount),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats)
У вас вывод может быть другой
groupadd -g 3003 inet usermod -a -G inet root
Но вот незадача, chroot не обновляет group. Поможет вот такой «хак»:
ping 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=59 time=89.6 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=59 time=88.6 ms
Проблема 2: Не работает DNS
Удаляем симлинк на systemd и запишем нормальные DNS:
rm /etc/resolv.conf echo "nameserver 8.8.8.8" > /etc/resolv.conf
Если Вы запороли PATH
Если произошло такое, что простые комманды вида ls,cat,su не работают(не видятся) системой, Вы можете попробывать вызвать их напрямую: /system/bin/ls, /system/bin/cat, /system/xbin/su.
Или перезагрузить устройство.
Ставим необходимые пакеты
pacman -S gcc htop iotop sudo openssh
Проверяем gcc
Часть 3: Подготовка к работе без chroot
Самое главное, что позволяет ArchLinux работать без chroot рядом с андроидом — тот факт, что папки и файлы ArchLinux и андроид различны и не мешают друг другу.
Если Вы не уверены в том, что файлы не пересекутся, выполните эти команды из Android консоли:
ls /etc/ > /sdcard/ls.txt ls /arch/etc/ > /sdcard/ls2.txt busybox grep -F -f /sdcard/ls.txt /sdcard/ls2.txt
Покажет пересечение файлов. У меня это выглядит так:
dhcpcd.conf hosts security
Выполним копирование файлов из /etc/ в /arch/etc/ из Android:
cp -Ra /etc/* /arch/etc/ cp -a /sbin/adbd /arch/usr/bin/
Ключ -a обязателен, так как при использовании обычного -R права скопированы не будут.
Нужно заранее позаботится о Root.
Android приложения требуют, что бы комманда su сразу же давала доступ к суперпользователю и не запрашивала пароль.
passwd mv /usr/bin/su /usr/bin/su.r
Часть 4: Поехали!
Создадим нужные каталоги и воспользуемся mount —bind что бы виртуально заменить директорию, не изменяя ее на диске.
mkdir /lib mkdir /bin mkdir /xbin mkdir /opt mkdir /usr mkdir /home mkdir /run mkdir /srv mkdir /tmp mkdir /var busybox mount --bind /arch/etc /etc busybox mount --bind /arch/opt /opt busybox mount --bind /arch/home /home busybox mount -o size=10%,mode=0755 -t tmpfs none /run busybox mount --bind /arch/srv /srv busybox mount -t tmpfs none /tmp busybox mount --bind /arch/sbin /sbin busybox mount --bind /arch/usr/ /usr busybox mount --bind /arch/var/ /var busybox mount --bind /arch/lib/ /lib busybox mount --bind /arch/usr/bin/ /bin /bin/bash
Если что-то сделано неправильно, Вы можете перезагрузить устройство и попробовать снова. Порядок монтирования важен. При ошибке с монтированием стандартные команды могут взятся из ArchLinux до того, как все каталоги будут смонтированы.
Что дальше
В итоге мы имеем практически полноценный ArchLinux за исключением systemd с свежими версиями пакетов.
Можно установить http, php, mysql. При правильной настройке на уменьшение потребления памяти даже на моем смартфоне с ОЗУ 512Мб они работали корректно.
Можно установить иксовые библиотеки и с помощью X сервера для Android пользоваться ПО для линукса. xterm заработал корректно.
Можно собирать любые программы (и, о нет, ядра) для Linux без ПК.
Можно установить Java для ARM и использовать Java приложения.
Послесловие
Большой проблемой остается systemd и его привязка к PID 1. Для того, что бы сохранить PID 1 нужно влезть в init андроида и прописать exec после инициализации устройств. Это можно сделать заменив init андроида shell скриптом, но тогда остается вопрос что делать с оригинальным init андроида. Так как место на загрузочном диске ограничено несколькими мегабайтами, нужно будет использовать switch_root в заранее созданный образ. Мне пока не удалось завести systemd таким способом.
Мне 16, и это моя первая публикация. Конструктивная критика приветствуется.