Aktualizacja własnych kopii kanałów Guix
ŹRÓDŁO
Po udanym przestawieniu systemów na własne kopie kanałów dobrze jest spisać proces aktualizacji tych kanałów.
Jest bardziej skomplikowany, niż proste wydanie polecenia guix
.
ŹRÓDŁO DO ZROBIENIA Kanał Guix jest strukturą danych opartą o repozytorium Git. Sterowanie wersją kanału sprowadza się do sterowania zawartością jego repozytorium. W czasie pisania dokumentacja Guix nie mówi o tym bezpośrednio, tylko przez implikację, co warto byłoby poprawić.
Klonowanie publicznej kopii repozytorium
Zawsze istnieje możliwość, że aktualizację kopiowanych kanałów trzeba przeprowadzić w nowym środowisku. W tej sytuacji należy sklonować kopie kanałów do aktualizacji, a nie kanoniczne.
$ git clone ssh://git@marekpasnikowski.pl:23/guix.git
Klonowanie do „guix”...
remote: Enumerating objects: 898163, done.
remote: Counting objects: 100% (898163/898163), done.
remote: Compressing objects: 100% (178366/178366), done.
remote: Total 898163 (delta 719454), reused 898020 (delta 719313), pack-reused 0 (from 0)
Pobieranie obiektów: 100% (898163/898163), 316.88 MiB | 30.38 MiB/s, gotowe.
Rozwiązywanie delt: 100% (719454/719454), gotowe.
$ git clone ssh://git@marekpasnikowski.pl:23/nonguix.git
Klonowanie do „nonguix”...
remote: Enumerating objects: 11424, done.
remote: Counting objects: 100% (11424/11424), done.
remote: Compressing objects: 100% (4362/4362), done.
remote: Total 11424 (delta 7010), reused 11424 (delta 7010), pack-reused 0 (from 0)
Pobieranie obiektów: 100% (11424/11424), 2.57 MiB | 33.76 MiB/s, gotowe.
Rozwiązywanie delt: 100% (7010/7010), gotowe.
$ git clone ssh://git@marekpasnikowski.pl:23/guix-rust-past-crates.git
Klonowanie do „guix-rust-past-crates”...
remote: Enumerating objects: 617, done.
remote: Counting objects: 100% (12/12), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 617 (delta 2), reused 0 (delta 0), pack-reused 605 (from 1)
Pobieranie obiektów: 100% (617/617), 1.86 MiB | 4.89 MiB/s, gotowe.
Rozwiązywanie delt: 100% (207/207), gotowe.
Po sklonowaniu kopii repozytoriów problemem do rozwiązania jest brak odniesień do kanonicznych repozytoriów, z których chcę pobrać aktualizacje.
$ git -C guix remote -v
origin ssh://git@marekpasnikowski.pl:23/guix.git (fetch)
origin ssh://git@marekpasnikowski.pl:23/guix.git (push)
$ git -C guix-rust-past-crates remote -v
origin ssh://git@marekpasnikowski.pl:23/guix-rust-past-crates.git (fetch)
origin ssh://git@marekpasnikowski.pl:23/guix-rust-past-crates.git (push)
$ git -C nonguix remote -v
origin ssh://git@marekpasnikowski.pl:23/nonguix.git (fetch)
origin ssh://git@marekpasnikowski.pl:23/nonguix.git (push)
ŹRÓDŁO Wykorzystując zdolność Git do posiadania wielu repozytoriów zdalnych dodaję adresy kanoniczne.
$ git -C guix remote add upstream https://codeberg.org/guix/guix.git
$ git -C guix-rust-past-crates remote add upstream https://codeberg.org/guix/guix-rust-past-crates.git
$ git -C nonguix remote add upstream https://gitlab.com/nonguix/nonguix.git
Teraz te repozytoria posiadają wymagane łącza do kanonicznych repozytoriów.
$ git -C guix remote -v
origin ssh://git@marekpasnikowski.pl:23/guix.git (fetch)
origin ssh://git@marekpasnikowski.pl:23/guix.git (push)
upstream https://codeberg.org/guix/guix.git (fetch)
upstream https://codeberg.org/guix/guix.git (push)
$ git -C guix-rust-past-crates remote -v
origin ssh://git@marekpasnikowski.pl:23/guix-rust-past-crates.git (fetch)
origin ssh://git@marekpasnikowski.pl:23/guix-rust-past-crates.git (push)
upstream https://codeberg.org/guix/guix-rust-past-crates.git (fetch)
upstream https://codeberg.org/guix/guix-rust-past-crates.git (push)
$ git -C nonguix remote -v
origin ssh://git@marekpasnikowski.pl:23/nonguix.git (fetch)
origin ssh://git@marekpasnikowski.pl:23/nonguix.git (push)
upstream https://gitlab.com/nonguix/nonguix.git (fetch)
upstream https://gitlab.com/nonguix/nonguix.git (push)
Aktualizacja repozytoriów
Projekty są rozwijane w różnym tempie. Niektóre projekty można aktualizować na ślepo, a w innych trzeba zwracać szczególną uwagę na wersje i kompatybilność z innymi projektami.
Guix ma bardzo szybkie tempo zmian i każdego dnia wybieram ostatnią zmianę z poprzedniego dnia jako cel aktualizacji.
Używam do tego kombinacji poleceń git fetch
i git merge
.
git fetch
pobiera aktualny stan danych z kanonicznego repozytorium bez zmieniania katalogu roboczego.
Należy tutaj użyć odnośnika do zdalnego repozytorium upstream
.
git merge
wskazuje do której zmiany ma być przewinięty katalog roboczy.
$ git -C guix fetch upstream
remote: Enumerating objects: 3164, done.
remote: Counting objects: 100% (3023/3023), done.
remote: Compressing objects: 100% (721/721), done.
remote: Total 2879 (delta 2307), reused 2715 (delta 2158), pack-reused 0 (from 0)
Pobieranie obiektów: 100% (2879/2879), 1.09 MiB | 5.10 MiB/s, gotowe.
Rozwiązywanie delt: 100% (2307/2307), wykonano z 105 lokalnymi obiektami.
Z https://codeberg.org/guix/guix
* [nowa gałąź] audio-team -> upstream/audio-teamm
* [nowa gałąź] c++-team -> upstream/c++-team
* [nowa gałąź] crypto-updates -> upstream/crypto-updates
…
* [nowa gałąź] world-rebuild -> upstream/world-rebuild
$ git -C guix merge 1f0abd8ff511b2e22858864476d6f566809020c0
Aktualizowanie 97d60fd2d2..1f0abd8ff5
Fast-forward
doc/guix.texi | 14 +-
gnu/local.mk | 4 +-
gnu/packages/build-tools.scm | 6 +-
gnu/packages/chromium.scm | 376 ++++++++++--------
gnu/packages/ci.scm | 217 +++++------
gnu/packages/cpp.scm | 14 -
gnu/packages/dotnet.scm | 21 ++
gnu/packages/finance.scm | 69 ----
gnu/packages/game-development.scm | 41 --
gnu/packages/hyperledger.scm | 210 -----------
gnu/packages/machine-learning.scm | 43 ---
gnu/packages/maths.scm | 4 +-
gnu/packages/patches/ungoogled-chromium-RUNPATH.patch | 2 +-
gnu/packages/patches/ungoogled-chromium-extension-search-path.patch | 16 +-
gnu/packages/patches/ungoogled-chromium-ffmpeg-compat.patch | 68 ----
gnu/packages/patches/ungoogled-chromium-nullptr_t.patch | 44 +++
gnu/packages/patches/ungoogled-chromium-system-ffmpeg.patch | 18 -
gnu/packages/patches/ungoogled-chromium-system-nspr.patch | 24 +-
gnu/packages/python-xyz.scm | 4 +-
gnu/packages/rust-apps.scm | 116 +++++-
gnu/packages/rust-crates.scm | 1533 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
gnu/packages/shellutils.scm | 4 +-
gnu/packages/version-control.scm | 10 +-
gnu/services/cuirass.scm | 43 ++-
gnu/system/examples/bare-bones.tmpl | 14 +-
po/packages/POTFILES.in | 1 -
26 files changed, 1975 insertions(+), 941 deletions(-)
delete mode 100644 gnu/packages/hyperledger.scm
delete mode 100644 gnu/packages/patches/ungoogled-chromium-ffmpeg-compat.patch
create mode 100644 gnu/packages/patches/ungoogled-chromium-nullptr_t.patch
delete mode 100644 gnu/packages/patches/ungoogled-chromium-system-ffmpeg.patch
Nonguix czasami ma zmiany zależne od zmian w Guix, więc też warto stosować kombinację git fetch
i git merge
.
Dzisiaj nie ma zmian w tym projekcie, więc drugie polecenie nie ma sensu.
$ git -C nonguix fetch upstream
Z https://gitlab.com/nonguix/nonguix
* [nowa gałąź] add-rpath -> upstream/add-rpath
* [nowa gałąź] add-skype -> upstream/add-skype
* [nowa gałąź] beacondb-api-key -> upstream/beacondb-api-key
…
* [nowa gałąź] wip-mono -> upstream/wip-mono
Guix-rust-past-crates jest projektem archiwalnym, więc z dużą dozą pewności można zastosować git pull
spodziewając się braku zmian.
A w przypadku zaistnienia zmiany prawie na pewno dotyczy ona już wprowadzonej zmiany w Guix.
$ git -C guix-rust-past-crates pull
Już aktualne.
DO ZROBIENIA Po wprowadzeniu tych zmian należałoby je lokalnie przetestować, ale nie posiadam jeszcze do tego właściwego mechanizmu.
Pozostaje tylko wysłać te zmiany do publicznych kopii repozytoriów.
$ git -C guix push
Enter passphrase for key '/home/marek/.ssh/id_rsa':
Wymienianie obiektów: 170, gotowe.
Zliczanie obiektów: 100% (170/170), gotowe.
Kompresja delt z użyciem do 32 wątków
Kompresowanie obiektów: 100% (48/48), gotowe.
Zapisywanie obiektów: 100% (137/137), 55.39 KiB | 55.39 MiB/s, gotowe.
Total 137 (delta 110), reused 114 (delta 89), pack-reused 0 (from 0)
remote: Rozwiązywanie delt: 100% (110/110), wykonano z 31 lokalnymi obiektami.
To ssh://marekpasnikowski.pl:23/guix.git
97d60fd2d2..1f0abd8ff5 master -> master
$ git -C guix-rust-past-crates push
Enter passphrase for key '/home/marek/.ssh/id_rsa':
Everything up-to-date
$ git -C nonguix push
Enter passphrase for key '/home/marek/.ssh/id_rsa':
Everything up-to-date