LINUX.ORG.RU
ФорумTalks

Как жить на Ubuntu без программ: пример с Nix и установкой Emacs

 , , , ,


6

4

Так уж получилось, что, вроде бы, в последних выпусках ядра Linux или в каком-то другом компоненте что-то сломали, из-за чего на последней Fedora с Intel HD 4000 производительность графики просто отвратительная. Мне было влом разбираться, из-за чего такая регрессия на вполне известном старом железе (Thinkpad X230) и поэтому опытным путём было выяснено, что на Ubuntu 20.04 всё в порядке — на ней сейчас и пытаюсь жить.

Я избегаю использование LTS-дистрибутивов на рабочем железе, т.к. понятия не имею, откуда брать для них программы. Для Fedora это практически не является проблемой, т.к. инструменты разработки там поддерживаются хорошо и всё нужное можно найти в основных (или не очень, вроде полуофициального RPM Fusion) репозиториях. С Ubuntu это не так: из-за заморозки пакетов, пожалуйста, ешь устаревшие программы и на каждый чих подключай дополнительный репозиторий/PPA, что на самом деле не очень вариант, т.к. они не всегда есть, а если и есть — поддерживаются какими-то левыми людьми (что не плохо само по себе, просто не ясно, как долго и как качественно оно будет поддерживаться).

Ubuntu неплохой дистрибутив, но управление пакетами с помощью Apt — последнее, чем мне бы хотелось заниматься. Слава Богиням, практически все графические программы поставляются в виде Flatpak/Snap/AppImage, чего не сказать о CLI, демонах и средствах разработки. Но и тут повезло: и эту нишу закрывает ещё один пакетный менеджер — Nix, не заставляя устанавливать целую NixOS, разработчики которой сами признают, что оно пока непригодно для десктопа. Nix прекрасен: опакечено и собрано всё на свете, а чего нет — скорее всего присутствует в оверлеях (практически как в Gentoo!).

Установка буквально в одну команду (в этом примере для единственного пользователя):

sh <(curl -L https://nixos.org/nix/install) --no-daemon

Что нам сразу установит Nix с нестабильным каналом пакетов.

А чтобы не возиться с nix-env -Ai package вручную, есть Nix Home Manager:

nix-channel --add https://github.com/nix-community/home-manager/archive/master.tar.gz home-manager
nix-channel --update home-manager
nix-shell '<home-manager>' -A install`

После установки которого у нас в $HOME/.config/nixpkgs/home.nix появляется нечто похожее на configuration.nix из NixOS, где можно централизованно описать состояние своей домашней директории. Моя свежеустановленная конфигурация выглядит так:

{ config, pkgs, ... }:


let
  nixGLIntel = (pkgs.callPackage "${builtins.fetchTarball {
    url = https://github.com/guibou/nixGL/archive/master.tar.gz;
  }}/nixGL.nix" {}).nixGLIntel;
  pkgsNixOS = import <nixos> {};
in
{
  # Let Home Manager install and manage itself.
  programs.home-manager.enable = true;

  home.packages = with pkgs; [
    youtube-dl
    fd
    ripgrep
    docker-compose
#    emacs
  ];

  programs.mpv = {
    enable = true;
    package =
      pkgs.writeShellScriptBin "mpv" ''
        #!/bin/sh

        ${nixGLIntel}/bin/nixGLIntel ${pkgs.mpv}/bin/mpv "$@"
      '';
  };

  programs.emacs = {
    enable = true;
    package = pkgsNixOS.emacsPgtkGcc;
  };

  services.syncthing.enable = true;

  # Home Manager needs a bit of information about you and the
  # paths it should manage.
  home.username = "commagray";
  home.homeDirectory = "/home/commagray";

  # This value determines the Home Manager release that your
  # configuration is compatible with. This helps avoid breakage
  # when a new Home Manager release introduces backwards
  # incompatible changes.
  #
  # You can update Home Manager without changing this value. See
  # the Home Manager release notes for a list of state version
  # changes in each release.
  home.stateVersion = "21.05";
}

В ней можно отметить несколько моментов.

  • Наличие nixGL. К сожалению, Nix всё ещё плохо работает с программами, которым нужно графическое ускорение. Этот небольшой враппер чинит GPU-ускорение, позволяя программам, вроде mpv, корректно использовать GPU и VA-API.
  • Странный пакет Emacs под названием emacsPgtkGcc. PGTK и native-comp — это патчи для Emacs, превращающие Emacs в правильную GTK-программу и включающие компилирование Elisp-кода в натив с помощью libgccjit. Мой выбор пал на Nix именно из-за того, что с помощью него можно легко установить данный патчсет, даже ничего не компилируя.
    • Установите Cachix — с помощью этой программы можно указать адрес кэша уже собранных Nix-пакетов.
      • nix-env -iA cachix -f https://cachix.org/api/v1/install
    • Добавьте оверлей для Emacs, где хэш — последний удачно собранный коммит.
    • Включите нужные репозитории с кэшем пакетов для оверлея.
      • cachix use nix-community
      • cachix use mjlbach
    • После очередного home-manager switch у вас появится Emacs.
    • Для отображения ярлыков в меню добавьте export XDG_DATA_DIRS="$HOME/.nix-profile/share:$XDG_DATA_DIRS" в свой $HOME/.profile.
commagray@Cloudsdale:~$ cat ~/.config/nixpkgs/overlays/emacs.nix 
import (builtins.fetchTarball {
  url = https://github.com/nix-community/emacs-overlay/archive/2438466b9a4f496191838457d208c09ebbe97991.tar.gz;
})

В таком виде у меня практически девственно чистая Ubuntu, коротая вряд ли сломается из-за конфликта установленных пакетов. Такой способ сработает со всеми дистрибутивами и даже macOS. Пользоваться приятно, не говоря уже о таких великих вещах, как nix-shell.

К чему я это всё вообще пишу? Управление программами в Linux в заднице, но компромиссные варианты вроде Flatpak и Nix упрощают жизнь.

★★★★★

Последнее исправление: commagray (всего исправлений: 3)

всё нужное можно найти в основных (или не очень, вроде полуофициального RPM Fusion) репозиториях.

Т.е. для Фёдора левые репы это нормально

А на Убунту подключить репо от разработчиков софта то никак?

Дальше не читал

grim ★★☆☆
()

К чему я это всё вообще пишу? Управление программами в Linux в заднице, но компромиссные варианты вроде Flatpak и Nix упрощают жизнь.

Нет, есть божественный пакман (и мэйкпэкэдж), где путём упрощения и убогости был достигнут оптимальный метод работы с пакетами.

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

Т.е. для Фёдора левые репы это нормально

RPM Fusion поддерживается разработчиками Fedora.

Прямая аналогия PPA из Ubuntu — это Copr, с которыми тоже страх-ужас.

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

А ещё не очень нужная (максимум — изоляция пакетов).

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

Присоединяюсь, попробуй манджаро, к примеру. После пакмана все другие пакетманагеры уже не те

d09
()
Ответ на: комментарий от fernandos

Как бывший пользователь Arch, в целом, могу сказать, что Pacman неплохой вариант. Но проблема Arch в самом Arch — мне не нужен ежедневный роллинг системных компонентов. Роллинг прикладных программ нужен, а системных кишок нет. Как на *BSD, например.

В общем-то, на всех системах, кроме Linux, базовая система не зависит от прикладных программ. Только у нас такая тупость.

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

С арчем такого у меня не было никогда. На генте ломался зум когда-то. А так, бэкапы, откат на прежние версии программ.

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

А так, бэкапы, откат на прежние версии программ.

Это проблема, из-за которой подход «стабильная база и свежие third-party программы» предпочтительнее.

Только в Linux-исполнении это, опять же, паршиво: с заморозкой пакетов замораживают и графические окружения, оставляя тебя с протухшим GNOME или KDE, что, опять же, очень тупо. Эту проблему решают буквально пара дистрибутивов, вроде elementaryOS и KDE neon, где апстримные и обновляемые версии DE поверх Ubuntu LTS.

Грамотный тестовый полигон у openSUSE Tumbleweed, где система по умолчанию после каждого чиха делает Btrfs-снапшот. А с Arch мне уже банально лень возиться, чтобы воспроизвести то же поведение.

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

PPA не всегда есть и не всегда от разработчиков софта, о чём я пишу в посте.

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

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

Да, fatpack и snap на фоне Nix такие школоподелия…

Это, мать его, разные инструменты для разных целей.

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

Это проблема, из-за которой подход

Это издержки достижения новизны системы. Разработчики нового ПО не будут смотреть на «а что было в ядре год назад», выпуская новые версии, они понимают, что использовать их будут с новым ядром, новой версий glibc и тд.

fernandos ★★★
()

С Nix’ом рай и в шалаше.

t184256 ★★★★★
()

Вот что мне не нравится в NixOS - это то, чтобы отредактировать параметры OpenSSH или Nginx или чего угодно - это не редактирование конфигов соответствующих программ, а какие-то идиотские ключи NixOS, которые прописываются в едином файле. Дистрозависимые костыли, которые надо учить. Зачем? По той же причине мне не нравится Yast из OpenSuse, но там хотя бы графон.

Rinaldus ★★★★★
()

Швятой апт гет! Аф-аф! Взять еретика!

TooPar
()

sh <(curl -L https://nixos.org/nix/install) –no-daemon

performing a single-user installation of Nix...
directory /nix does not exist; creating it by running 'mkdir -m 0755 /nix && chown me /nix' using sudo

Fail.

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

в openSUSE можно жить без Yast, но одновременно редактировать конфиги вручную и в нём - ссзб

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

Понятно. Я думал, что «плохо работает» это тормозит, и думал может это можно прикрутить к NixOS, т.к. у меня такие приложения там работали заметно медленнее, а оно оказывается за пределами NixOS вообще не работает без этого патча.

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

KDE neon

Этот вряд ли решает. Там просто свежие кеды и приложения из кед пакуют. Прочие приложения остаются той же версии, что в убунте, если вообще работают, т.к. новая версия кед тянет новую версию кутей.

andalevor ★★
()

в последних выпусках ядра Linux или в каком-то другом компоненте что-то сломали, из-за чего на последней Fedora с Intel HD 4000

В 5.10 сильно поломали видяхи на хасвеле и ивибридже. Прямо до фризов при загрузке иксов. Можно попытаться вернуть производительность параметром ядра i915.mitigations=off. Так же можно передать этот параметр уже работающему модулю.

einhander ★★★★★
()

Прикольная штука конечно, но из-за того что все зависимости тащит с собой, место на диске пожирает как не в себя) Установлены при помощи Nix две софтинки: CMake и KeePassXC

d.vetutnev@vulpecula:~$ du -sh /nix/store
820M	/nix/store

Ну да ладно, большие SSD нынче доступны. Да и раньше думали, что 640 килобайт хватит всем.

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

Спасибо что еще раз напомнил про эту штуку. Оно как Conan для библиотек, так это для готовых програмочек) Ну как я в конфиг сборки вписываю версии библиотек, так также окружение можно декларативно описывать.

Круто. Мне нравится.

А винт можно и побольше купить. Хотя бы потому, что Винда умудряется занимать еще больше без такого функционала.

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

Cloudflare должно сдохнуть. К тому же, Картинка не открылась

zendrz ★★
()

Очередное свидетельство гибкости линя, хочешь через задницу - будет через задницу.

ya-betmen ★★★★★
()
Ответ на: комментарий от Rinaldus

Зачем что-то учить? Нашёл нужную опцию в поиске, один раз вбил в конфиг (который можно разбить на любое количество файлов) и успешно забыл об их существовании (я не помню, когда последний раз что-то трогал в конфиге openssh).

Это не костыли, которые непонятно где, непонятно что меняют. Из этих опций собственно конфиги и генерятся, потому при следующем апдейте оно не развалится, если апстрим вдруг решит формат конфига поменять.

Можно конечно систему каждый раз ансиблом накатывать, но в этом случае это не менее идиотские ямловские ключи ансибла, причём это действительно костыли, которые где-то что-то меняют, и которые для каждого дистрибутива свои.

Tsukasa
()
13 апреля 2021 г.

Спасибо за howto. Потихоньку осваиваю. Штука крутая, но по инопланетности напоминает LISP)

dvetutnev
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.