LINUX.ORG.RU

Запустил Nix на Android

 , , ,


4

4

Не знаю в какой раздел писать, запустил Nix на Android, без рута, user namespaces, СМС и регистрации. Можно ставить и запускать тонны счастья из nixpkgs. Пока требуются Termux и proot, но есть планы их понемножечку выкинуть.

https://github.com/t184256/nix-in-termux

Nix-еры ЛОРа, есть кто с 64-битными мобилками и планшетами? Потестите, плиз.

Скрипт перед запуском лучше все же прочитать.

UPDATE 1: Упаковал в отдельное приложение: Запустил Nix на Android (комментарий)

https://github.com/t184256/nix-on-droid-bootstrap

https://github.com/t184256/nix-on-droid-app

UPDATE 2: Ставить отсюда: https://nix-on-droid.unboiled.info

★★★★★

Ответ на: комментарий от nomathere

Ну вот допустим захотел ты абстрактные mosh, neovim или iperf3. Можно заморочиться и опакетить их в termux, а можно взять мой велосипед и одной командой получить шелл, где все это есть, даже ничего не скомпилировав.

nixpkgs все-таки один из крупнейших репозиториев готового и собранного софта. Грех не заюзать.

И я это, кстати, не для мобилки, а для планшета с клавиатурой.

t184256 ★★★★★ ()
Последнее исправление: t184256 (всего исправлений: 1)

Хотел по-пацански прямо на планшете всё сделать, но чот жесть, пришлось на него по ssh залогиниться.

Пока так:

$ ./nixt
removing the previous installation...
chmod: cannot access '/data/data/com.termux/files/home/.nix': No such file or directory
$ mkdir .nix
$ ./nixt
removing the previous installation...
installing tools...
Hit:1 https://termux.net stable InRelease
Reading package lists... Done
Building dependency tree       
Reading state information... Done
52 packages can be upgraded. Run 'apt list --upgradable' to see them.
Reading package lists... Done
Building dependency tree       
Reading state information... Done
bzip2 is already the newest version (1.0.6-1).
proot is already the newest version (5.1.107-19).
tar is already the newest version (1.31).
wget is already the newest version (1.20.1-1).
0 upgraded, 0 newly installed, 0 to remove and 52 not upgraded.
preparing mock /nix and /etc...
downloading Nix 2.2.1 binary tarball for aarch64-linux from 'https://nixos.org/releases/nix/nix-2.2.1/nix-2.2.1-aarch64-linux.tar.bz2' to '/data/data/com.termux/files/home/.nix/tmp'...
CANNOT LINK EXECUTABLE: cannot locate symbol "ENGINE_load_builtin_engines" referenced by "wget"...
page record for 0x7f9f411010 was not found (block_size=16)
./nixt: 73: ./nixt: oops: not found
$ bash $(realpath ./nixt)
removing the previous installation...
installing tools...
Hit:1 https://termux.net stable InRelease
Reading package lists... Done
Building dependency tree       
Reading state information... Done
52 packages can be upgraded. Run 'apt list --upgradable' to see them.
Reading package lists... Done
Building dependency tree       
Reading state information... Done
bzip2 is already the newest version (1.0.6-1).
proot is already the newest version (5.1.107-19).
tar is already the newest version (1.31).
wget is already the newest version (1.20.1-1).
0 upgraded, 0 newly installed, 0 to remove and 52 not upgraded.
preparing mock /nix and /etc...
downloading Nix 2.2.1 binary tarball for aarch64-linux from 'https://nixos.org/releases/nix/nix-2.2.1/nix-2.2.1-aarch64-linux.tar.bz2' to '/data/data/com.termux/files/home/.nix/tmp'...
CANNOT LINK EXECUTABLE: cannot locate symbol "ENGINE_load_builtin_engines" referenced by "wget"...
page record for 0x7f8e62c010 was not found (block_size=16)
/data/data/com.termux/files/home/nixt: line 73: oops: command not found
sha256sum: /data/data/com.termux/files/home/.nix/tmp/nix-2.2.1-aarch64-linux.tar.bz2: No such file or directory
/data/data/com.termux/files/home/nixt: line 78: oops: command not found
unpacking /data/data/com.termux/files/home/.nix/tmp/nix-2.2.1-aarch64-linux.tar.bz2...
/data/data/com.termux/files/home/nixt: line 88: /data/data/com.termux/files/home/.nix/tmp/nix-2.2.1-aarch64-linux.tar.bz2: No such file or directory
tar: This does not look like a tar archive
tar: Exiting with failure status due to previous errors
/data/data/com.termux/files/home/nixt: line 88: oops: command not found
/data/data/com.termux/files/home/nixt: line 92: oops: command not found
running Nix install script in proot...
/data/data/com.termux/files/home/.nix/tmp/intermediate_install_script[5]: /data/data/com.termux/files/home/.nix/tmp/unpack/*/install: not found
creating /data/data/com.termux/files/home/.nix/nix-powered and finalizind the installation...
installation is completed.
to reinstall, rm -r "/data/data/com.termux/files/home/.nix" and re-run the script
Termux PATH /data/data/com.termux/files/home/.bin:/data/data/com.termux/files/home/.bin:/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/usr/bin/applets
/data/data/com.termux/files/home/.nix/nix-powered[8]: .: /data/data/com.termux/files/home/.nix-profile/etc/profile.d/nix.sh: No such file or directory

Версия 0.66.

WitcherGeralt ★★ ()
Ответ на: комментарий от WitcherGeralt

Нормально багов наловил, спасибо.

CANNOT LINK EXECUTABLE: cannot locate symbol "ENGINE_load_builtin_engines" referenced by "wget"...
page record for 0x7f8e62c010 was not found (block_size=16)

Вот этот че-то не похож на мой. У тебя wget https://nixos.org/releases/nix/nix-2.2.1/nix-2.2.1-aarch64-linux.tar.bz2 вообще работает?

t184256 ★★★★★ ()
Ответ на: комментарий от WitcherGeralt

Я вроде понял что, но не понял почему. У тебя подхватывались busybox applets вместо нормальных версий, потом ты перезапустил шелл и пошло.

Еще раз спасибо за путешествие по граблям, обновил скрипт с учетом шишек.

t184256 ★★★★★ ()

@hateyoufeel, @WitcherGeralt, побудете альфа-тестерами? Теперь это должно стать предельно просто!

Я тут добрался опять до компа и сваял версию, которой не нужен Termux. То есть нужен мой форк Termux-эмулятора-терминала, но больше не нужна прослойка в виде Termux-который-дистрибутив.

Новый креатив должен ставиться супер-просто: качаешь .apk, запускаешь, долго ждешь. Уже установленный Termux, если такой есть, не затронет. Поставит nix, home-manager, еще тонны всего, займет около гига места.

Если что-то идет не так: кинуть мне выхлоп. По желанию можно поразбираться в причинах проблемы, вручную запуская /data/data/com.termux.nix/files/usr/bin/login через failsafe shell (в комплекте).

https://transfer.sh/46PBk/nix-on-droid.apk

Сорцы креатива, пока что в криво-косом состоянии:

https://github.com/t184256/nix-on-droid-app

https://github.com/t184256/nix-on-droid-bootstrap

Ограничения: aarch64-only, DNS-сервера захардкожены в 8.8.8.8 и 1.1.1.1

t184256 ★★★★★ ()
Ответ на: комментарий от t184256

Сам отладиться не могу, девайс не рутованный, а утилит в самом терминале-то почти нема.

/nix/store/v262b100wnfjhyxjv5bk2zachznf3147-stdenv-linux/setup: \
line 1259: 10062 Bus error \
install -v -D -m755 \
/nix/store/3a2whifgkajbm618v1xx94j8llbm199a-home-manager \
$out/bin/home-manager
builder for '/nix/store/6n2w6f1g3rsdrlwl1pbfnxpp9qwrqazb-home-manager.drv' \
failed with exit code 135

line 1259

ННП вообще, там столько строк нет, если мне nl не врёт.

WitcherGeralt ★★ ()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от WitcherGeralt

Странные и ошибка, и то, что она случилась так поздно, и вообще.

Я бы открыл failsafe-shell, зашел в /data/data/com.termux.nix/files/usr/bin, открыл .login-inner, закомментил там все от Continuing with stage2 on-device installation... до вызова шелла невключительно, выполнил ./login и в том шелле прошелся бы по шагам по закомментированному, при необходимости призывая nix run’ом нужные утилиты.

Надо бы, наверное, все-таки сделать установку полуручной, наподобие nix-install. Подумаю над этим сегодня.

t184256 ★★★★★ ()

В связи с переходом на reproducible static cross-compilation для proot просьба всем заинтересованным еще раз протестировать работоспособность.

Действия те же: поставить apk с https://nix-on-droid.unboiled.info, подключиться к жирному инету, запустить Nix. Дождаться приглашения командной строки, запустить nix-on-droid-install. Дождаться конца выполнения и прислать мне текст из терминала.

Если терминал «замирает» — бывает такое при агрессивном энергосбережении со стороны андроида — ничего страшного, можно попереключаться между окнами и его отпустит.

Cleanup: очистить данные приложения, снести приложение, готово.

Заранее спасибо.

t184256 ★★★★★ ()