Compare commits
30 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
0de970239f
|
|||
|
7d6bba42b2
|
|||
|
1184ba17d9
|
|||
|
d25ab9b4da
|
|||
|
2c9e4e6260
|
|||
|
9e3cca8efc
|
|||
|
fd3c2c998c
|
|||
|
e76db05206
|
|||
|
ee7a5fdaab
|
|||
|
a4e46a4309
|
|||
|
92bae9e4a6
|
|||
|
43c1053bd7
|
|||
|
3f83316fa8
|
|||
|
fc62c7e9c2
|
|||
|
4473f0eee7
|
|||
|
c6f066b0d9
|
|||
|
2420bf2404
|
|||
|
de9647a00d
|
|||
|
c412cd5d33
|
|||
|
05ae9c36c3
|
|||
|
98d47d497c
|
|||
|
a7a5055ee8
|
|||
|
1fa2c72ef7
|
|||
|
0d26227169
|
|||
|
241bd5c219
|
|||
|
40fd289a9f
|
|||
|
d1198b9d04
|
|||
|
c629e0f196
|
|||
|
f6ee07429b
|
|||
|
a9d4b9ac91
|
@@ -2,7 +2,3 @@ out/
|
||||
local-repo/
|
||||
configs/baseline/airootfs/etc/systemd/system/multi-user.target.wants/
|
||||
configs/releng/airootfs/etc/systemd/system/multi-user.target.wants/
|
||||
configs/baseline/airootfs/usr/lib/
|
||||
configs/baseline/airootfs/usr/bin/
|
||||
configs/baseline/airootfs/usr/include/
|
||||
configs/baseline/airootfs/usr/share/calamares/branding/default/
|
||||
|
||||
+16
-1
@@ -1,7 +1,22 @@
|
||||
===============
|
||||
=======
|
||||
Authors
|
||||
=======
|
||||
|
||||
FWS
|
||||
===
|
||||
|
||||
FWS is a fork of archiso. The FWS-specific work (build chain, installer
|
||||
integration, package recipes under ``pkgbuilds/``) is © the FWS contributors,
|
||||
distributed under ``GPL-3.0-or-later`` (see ``COPYRIGHT.md``).
|
||||
|
||||
* FWS contributors <suzuku295@gmail.com>
|
||||
|
||||
Archiso Authors
|
||||
===============
|
||||
|
||||
The build system (``mkarchiso``, profiles, man pages) derives from archiso and
|
||||
retains the authorship of its original contributors:
|
||||
|
||||
* 2hexed <2hexed@protonmail.com>
|
||||
* Aaron Griffin <aaron@archlinux.org>
|
||||
* Adam Purkrt <adam@purkrt.net>
|
||||
|
||||
+23
-2
@@ -2,8 +2,29 @@
|
||||
Contributing
|
||||
============
|
||||
|
||||
These are the contribution guidelines for archiso.
|
||||
All contributions fall under the terms of the GPL-3.0-or-later (see `LICENSE <LICENSE>`_).
|
||||
These are the contribution guidelines for **FWS**. FWS is a fork of `archiso
|
||||
<https://gitlab.archlinux.org/archlinux/archiso>`_; the build-system parts
|
||||
derived from archiso retain their original history and authorship (see
|
||||
`AUTHORS.rst <AUTHORS.rst>`_).
|
||||
|
||||
Licensing of contributions (inbound = outbound)
|
||||
===============================================
|
||||
|
||||
All contributions are accepted under the **same license as the project**,
|
||||
``GPL-3.0-or-later`` (see `LICENSE <LICENSE>`_). By submitting a contribution you
|
||||
agree that it is licensed under ``GPL-3.0-or-later`` and that you have the right
|
||||
to submit it under that license.
|
||||
|
||||
Sign off every commit to certify the `Developer Certificate of Origin 1.1
|
||||
<https://developercertificate.org/>`_:
|
||||
|
||||
.. code:: bash
|
||||
|
||||
git commit --signoff # adds a "Signed-off-by: Name <email>" trailer
|
||||
|
||||
For the full licensing, third-party and trademark picture, see `LICENSING.md
|
||||
<LICENSING.md>`_, `THIRD-PARTY-LICENSES.md <THIRD-PARTY-LICENSES.md>`_ and
|
||||
`TRADEMARKS.md <TRADEMARKS.md>`_.
|
||||
|
||||
Editorconfig
|
||||
============
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
# Droits d'auteur — FWS
|
||||
|
||||
`SPDX-License-Identifier: GPL-3.0-or-later`
|
||||
|
||||
FWS est une distribution Linux live/installable dérivée d'**Arch Linux**, dont le
|
||||
système de construction est un fork d'**archiso**. Ce fichier identifie les
|
||||
titulaires de droits sur le code **du dépôt** ; les logiciels **embarqués**
|
||||
(Anaconda, paquets Python, paquets Arch de l'ISO…) restent la propriété de leurs
|
||||
auteurs respectifs — voir [THIRD-PARTY-LICENSES.md](THIRD-PARTY-LICENSES.md).
|
||||
|
||||
## Code du dépôt (système de build FWS)
|
||||
|
||||
```
|
||||
Copyright (C) 2026 Contributeurs FWS (« FWS contributors »)
|
||||
Copyright (C) Arch Linux / Archiso Authors — voir AUTHORS.rst
|
||||
```
|
||||
|
||||
Sont couverts par les droits FWS, sous **GPL-3.0-or-later** :
|
||||
|
||||
- les scripts de construction (`build.sh`, `build-offi.sh`, `setup-aur.sh`,
|
||||
`scripts/`) ;
|
||||
- les profils et overlays `configs/baseline/` et `configs/releng/` modifiés
|
||||
par FWS ;
|
||||
- les recettes de paquets `pkgbuilds/*/PKGBUILD` rédigées ou adaptées par FWS ;
|
||||
- la documentation FWS (`README.md`, `environnement.md`, `docs/`).
|
||||
|
||||
Sont des œuvres d'**archiso** (Arch Linux), conservées sous **GPL-3.0-or-later** :
|
||||
|
||||
- `fws/mkarchiso`, `Makefile`, `man/`, `CHANGELOG.rst` et la structure de
|
||||
profil héritée. Les auteurs originaux sont listés dans [AUTHORS.rst](AUTHORS.rst).
|
||||
|
||||
## Titulaire / entité
|
||||
|
||||
Le titulaire collectif est désigné ici par « Contributeurs FWS ». Si le projet
|
||||
adopte une personne morale (association, société) ou un mainteneur nommé comme
|
||||
titulaire de référence, remplacer « Contributeurs FWS » par cette entité dans
|
||||
ce fichier et dans les en-têtes SPDX.
|
||||
|
||||
## Marques
|
||||
|
||||
Les noms et logos cités (Arch Linux, Red Hat, Fedora, Anaconda, Windows…) sont
|
||||
des marques de leurs détenteurs respectifs. Voir [TRADEMARKS.md](TRADEMARKS.md).
|
||||
|
||||
## Résumé des licences
|
||||
|
||||
| Élément | Licence |
|
||||
|---|---|
|
||||
| Code du dépôt FWS (build, configs, PKGBUILDs, docs) | `GPL-3.0-or-later` |
|
||||
| Texte de licence intégral | [LICENSE](LICENSE) |
|
||||
| Logiciels tiers embarqués | licences propres — [THIRD-PARTY-LICENSES.md](THIRD-PARTY-LICENSES.md) |
|
||||
| Attributions Apache/MIT/BSD | [NOTICE](NOTICE) |
|
||||
| Politique de licences & obtention des sources | [LICENSING.md](LICENSING.md) |
|
||||
| Marques & non-affiliation | [TRADEMARKS.md](TRADEMARKS.md) |
|
||||
|
||||
> **Avertissement.** Ces documents constituent une base de conformité FOSS
|
||||
> sérieuse et de bonne foi, mais ne sont pas un avis juridique. Avant toute
|
||||
> diffusion publique large ou commerciale, faites-les valider par un conseil
|
||||
> spécialisé en propriété intellectuelle / open source — en particulier les
|
||||
> points signalés ⚠ dans [THIRD-PARTY-LICENSES.md](THIRD-PARTY-LICENSES.md).
|
||||
@@ -0,0 +1,99 @@
|
||||
# Politique de licences & obtention des sources — FWS
|
||||
|
||||
`SPDX-License-Identifier: GPL-3.0-or-later`
|
||||
|
||||
## 1. Licence du projet
|
||||
|
||||
Le code du dépôt FWS (système de build, profils, overlays, PKGBUILD et docs
|
||||
rédigés par FWS) est distribué sous **GNU General Public License v3.0 ou
|
||||
ultérieure** (`GPL-3.0-or-later`). Cette licence est **héritée d'archiso**, dont
|
||||
FWS est un fork : une œuvre dérivée d'archiso (GPL-3.0-or-later) ne peut être
|
||||
redistribuée que sous GPL-3.0-or-later.
|
||||
|
||||
Texte intégral : [LICENSE](LICENSE).
|
||||
|
||||
Périmètre exact (couvert / hérité) : voir [COPYRIGHT.md](COPYRIGHT.md).
|
||||
Logiciels embarqués (licences distinctes) : voir
|
||||
[THIRD-PARTY-LICENSES.md](THIRD-PARTY-LICENSES.md).
|
||||
|
||||
## 2. En-têtes SPDX (recommandation)
|
||||
|
||||
Pour une traçabilité « béton », ajouter en tête de chaque fichier source rédigé
|
||||
par FWS :
|
||||
|
||||
```sh
|
||||
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||
# SPDX-FileCopyrightText: 2026 Contributeurs FWS
|
||||
```
|
||||
|
||||
(Les fichiers hérités d'archiso conservent leurs en-têtes d'origine.)
|
||||
|
||||
## 3. Obligation de fourniture des sources (GPL/LGPL)
|
||||
|
||||
FWS distribue des **binaires** couverts par la GPL/LGPL/AGPL : l'ISO
|
||||
(`out/FWS-*.iso`) et les paquets (`local-repo/*.pkg.tar.zst`). La GPL impose de
|
||||
fournir la **source correspondante** de ces binaires.
|
||||
|
||||
Pour FWS, la source correspondante est :
|
||||
|
||||
1. **le présent dépôt** (système de build, profils, recettes `pkgbuilds/`), et
|
||||
2. **les tarballs amont** référencés par `source=()` dans chaque PKGBUILD
|
||||
(téléchargés à l'identique depuis les URL listées dans
|
||||
[THIRD-PARTY-LICENSES.md](THIRD-PARTY-LICENSES.md)), et
|
||||
3. pour les paquets Arch agrégés dans l'ISO, **les sources publiées par Arch
|
||||
Linux** pour chaque paquet (`pkgctl`/dépôts amont Arch).
|
||||
|
||||
### Offre écrite (GPLv3 §6 / GPLv2 §3b)
|
||||
|
||||
> Pour tout binaire couvert par la GPL/LGPL distribué dans une image ou un paquet
|
||||
> FWS, le projet FWS s'engage à fournir, sur demande et pour une durée d'au moins
|
||||
> trois (3) ans, la source correspondante complète sous une forme lisible par
|
||||
> machine, soit via le dépôt public du projet, soit sur un support physique au
|
||||
> coût de distribution.
|
||||
>
|
||||
> - **Dépôt public (source) :** https://github.com/You-re-like-Windows-a-bitch/fws
|
||||
> - **Contact :** suzuku295@gmail.com
|
||||
>
|
||||
> *« FWS offers, for any GPL/LGPL-covered binary it distributes, to provide the
|
||||
> complete corresponding source code, for at least three years, via the project
|
||||
> repository (https://github.com/You-re-like-Windows-a-bitch/fws) or on physical
|
||||
> media at cost. Contact: suzuku295@gmail.com. »*
|
||||
|
||||
> **Condition d'effectivité :** l'offre n'est réellement opposable que si le dépôt
|
||||
> ci-dessus est **publiquement accessible** et contient `pkgbuilds/` (recettes +
|
||||
> URL `source=()`). Tant que le dépôt reste privé, publier au minimum les sources
|
||||
> correspondantes des binaires diffusés.
|
||||
|
||||
## 4. Reproductibilité
|
||||
|
||||
Le build honore `SOURCE_DATE_EPOCH` (cf. `profiledef.sh`, horodatages d'ISO et
|
||||
de label) pour des reconstructions déterministes — utile pour prouver la
|
||||
correspondance source/binaire.
|
||||
|
||||
## 5. Contributions
|
||||
|
||||
Les contributions entrantes sont acceptées sous la **même** licence que le
|
||||
projet (« inbound = outbound », `GPL-3.0-or-later`), avec attestation d'origine
|
||||
**DCO**. Voir [CONTRIBUTING.rst](CONTRIBUTING.rst).
|
||||
|
||||
## 6. Liste de contrôle conformité (avant release publique)
|
||||
|
||||
- [x] `LICENSE` (GPL-3.0-or-later) présent à la racine
|
||||
- [x] `COPYRIGHT.md`, `NOTICE`, `THIRD-PARTY-LICENSES.md`, `TRADEMARKS.md` rédigés
|
||||
- [x] Offre écrite §3 complétée avec URL (dépôt) + contact e-mail
|
||||
- [x] `os-release` FWS livré — hook `zz-fws-os-release.hook` (le live ne s'annonce
|
||||
plus « Arch Linux ») ; `motd` ne renvoie plus vers `archlinux.org`
|
||||
- [ ] **Dépôt rendu publiquement accessible** (sinon l'offre écrite n'est pas
|
||||
opposable) — action hors-code
|
||||
- [ ] Branding Red Hat/Fedora retiré de l'UI Anaconda ; installateur marqué
|
||||
« modifié » — à faire pendant la migration (config `product.d`)
|
||||
- [ ] Décision tranchée sur `python-iso639` (AGPL-3.0-only) : garder ou remplacer
|
||||
- [ ] Revue par un conseil FOSS (recommandé avant diffusion commerciale)
|
||||
|
||||
> Les étiquettes `license=` des PKGBUILD **présents dans `pkgbuilds/`** sont déjà
|
||||
> en SPDX exact. Les libellés imprécis relevés (`satyr` → `GPL`, `python-pid` →
|
||||
> `Apache`…) concernent des paquets de `local-repo/` **sans PKGBUILD dans ce
|
||||
> dépôt** (construits depuis l'AUR) : à corriger à la source AUR, pas ici.
|
||||
|
||||
> **Ceci n'est pas un avis juridique.** Base de conformité de bonne foi au
|
||||
> 2026-06-17.
|
||||
@@ -0,0 +1,58 @@
|
||||
FWS — Avis d'attribution / Attribution NOTICE
|
||||
=============================================
|
||||
|
||||
FWS (« FWS contributors »), 2026.
|
||||
Distribution Linux dérivée d'Arch Linux ; système de build dérivé d'archiso.
|
||||
|
||||
Ce fichier regroupe les attributions exigées par les licences permissives
|
||||
(Apache-2.0, MIT, BSD) des composants redistribués par FWS. Il complète :
|
||||
- LICENSE — GPL-3.0-or-later (projet)
|
||||
- COPYRIGHT.md — droits d'auteur du dépôt
|
||||
- THIRD-PARTY-LICENSES.md — inventaire complet & compatibilité
|
||||
- TRADEMARKS.md — marques & non-affiliation
|
||||
|
||||
L'absence d'un composant ici ne vaut pas absence d'obligation : voir
|
||||
THIRD-PARTY-LICENSES.md pour l'inventaire exhaustif et les avis GPL/LGPL/AGPL
|
||||
(préservés dans /usr/share/licenses/<paquet>/ sur le système).
|
||||
|
||||
-----------------------------------------------------------------------
|
||||
Base du dépôt
|
||||
-----------------------------------------------------------------------
|
||||
archiso — Copyright (C) Arch Linux / Archiso Authors (voir AUTHORS.rst)
|
||||
GPL-3.0-or-later — https://gitlab.archlinux.org/archlinux/archiso
|
||||
|
||||
-----------------------------------------------------------------------
|
||||
Composants sous Apache-2.0
|
||||
(Apache-2.0 §4 : conservation des avis de droit d'auteur et de licence ;
|
||||
ce NOTICE accompagne les œuvres redistribuées.)
|
||||
-----------------------------------------------------------------------
|
||||
requests-file (python-requests-file) — Copyright (C) David Shea
|
||||
https://github.com/dashea/requests-file
|
||||
requests-ftp (python-requests-ftp) — Copyright (C) Cory Benfield
|
||||
https://github.com/Lukasa/requests-ftp
|
||||
pid (python-pid) — Copyright (C) trbs and contributors
|
||||
https://github.com/trbs/pid
|
||||
|
||||
-----------------------------------------------------------------------
|
||||
Composants sous MIT
|
||||
-----------------------------------------------------------------------
|
||||
python-xkbregistry — Copyright (C) Stephen Early
|
||||
https://github.com/sde1000/python-xkbregistry
|
||||
WinBoat (winboat-bin) — Copyright (C) WinBoat authors (TibixDev)
|
||||
https://www.winboat.app
|
||||
langtable (python-langtable, partie MIT) — Copyright (C) Mike FABIAN
|
||||
https://github.com/mike-fabian/langtable
|
||||
|
||||
-----------------------------------------------------------------------
|
||||
Composants sous licence permissive de type BSD / custom
|
||||
-----------------------------------------------------------------------
|
||||
xmlrpc-c (libxmlrpc) — Copyright (C) les auteurs de xmlrpc-c
|
||||
Licence permissive de type BSD (« custom ») — voir le source amont
|
||||
https://xmlrpc-c.sourceforge.net/
|
||||
|
||||
-----------------------------------------------------------------------
|
||||
Marques
|
||||
-----------------------------------------------------------------------
|
||||
Arch Linux, Red Hat, Fedora, Anaconda, Windows, Microsoft, GNOME, KDE,
|
||||
Plasma, Xfce, Hyprland, GTK, Linux et WinBoat sont des marques de leurs
|
||||
détenteurs respectifs. FWS n'est affilié à aucun d'eux. Voir TRADEMARKS.md.
|
||||
@@ -1,87 +1,276 @@
|
||||
# FWS
|
||||
|
||||
**FWS** est une distribution Linux live/installable basée sur **Arch Linux**, livrée sous forme d'ISO bootable BIOS/UEFI avec l'installeur graphique **Calamares** lancé automatiquement au démarrage.
|
||||
**FWS** est une distribution Linux live/installable basée sur **Arch Linux**, livrée sous forme d'ISO bootable BIOS/UEFI. L'installateur graphique est **en cours de migration de Calamares vers Anaconda** (Calamares retiré au commit 05ae9c3, intégration d'Anaconda en cours — voir le chantier dédié).
|
||||
|
||||
Le projet est construit avec une chaîne `mkarchiso` adaptée pour fonctionner **depuis Windows via WSL** (Git Bash → WSL Arch), sans nécessiter de machine Linux dédiée.
|
||||
Le projet est conçu pour être **construit depuis Windows via WSL** (les scripts détectent Git Bash et basculent automatiquement dans WSL), mais fonctionne aussi directement depuis une **Arch Linux native** ou depuis **toute distribution non-Arch (Fedora, Ubuntu…) via une bascule automatique dans un conteneur Arch podman**.
|
||||
|
||||
---
|
||||
|
||||
## Aperçu
|
||||
|
||||
- **Base** : Arch Linux (rolling release)
|
||||
- **Installeur** : Calamares (compilé depuis l'AUR, servi via un repo local pacman)
|
||||
- **Affichage live** : Xorg + Openbox, lancement automatique de Calamares
|
||||
- **Bureau installé** : XFCE + LightDM avec autologin du premier compte créé
|
||||
- **Installateur** : en migration Calamares → Anaconda (Calamares retiré, Anaconda en préparation ; payload `liveimg` pour installer FWS et non Fedora)
|
||||
- **Affichage live** : Xorg + Openbox (session graphique conservée pour l'installateur)
|
||||
- **Bureaux installables** : XFCE, KDE Plasma, GNOME, Hyprland (choix à l'installation)
|
||||
- **Boot** : BIOS (syslinux) + UEFI (systemd-boot)
|
||||
- **Compression** : squashfs (xz)
|
||||
- **Build** : Windows + WSL (Arch) ou directement depuis Arch
|
||||
|
||||
## Prérequis
|
||||
---
|
||||
|
||||
### Côté Windows
|
||||
- Windows 10/11
|
||||
- WSL 2 avec une distribution **Arch Linux** installée (`Arch`, `ArchLinux`, `ArchWSL`…)
|
||||
- Git Bash (pour exécuter les scripts depuis Windows)
|
||||
## Environnement requis — INSTALLATION ULTRA PRÉCISE
|
||||
|
||||
### Côté Arch (WSL ou natif)
|
||||
Les scripts installent automatiquement les paquets nécessaires (`archiso`, `base-devel`, `git`, `reflector`, `dos2unix`).
|
||||
### Côté Windows (machine hôte)
|
||||
|
||||
## Démarrage rapide
|
||||
| Composant | Version / état requis | Commande de vérif |
|
||||
|---|---|---|
|
||||
| Windows | 10 (22H2+) ou 11 | `winver` |
|
||||
| WSL | **WSL 2** (pas WSL 1) | `wsl --status` |
|
||||
| Virtualisation CPU | Activée dans le BIOS (VT-x / AMD-V) | Gestionnaire des tâches → Performance → CPU → "Virtualisation : Activé" |
|
||||
| Git for Windows | ≥ 2.40 (fournit Git Bash) | `git --version` |
|
||||
| Espace disque libre | ≥ 25 GB sur la partition WSL | — |
|
||||
| RAM | ≥ 8 GB (16 GB recommandés) | — |
|
||||
|
||||
#### 1. Activer WSL 2
|
||||
|
||||
Dans **PowerShell administrateur** :
|
||||
|
||||
```powershell
|
||||
wsl --install --no-distribution
|
||||
wsl --set-default-version 2
|
||||
wsl --update
|
||||
```
|
||||
|
||||
Puis **redémarrer Windows**.
|
||||
|
||||
#### 2. Installer Arch Linux dans WSL
|
||||
|
||||
Arch n'est pas dans le store Microsoft. Installer **ArchWSL** :
|
||||
|
||||
```powershell
|
||||
# Télécharger la dernière release
|
||||
Invoke-WebRequest -Uri "https://github.com/yuk7/ArchWSL/releases/latest/download/Arch.zip" -OutFile "$env:TEMP\Arch.zip"
|
||||
Expand-Archive "$env:TEMP\Arch.zip" -DestinationPath "$env:LOCALAPPDATA\ArchWSL"
|
||||
& "$env:LOCALAPPDATA\ArchWSL\Arch.exe"
|
||||
```
|
||||
|
||||
Au premier lancement, la distribution s'enregistre sous le nom **`Arch`** (ce nom est attendu par les scripts — il est paramétrable via `ARCH_WSL_DISTRO` si besoin).
|
||||
|
||||
Vérifier :
|
||||
|
||||
```powershell
|
||||
wsl -l -v
|
||||
# Doit afficher :
|
||||
# NAME STATE VERSION
|
||||
# * Arch Stopped 2
|
||||
```
|
||||
|
||||
#### 3. Installer Git for Windows
|
||||
|
||||
Télécharger depuis https://git-scm.com/download/win et installer avec les options par défaut. **Git Bash** est inclus.
|
||||
|
||||
---
|
||||
|
||||
### Côté WSL Arch (préparation système)
|
||||
|
||||
Le **premier lancement** de la WSL ouvre une session root. Effectuer une seule fois :
|
||||
|
||||
```bash
|
||||
# 1. Préparation : compile Calamares depuis l'AUR, crée le repo local,
|
||||
# patche pacman.conf et configure les services systemd (Xorg + autostart).
|
||||
./setup-calamares.sh
|
||||
# 1. Initialiser le keyring (sinon pacman refuse tout install signé)
|
||||
pacman-key --init
|
||||
pacman-key --populate archlinux
|
||||
|
||||
# 2. Build de l'ISO via mkarchiso (fusionne configs/releng + configs/baseline)
|
||||
# 2. Mettre à jour le keyring AVANT toute autre opération
|
||||
# (les WSL fraîches ont un keyring périmé)
|
||||
pacman -Sy --noconfirm archlinux-keyring
|
||||
|
||||
# 3. Mise à jour complète du système
|
||||
pacman -Syu --noconfirm
|
||||
|
||||
# 4. Vérifier que /tmp est bien un tmpfs (sinon mkarchiso lent)
|
||||
mount | grep '/tmp'
|
||||
```
|
||||
|
||||
> **Note** : le script `setup-aur.sh` désactive automatiquement le sandbox landlock de pacman ≥ 7 (incompatible avec le kernel WSL) en ajoutant `DisableSandbox` dans `/etc/pacman.conf`. Tu n'as rien à faire.
|
||||
|
||||
---
|
||||
|
||||
### Côté Arch Linux native (alternative)
|
||||
|
||||
Si tu build depuis une vraie Arch (pas WSL) :
|
||||
|
||||
```bash
|
||||
sudo pacman -Syu
|
||||
sudo pacman -S --needed base-devel git archiso reflector dos2unix
|
||||
```
|
||||
|
||||
Les scripts détectent l'absence de WSL et s'exécutent en local. Il faut être **root** ou avoir `sudo` configuré.
|
||||
|
||||
---
|
||||
|
||||
### Côté Fedora / Linux non-Arch (conteneur podman)
|
||||
|
||||
Sur une distribution **qui n'est pas Arch** (Fedora, Ubuntu, Debian…), les scripts
|
||||
détectent l'hôte non-Arch et **se relancent automatiquement dans un conteneur Arch**
|
||||
via podman. Tu n'as qu'à installer podman, puis lancer les scripts normalement.
|
||||
|
||||
```bash
|
||||
# Fedora
|
||||
sudo dnf install -y podman
|
||||
# Debian / Ubuntu
|
||||
sudo apt install -y podman
|
||||
|
||||
# Puis, à la racine du repo, exactement comme sur Arch :
|
||||
./setup-aur.sh
|
||||
./build.sh
|
||||
```
|
||||
|
||||
L'ISO finale est générée dans `./out/`.
|
||||
Détails utiles :
|
||||
|
||||
Les deux scripts détectent automatiquement s'ils sont lancés depuis **Git Bash** (et basculent dans WSL en root) ou directement depuis **WSL/Arch**.
|
||||
- **podman rootful obligatoire** : les scripts préfixent `sudo podman` (rootless ne
|
||||
gère pas les mounts/chroot de `mkarchiso`). `sudo` peut demander ton mot de passe.
|
||||
- L'image utilisée est `docker.io/library/archlinux:latest`, pull explicite à chaque
|
||||
run (le tag `latest` n'est pas re-résolu sinon).
|
||||
- Le dépôt est monté **au même chemin absolu** dans le conteneur : l'ISO (`out/`) et
|
||||
`local-repo/` reviennent directement sur l'hôte (re-`chown` automatique vers toi).
|
||||
- Le cache pacman est conservé entre les runs dans le volume `fws-pacman-cache`.
|
||||
- SELinux enforcing (Fedora) est géré par `--privileged` — rien à configurer.
|
||||
|
||||
> Pour forcer l'exécution **locale** (si tu es déjà sur Arch et que pacman est là),
|
||||
> la bascule ne se déclenche pas : la détection exige `pacman` **et** un
|
||||
> `ID`/`ID_LIKE` « arch » dans `/etc/os-release`.
|
||||
|
||||
---
|
||||
|
||||
## Démarrage rapide
|
||||
|
||||
Depuis **Git Bash sur Windows** (à la racine du repo) :
|
||||
|
||||
```bash
|
||||
# Étape 1 : compilation des paquets AUR (winboat) + deps locales
|
||||
# → crée local-repo/ avec les .pkg.tar.zst
|
||||
# (Calamares retiré ; l'installateur Anaconda est un chantier en cours)
|
||||
./setup-aur.sh
|
||||
|
||||
# Étape 2 : build de l'ISO via mkarchiso
|
||||
# → fusionne configs/releng + configs/baseline
|
||||
# → injecte le repo local dans pacman.conf
|
||||
# → sort l'ISO dans ./out/
|
||||
./build.sh
|
||||
```
|
||||
|
||||
L'ISO finale est générée dans `./out/FWS-YYYY.MM.DD-x86_64.iso`.
|
||||
|
||||
---
|
||||
|
||||
## Ce que fait `setup-aur.sh` (étape par étape)
|
||||
|
||||
1. **Détection environnement** : si lancé depuis Git Bash, bascule dans `wsl.exe -d Arch -u root`.
|
||||
2. **Patch pacman** : désactive landlock sur WSL (`DisableSandbox`).
|
||||
3. **Refresh keyring** : `pacman-key --init && --populate archlinux`, mise à jour `archlinux-keyring`.
|
||||
4. **`pacman -Syu`** complet (obligatoire — sinon `makepkg` plante sur les "conflicting files" lors des splits de paquets type `gcc-libs`).
|
||||
5. **Install des outils de build** : `base-devel git`.
|
||||
6. **Création d'un utilisateur `fwsbuild`** non-root avec `sudo` NOPASSWD (makepkg refuse de tourner en root).
|
||||
7. **Clone + build AUR** : `winboat-bin` via `makepkg -s --noconfirm`, plus les PKGBUILD locaux de `pkgbuilds/` (deps Anaconda). Calamares n'est plus compilé.
|
||||
8. **Création du repo local** : `repo-add local-repo/fws-local.db.tar.gz`.
|
||||
9. **Cleanup** : suppression de l'utilisateur `fwsbuild`.
|
||||
|
||||
**Durée** : quelques minutes (winboat-bin + deps locales ; Calamares et ses ~12 dépendances Qt6 ne sont plus compilés).
|
||||
|
||||
---
|
||||
|
||||
## Ce que fait `build.sh` (étape par étape)
|
||||
|
||||
1. **Détection environnement** : Git Bash → bascule dans WSL ; sinon exécution locale.
|
||||
2. **Update miroirs** : `reflector --latest 10 --sort rate`.
|
||||
3. **Install `archiso`**.
|
||||
4. **Fusion configs** : `cp -ar configs/releng/* /tmp/fws-build/releng/` puis overlay `configs/baseline/*` par-dessus (baseline prioritaire).
|
||||
5. **Activation NetworkManager** sur le live (symlink réel `multi-user.target.wants/`).
|
||||
6. **Injection du repo local** : ajoute `[fws-local]` (`SigLevel = Optional TrustAll`) en tête de `pacman.conf`.
|
||||
7. **`dos2unix`** sur l'arborescence (au cas où tu as édité depuis Windows).
|
||||
8. **`mkarchiso -v -w /tmp/fws-build/work -o out/ /tmp/fws-build/releng`**.
|
||||
9. **Cleanup** du workdir.
|
||||
|
||||
**Durée** : 5–15 minutes selon la machine et le cache pacman.
|
||||
|
||||
---
|
||||
|
||||
## Test rapide en QEMU
|
||||
|
||||
```bash
|
||||
./scripts/run_archiso.sh -i out/FWS-*.iso # BIOS
|
||||
./scripts/run_archiso.sh -u -i out/FWS-*.iso # UEFI
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Structure du projet
|
||||
|
||||
| Chemin | Rôle |
|
||||
|--------|------|
|
||||
| `setup-calamares.sh` | Préparation one-shot : build Calamares (AUR), repo local, services systemd, autostart Xorg + Calamares |
|
||||
| `build.sh` | Build de l'ISO via `mkarchiso` (utilisable depuis Git Bash ou WSL) |
|
||||
|---|---|
|
||||
| `setup-aur.sh` | Build des paquets AUR (winboat) + PKGBUILD locaux, crée `local-repo/` |
|
||||
| `build.sh` | Build de l'ISO via `mkarchiso` |
|
||||
| `configs/releng/` | Profil principal (base ArchISO releng) |
|
||||
| `configs/baseline/` | Overlay FWS appliqué par-dessus `releng` (prioritaire) |
|
||||
| `local-repo/` | Repo pacman local généré (Calamares + dépendances AUR) |
|
||||
| `configs/baseline/` | Overlay FWS (surcharge le profil releng) — **prioritaire** sur releng |
|
||||
| `local-repo/` | Repo pacman local (généré par `setup-aur.sh`) |
|
||||
| `out/` | ISOs générées |
|
||||
| `fws/mkarchiso` | Binaire `mkarchiso` embarqué (fork) |
|
||||
| `scripts/run_archiso.sh` | Lanceur QEMU |
|
||||
|
||||
---
|
||||
|
||||
## Séquence de boot de l'ISO
|
||||
|
||||
1. Démarrage de l'ISO FWS (BIOS ou UEFI)
|
||||
2. `systemd` → autologin root sur `tty1`
|
||||
3. `xorg-start.service` → `Xorg :0`
|
||||
4. `calamares.service` → `DISPLAY=:0 calamares`
|
||||
5. **Fallback** : si les services échouent, `.zprofile` relance Xorg + Openbox + Calamares manuellement
|
||||
6. Après installation, le système démarre sur LightDM puis ouvre automatiquement la session XFCE du compte installé
|
||||
3. `.zprofile` → `startx`
|
||||
4. `.xinitrc` → Openbox (session graphique du live)
|
||||
5. **[Chantier C]** lancement de l'installateur Anaconda — pas encore câblé (Calamares retiré au commit 05ae9c3)
|
||||
|
||||
## Test rapide en QEMU
|
||||
|
||||
```bash
|
||||
./scripts/run_archiso.sh -i out/fws-*.iso # BIOS
|
||||
./scripts/run_archiso.sh -u -i out/fws-*.iso # UEFI
|
||||
```
|
||||
---
|
||||
|
||||
## Personnalisation
|
||||
|
||||
- **Paquets** : éditer `configs/releng/packages.x86_64`
|
||||
- **Overlay rootfs** : déposer les fichiers dans `configs/releng/airootfs/` ou `configs/baseline/airootfs/`
|
||||
- **Modules / séquence Calamares** : `configs/baseline/airootfs/etc/calamares/`
|
||||
- **Branding ISO** : `configs/releng/profiledef.sh` (`iso_name`, `iso_label`, `iso_publisher`…)
|
||||
- **Paquets du live** : `configs/releng/packages.x86_64`
|
||||
- **Paquets baseline** : `configs/baseline/packages.x86_64`
|
||||
- **Overlay rootfs** : `configs/releng/airootfs/` ou `configs/baseline/airootfs/`
|
||||
- **Kickstart de l'installateur** : `configs/releng/airootfs/usr/share/anaconda/interactive-defaults.ks` (payload liveimg + %post)
|
||||
- **Branding ISO** : `configs/releng/profiledef.sh` (`iso_name`, `iso_label`, `iso_publisher`)
|
||||
|
||||
---
|
||||
|
||||
## Dépannage
|
||||
|
||||
- **`pacman.conf introuvable`** : vérifier que `configs/releng/pacman.conf` existe.
|
||||
- **Calamares ne démarre pas dans l'ISO** : se logger en tty (autologin root) et lancer `journalctl -u xorg-start -u calamares`.
|
||||
- **Erreurs de retours à la ligne** : `build.sh` lance `dos2unix` sur l'arborescence ; si vous éditez des fichiers depuis Windows, ce n'est pas un problème.
|
||||
- **`mkarchiso` échoue sur un paquet AUR** : relancer `./setup-calamares.sh` pour reconstruire le repo local.
|
||||
| Symptôme | Cause / fix |
|
||||
|---|---|
|
||||
| `Aucune distribution WSL Arch joignable` | Aucune distro Arch n'est installée/joignable. Les scripts auto-détectent désormais toute distro dont le nom contient « arch » (via `wsl -l -q`) ; installe ArchWSL (nom `Arch`) ou `wsl --install -d archlinux`, ou force `ARCH_WSL_DISTRO=NomDeMaDistro`. |
|
||||
| `WSL introuvable` | WSL n'est pas installé. PowerShell admin : `wsl --install`, puis installe une distro Arch. |
|
||||
| `pacman: signature unknown trust` | Keyring périmé → `pacman -Sy --noconfirm archlinux-keyring` puis relancer. |
|
||||
| `makepkg: conflicting files` | `pacman -Syu` incomplet avant le build. Relancer `setup-aur.sh`. |
|
||||
| `mkarchiso` plante sur `[fws-local]` | Le repo local n'a pas été généré. Relancer `setup-aur.sh`. |
|
||||
| Écran noir après login Hyprland | Tu testes dans VirtualBox → pas d'accélération GPU. Utiliser QEMU/KVM avec `virtio-gpu` ou bare-metal. |
|
||||
| Retours à la ligne CRLF | `build.sh` lance `dos2unix` automatiquement, mais si tu modifies pendant le build, relancer. |
|
||||
|
||||
### Logs utiles
|
||||
|
||||
```bash
|
||||
# Pendant le build
|
||||
tail -f /tmp/fws-build/work/iso/arch/pkglist.x86_64.txt
|
||||
|
||||
# Dans l'ISO (autologin tty1)
|
||||
journalctl -b
|
||||
|
||||
# Hyprland post-install
|
||||
cat ~/.local/share/hyprland/hyprland.log
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Variables d'environnement supportées
|
||||
|
||||
| Variable | Effet | Défaut |
|
||||
|---|---|---|
|
||||
| `ARCH_WSL_DISTRO` | Nom de la distro WSL Arch | `Arch` |
|
||||
| `MSYS_NO_PATHCONV` | Désactive la conversion auto des chemins Git Bash | `1` (forcé dans les scripts) |
|
||||
|
||||
---
|
||||
|
||||
@@ -89,6 +278,21 @@ Les deux scripts détectent automatiquement s'ils sont lancés depuis **Git Bash
|
||||
|
||||
FWS est un fork de **[archiso](https://gitlab.archlinux.org/archlinux/archiso)** (Arch Linux), redistribué sous les termes de la **GPL-3.0-or-later**.
|
||||
|
||||
Voir [LICENSE](LICENSE) pour le texte complet, et [AUTHORS.rst](AUTHORS.rst) pour la liste des auteurs originaux d'archiso.
|
||||
Les modifications spécifiques à FWS (scripts `build.sh`, `setup-aur.sh`, overlay `configs/baseline/`, intégration de l'installateur + Xorg autostart, chaîne de build WSL) sont également distribuées sous GPL-3.0-or-later.
|
||||
|
||||
Les modifications spécifiques à FWS (scripts `build.sh`, `setup-calamares.sh`, overlay `configs/baseline/`, intégration Calamares + Xorg autostart, chaîne de build WSL) sont également distribuées sous GPL-3.0-or-later.
|
||||
### Base légale complète
|
||||
|
||||
| Document | Objet |
|
||||
|---|---|
|
||||
| [LICENSE](LICENSE) | Texte intégral GPL-3.0-or-later |
|
||||
| [COPYRIGHT.md](COPYRIGHT.md) | Droits d'auteur du dépôt & périmètre |
|
||||
| [LICENSING.md](LICENSING.md) | Politique de licences, **offre écrite GPL (sources)**, checklist release |
|
||||
| [THIRD-PARTY-LICENSES.md](THIRD-PARTY-LICENSES.md) | Inventaire des logiciels tiers (Anaconda, deps…) & **analyse de compatibilité** |
|
||||
| [TRADEMARKS.md](TRADEMARKS.md) | Marques & **non-affiliation** (Arch, Red Hat, Fedora, Anaconda, Windows…) |
|
||||
| [NOTICE](NOTICE) | Attributions Apache/MIT/BSD |
|
||||
| [AUTHORS.rst](AUTHORS.rst) | Auteurs FWS + auteurs originaux d'archiso |
|
||||
| [CONTRIBUTING.rst](CONTRIBUTING.rst) | Contribuer (inbound = outbound, DCO) |
|
||||
|
||||
> ✅ **Déjà réglé** : offre écrite GPL (URL dépôt + contact), `os-release` FWS (le live ne s'annonce plus « Arch Linux », via hook pacman) et `motd` (plus de lien `archlinux.org`).
|
||||
>
|
||||
> ⚠️ **Reste avant diffusion publique** (détail dans [LICENSING.md](LICENSING.md) §6) : **rendre le dépôt public** (sinon l'offre GPL n'est pas opposable), retirer le branding Red Hat/Fedora de l'UI Anaconda lors de la migration, et **trancher sur `python-iso639`** (AGPL-3.0-only). **Ces documents ne sont pas un avis juridique.**
|
||||
|
||||
@@ -0,0 +1,147 @@
|
||||
# Logiciels tiers & licences — FWS
|
||||
|
||||
Ce document est l'**inventaire de conformité** (« bill of materials ») des
|
||||
logiciels tiers que FWS reconditionne, embarque ou redistribue. Il sert à
|
||||
satisfaire les obligations d'**attribution** et de **préservation des avis de
|
||||
licence** des licences GPL, LGPL, AGPL, Apache, MIT et BSD.
|
||||
|
||||
Trois familles de tiers :
|
||||
|
||||
1. **La base du dépôt** : FWS est un fork d'**archiso**.
|
||||
2. **Les paquets construits/redistribués par FWS** (`pkgbuilds/` + `local-repo/`),
|
||||
notamment l'installateur **Anaconda** et ses dépendances Python.
|
||||
3. **L'ensemble des paquets Arch Linux** agrégés dans l'ISO live (chacun sous sa
|
||||
propre licence ; l'avis de licence de chaque paquet est présent dans
|
||||
`/usr/share/licenses/<paquet>/` sur le système installé/live).
|
||||
|
||||
---
|
||||
|
||||
## 1. Base du dépôt
|
||||
|
||||
| Composant | Rôle | SPDX | Détenteur | Source amont |
|
||||
|---|---|---|---|---|
|
||||
| **archiso** | système de build (mkarchiso, profils, man, Makefile) | `GPL-3.0-or-later` | Arch Linux / Archiso Authors | https://gitlab.archlinux.org/archlinux/archiso |
|
||||
|
||||
Auteurs originaux : voir [AUTHORS.rst](AUTHORS.rst).
|
||||
|
||||
---
|
||||
|
||||
## 2. Paquets construits / redistribués par FWS
|
||||
|
||||
Sources des recettes : `pkgbuilds/*/PKGBUILD`. Binaires : `local-repo/*.pkg.tar.zst`.
|
||||
La **source correspondante** (au sens GPL/LGPL) de chacun est le tarball amont
|
||||
référencé par `source=()` dans le PKGBUILD, plus le PKGBUILD lui-même.
|
||||
|
||||
| Paquet | Version | SPDX | Détenteur principal | Source amont |
|
||||
|---|---|---|---|---|
|
||||
| anaconda | 45.8 | `GPL-2.0-or-later` | Red Hat, Inc. & contributeurs Anaconda | https://github.com/rhinstaller/anaconda |
|
||||
| anaconda-widgets | 45.8 | `GPL-2.0-or-later` | Red Hat, Inc. | https://github.com/rhinstaller/anaconda |
|
||||
| pykickstart | 3.74 | `GPL-2.0-or-later` | Red Hat, Inc. | https://github.com/pykickstart/pykickstart |
|
||||
| python-blivet | 3.13.2 | `LGPL-2.1-only` | Red Hat, Inc. | https://github.com/storaged-project/blivet |
|
||||
| python-meh | 0.43 | `GPL-2.0-or-later` | Red Hat, Inc. | https://github.com/rhinstaller/python-meh |
|
||||
| python-productmd | 1.50 | `LGPL-2.1-or-later` | Red Hat, Inc. / release-engineering | https://github.com/release-engineering/productmd |
|
||||
| python-simpleline | 1.8 | `LGPL-3.0-or-later` | Red Hat, Inc. | https://github.com/rhinstaller/python-simpleline |
|
||||
| python-requests-file | 2.1.0 | `Apache-2.0` | David Shea | https://github.com/dashea/requests-file |
|
||||
| python-requests-ftp | 0.3.1 | `Apache-2.0` | Cory Benfield | https://github.com/Lukasa/requests-ftp |
|
||||
| python-pid | 3.0.4 | `Apache-2.0` | trbs | https://github.com/trbs/pid |
|
||||
| python-iso639 | 0.4.5 | **`AGPL-3.0-only`** ⚠ | Mikael Karlsson (noumar) | https://github.com/noumar/iso639 |
|
||||
| python-langtable | 0.0.51 | `GPL-3.0-or-later AND MIT` | Mike FABIAN | https://github.com/mike-fabian/langtable |
|
||||
| python-xkbregistry | 1.5 | `MIT` | Stephen Early | https://github.com/sde1000/python-xkbregistry |
|
||||
| libreport | 2.17.15 | **`GPL-2.0-only`** ⚠ | Red Hat, Inc. (projet ABRT) | https://github.com/abrt/libreport |
|
||||
| satyr | 0.43 | `GPL-2.0-or-later` | Red Hat, Inc. (projet ABRT) | https://github.com/abrt/satyr |
|
||||
| libxmlrpc (xmlrpc-c) | 1.64.03 | `custom` (BSD-style permissive) | Auteurs xmlrpc-c | https://xmlrpc-c.sourceforge.net/ |
|
||||
| winboat-bin | 0.9.0 | `MIT` | Auteurs WinBoat (TibixDev) | https://www.winboat.app |
|
||||
|
||||
> Les versions et identifiants SPDX ci-dessus proviennent des champs `license=`
|
||||
> des PKGBUILD et des `.PKGINFO` des paquets de `local-repo/`. Quand le `.PKGINFO`
|
||||
> portait une étiquette ancienne et imprécise (`GPL`, `Apache`), l'identifiant
|
||||
> SPDX retenu est celui du dépôt amont (p. ex. `satyr` → `GPL-2.0-or-later`).
|
||||
> **À corriger dans les PKGBUILD** pour des étiquettes SPDX exactes.
|
||||
|
||||
---
|
||||
|
||||
## 3. Paquets Arch Linux de l'ISO
|
||||
|
||||
L'ISO live agrège tout l'ensemble de paquets listé dans
|
||||
`configs/releng/packages.x86_64` et `configs/baseline/packages.x86_64` (noyau
|
||||
Linux, Xorg, Openbox, environnements de bureau, utilitaires…). Chaque paquet
|
||||
conserve sa licence d'origine ; l'avis correspondant est fourni dans
|
||||
`/usr/share/licenses/<paquet>/` sur le système. FWS ne revendique aucun droit
|
||||
sur ces paquets.
|
||||
|
||||
---
|
||||
|
||||
## 4. Analyse de compatibilité des licences
|
||||
|
||||
**Licence effective du dépôt FWS : `GPL-3.0-or-later`** (imposée par la dérivation
|
||||
d'archiso, lui-même GPL-3.0-or-later).
|
||||
|
||||
### 4.1 Principe d'agrégation (le cas général)
|
||||
|
||||
L'ISO et le dépôt de paquets sont des **agrégations** de programmes indépendants
|
||||
(« mere aggregation », GPLv3 §5 / GPLv2 §2). Chaque paquet est distribué comme
|
||||
une unité séparée (binaire `.pkg.tar.zst` distinct, processus distinct,
|
||||
bibliothèque partagée distincte) et **conserve sa propre licence**. C'est
|
||||
exactement le modèle juridique sous lequel Arch Linux, Debian et Fedora
|
||||
distribuent des milliers de paquets de licences hétérogènes sur un même média.
|
||||
À ce niveau, la compatibilité copyleft **n'est pas requise** : il n'y a pas
|
||||
d'« œuvre combinée » unique.
|
||||
|
||||
### 4.2 Compatibilité au sein du runtime Anaconda
|
||||
|
||||
Anaconda charge plusieurs modules dans **un même processus Python** au moment de
|
||||
l'exécution. Les licences en présence et leur compatibilité montante vers GPLv3 :
|
||||
|
||||
| Licence du composant | Compatible GPLv3 ? | Note |
|
||||
|---|---|---|
|
||||
| `GPL-2.0-or-later` (anaconda, meh, pykickstart, satyr…) | ✅ | la clause « or later » autorise l'usage en GPLv3 |
|
||||
| `LGPL-2.1-only` (blivet) | ✅ | LGPL-2.1 §3 autorise la relicence en GPL ; usage dynamique |
|
||||
| `LGPL-2.1-or-later` (productmd) | ✅ | montée vers (L)GPLv3 |
|
||||
| `LGPL-3.0-or-later` (simpleline) | ✅ | sous-ensemble de GPLv3 |
|
||||
| `Apache-2.0` (requests-file, requests-ftp, pid) | ✅ | compatible GPLv3 (sens unique) ; voir [NOTICE](NOTICE) |
|
||||
| `MIT` (xkbregistry, winboat) | ✅ | permissive |
|
||||
| `MIT`/`BSD-style` (langtable, libxmlrpc) | ✅ | permissive |
|
||||
|
||||
### 4.3 ⚠ Deux points à surveiller (signalés en bonne foi)
|
||||
|
||||
1. **`python-iso639` est `AGPL-3.0-only`.** L'AGPL est compatible avec GPLv3 via
|
||||
la clause de compatibilité réciproque (GPLv3 §13 / AGPLv3 §13) : on peut
|
||||
combiner du code AGPLv3 et GPLv3. La **clause réseau** de l'AGPL (mise à
|
||||
disposition de la source aux utilisateurs distants d'un service réseau) est
|
||||
en pratique **inerte** pour un installateur hors-ligne. **Cependant**, l'AGPL
|
||||
est la licence la plus contaminante et beaucoup d'organisations l'interdisent
|
||||
par politique interne. **Recommandation béton :** si l'AGPL n'est pas
|
||||
souhaitée, remplacer `noumar/iso639` par une bibliothèque ISO-639 non-AGPL
|
||||
(p. ex. `pycountry` — BSD, ou les données `iso-codes`), ce qui élimine le
|
||||
sujet.
|
||||
|
||||
2. **`libreport` est `GPL-2.0-only`** (sans « or later »). GPL-2.0-**only** n'est
|
||||
**pas** compatible en montée avec GPLv3/AGPLv3. Tant que `libreport` reste un
|
||||
paquet **séparé** (bibliothèque partagée distincte, appelée via `python-meh`
|
||||
qui importe `report`), on demeure dans le régime d'agrégation §4.1 — et c'est
|
||||
la configuration que **Fedora elle-même distribue**. Le risque n'apparaîtrait
|
||||
que si l'on **liait statiquement** `libreport` (GPLv2-only) avec un composant
|
||||
AGPLv3-only/GPLv3-only dans un **seul binaire** : à éviter. En l'état (paquets
|
||||
séparés), pas de conflit.
|
||||
|
||||
### 4.4 Verdict
|
||||
|
||||
En l'état (paquets séparés, agrégation sur ISO, modules Python chargés au
|
||||
runtime), **la configuration est cohérente et alignée sur la pratique des
|
||||
distributions majeures**. Les deux points ⚠ ci-dessus méritent une décision
|
||||
explicite (garder / remplacer l'AGPL) et une revue par un juriste FOSS avant
|
||||
diffusion commerciale.
|
||||
|
||||
> **Ceci n'est pas un avis juridique.** Analyse de bonne foi fondée sur les
|
||||
> métadonnées de licence du dépôt à la date du 2026-06-17.
|
||||
|
||||
---
|
||||
|
||||
## 5. Préservation des avis
|
||||
|
||||
- Les textes de licence amont présents dans les sources sont conservés lors du
|
||||
`package()` (pacman installe `LICENSE`/`COPYING` dans
|
||||
`/usr/share/licenses/<paquet>/`).
|
||||
- Les attributions requises par Apache-2.0 / MIT / BSD figurent dans [NOTICE](NOTICE).
|
||||
- Aucun avis de droit d'auteur amont ne doit être retiré des sources ou binaires
|
||||
redistribués.
|
||||
+133
@@ -0,0 +1,133 @@
|
||||
# Marques & non-affiliation — FWS
|
||||
|
||||
FWS redistribue et modifie des logiciels portant des **marques** de tiers. Les
|
||||
licences libres (GPL, LGPL, Apache…) accordent des droits sur le **code**, mais
|
||||
**jamais** sur les **marques, noms et logos**. Ce document liste les marques
|
||||
concernées et les déclarations de non-affiliation. Il vaut engagement du projet
|
||||
à les respecter.
|
||||
|
||||
## Marque du projet
|
||||
|
||||
- **FWS** est le nom (marque non déposée) du présent projet, utilisé par les
|
||||
Contributeurs FWS. Toute reprise du nom/logo FWS pour désigner une version
|
||||
modifiée non officielle doit éviter de laisser croire à un aval du projet FWS.
|
||||
|
||||
---
|
||||
|
||||
## Arch Linux
|
||||
|
||||
> **Arch Linux™** est une marque du projet Arch Linux. FWS est une distribution
|
||||
> **dérivée indépendante**, *basée sur* Arch Linux. FWS **n'est ni affilié, ni
|
||||
> sponsorisé, ni approuvé** par le projet Arch Linux. *« Arch Linux is a
|
||||
> trademark of the Arch Linux project. FWS is an independent derivative and is
|
||||
> not affiliated with, sponsored by, or endorsed by Arch Linux. »*
|
||||
|
||||
Engagements FWS :
|
||||
|
||||
- ne pas présenter FWS **comme étant** Arch Linux ;
|
||||
- ne pas utiliser le **logo Arch Linux** comme logo de FWS ;
|
||||
- usage **nominatif** uniquement (« basé sur Arch Linux », « compatible
|
||||
paquets Arch ») ;
|
||||
- respecter les recommandations Arch pour les dérivés
|
||||
(https://wiki.archlinux.org/title/DeveloperWiki:TrademarkPolicy).
|
||||
|
||||
### ✅ Remédiation appliquée (le live ne s'annonce plus comme « Arch Linux »)
|
||||
|
||||
Le système live héritait de l'`os-release` du paquet `filesystem` d'Arch et
|
||||
**s'annonçait comme « Arch Linux »** ; le `motd` renvoyait vers
|
||||
`wiki.archlinux.org`. Corrigé :
|
||||
|
||||
- **`os-release` FWS** : fourni dans
|
||||
`configs/releng/airootfs/usr/local/share/fws/os-release` et appliqué sur
|
||||
`/usr/lib/os-release` par un **hook pacman PostTransaction**
|
||||
(`configs/releng/airootfs/etc/pacman.d/hooks/zz-fws-os-release.hook`). On ne
|
||||
peut pas poser le fichier directement dans l'overlay : `filesystem` possède ce
|
||||
chemin et `mkarchiso` copie l'overlay **avant** pacstrap → conflit pacman
|
||||
« exists in filesystem ». Le hook s'exécute après l'installation des paquets,
|
||||
donc sans conflit, et est retiré du système final par
|
||||
`zzzz99-remove-custom-hooks-from-airootfs.hook`.
|
||||
- **`motd`** : ne référence plus `archlinux.org` ; pointe vers le dépôt FWS.
|
||||
|
||||
> Note technique : `ID=fws` + `ID_LIKE=arch` préserve la détection « famille
|
||||
> Arch » des outils tiers (et satisfait les checks `^ID(_LIKE)?=.*arch` de
|
||||
> `build.sh`/`setup-aur.sh`, qui portent de toute façon sur l'hôte de build).
|
||||
> Si la migration Anaconda révèle un composant testant `ID=arch` en dur, basculer
|
||||
> transitoirement le hook sur `ID=arch` tout en gardant `NAME`/`PRETTY_NAME` FWS.
|
||||
|
||||
---
|
||||
|
||||
## Red Hat & Fedora
|
||||
|
||||
> **Red Hat®** et **Fedora®** sont des marques déposées de **Red Hat, Inc.**
|
||||
> L'installateur **Anaconda** est développé par Red Hat. FWS distribue une
|
||||
> **version MODIFIÉE** d'Anaconda (portée sur Arch, payload `liveimg`), **non
|
||||
> officielle**, **non fournie ni approuvée** par Red Hat ou le projet Fedora.
|
||||
> *« This product includes a modified version of Anaconda. Red Hat and Fedora
|
||||
> are trademarks of Red Hat, Inc. This is an unofficial build, not provided or
|
||||
> endorsed by Red Hat or the Fedora Project. »*
|
||||
|
||||
Engagements FWS :
|
||||
|
||||
- ne pas utiliser les marques Red Hat / Fedora pour suggérer un aval ;
|
||||
- **marquer clairement Anaconda comme modifié** (la GPL exige d'identifier les
|
||||
versions modifiées ; la politique de marque Red Hat exige de ne pas faire
|
||||
passer une version modifiée pour officielle) ;
|
||||
- **recommandation béton :** retirer tout **logo / nom de produit Red Hat ou
|
||||
Fedora** de l'interface de l'installateur si présent, et y afficher
|
||||
« Installateur FWS (basé sur Anaconda) ». La configuration produit d'Anaconda
|
||||
se règle via `product.d` / les données de branding — à auditer pendant la
|
||||
migration.
|
||||
|
||||
---
|
||||
|
||||
## Anaconda — désambiguïsation
|
||||
|
||||
> Le nom **« Anaconda »** désigne ici **l'installateur de Red Hat/Fedora**
|
||||
> (https://github.com/rhinstaller/anaconda). Il **n'a aucun rapport** avec
|
||||
> **Anaconda®**, marque déposée d'**Anaconda, Inc.** (la distribution Python /
|
||||
> data-science). FWS n'utilise ni ne distribue le produit d'Anaconda, Inc.
|
||||
|
||||
À mentionner dans la doc utilisateur pour éviter toute confusion.
|
||||
|
||||
---
|
||||
|
||||
## Windows & Microsoft
|
||||
|
||||
> **Windows®** et **Microsoft®** sont des marques de **Microsoft Corporation**.
|
||||
> FWS embarque **WinBoat** (MIT), qui permet d'exécuter des applications Windows
|
||||
> sous Linux. FWS et WinBoat **ne sont ni affiliés, ni approuvés** par Microsoft.
|
||||
> Exécuter des applications Windows requiert vos **propres licences Windows
|
||||
> valides** ; FWS ne fournit aucun logiciel ni licence Microsoft.
|
||||
|
||||
Le nom du projet et son slogan font un usage **parodique / nominatif** du terme
|
||||
« Windows » et n'impliquent aucun lien avec Microsoft.
|
||||
|
||||
---
|
||||
|
||||
## Autres marques (usage nominatif)
|
||||
|
||||
Les noms suivants désignent des projets/options proposés à l'installation ou
|
||||
utilisés comme composants, et sont des marques de leurs détenteurs, employées
|
||||
de façon **purement descriptive** :
|
||||
|
||||
- **GNOME®** — The GNOME Foundation
|
||||
- **KDE®**, **Plasma** — KDE e.V.
|
||||
- **Xfce** — projet Xfce
|
||||
- **Hyprland** — projet Hyprland
|
||||
- **GTK** — The GNOME Foundation
|
||||
- **Linux®** — marque déposée de Linus Torvalds
|
||||
- **WinBoat** — projet WinBoat
|
||||
|
||||
---
|
||||
|
||||
## Principe général
|
||||
|
||||
L'emploi de ces marques dans FWS relève de l'**usage nominatif loyal** (décrire
|
||||
l'origine, la compatibilité ou les composants), **sans** suggérer parrainage ou
|
||||
affiliation. Aucune licence sur ces marques n'est accordée ni reçue. Pour toute
|
||||
utilisation commerciale du nom/logo d'un tiers au-delà de l'usage nominatif,
|
||||
obtenir l'autorisation du détenteur.
|
||||
|
||||
> **Ceci n'est pas un avis juridique.** Faites valider la stratégie de marque
|
||||
> (notamment le nom du projet et le rebranding d'Anaconda) par un conseil avant
|
||||
> diffusion publique large.
|
||||
Executable
+347
@@ -0,0 +1,347 @@
|
||||
#!/bin/bash
|
||||
# ============================================================
|
||||
# FWS — Build OFFICIEL versionné de l'ISO (archiso)
|
||||
#
|
||||
# Identique à build.sh dans sa structure, mais :
|
||||
# - lit la version dans le fichier VERSION (format Major.Minor.Build)
|
||||
# - nomme l'ISO FWS-vMAJOR-MINOR-BUILD-DATE-x86_64.iso
|
||||
# - range l'ISO dans out/vMAJOR/vMAJOR.MINOR/
|
||||
#
|
||||
# Fonctionne sur :
|
||||
# - Windows 10 / 11 (Git Bash → bascule auto dans WSL Arch)
|
||||
# - Arch Linux natif (exécution directe)
|
||||
# - WSL Arch lancé directement (exécution directe)
|
||||
#
|
||||
# Nom de la distro WSL : "Arch" par défaut, ou $ARCH_WSL_DISTRO,
|
||||
# ou auto-détecté parmi les noms courants.
|
||||
# ============================================================
|
||||
|
||||
set -e
|
||||
trap 'rc=$?; echo -e "\e[31mÉchec (build-offi.sh) ligne $LINENO, code $rc.\e[0m" >&2; exit $rc' ERR
|
||||
|
||||
DISTRO_NAME="${ARCH_WSL_DISTRO:-Arch}"
|
||||
|
||||
# ============================================================
|
||||
# Bascule Git Bash (Windows 10/11) → WSL si besoin
|
||||
# ============================================================
|
||||
if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" || -n "$WINDIR" ]]; then
|
||||
echo -e "\e[36mGit Bash détecté — bascule dans WSL ($DISTRO_NAME)...\e[0m"
|
||||
export MSYS_NO_PATHCONV=1
|
||||
export MSYS2_ARG_CONV_EXCL="*"
|
||||
|
||||
# WSL doit être présent (sinon message clair plutôt que command not found).
|
||||
command -v wsl.exe >/dev/null 2>&1 || {
|
||||
echo -e "\e[31mWSL introuvable. Installe WSL2 puis une distro Arch :\e[0m" >&2
|
||||
echo " 1) PowerShell admin : wsl --install" >&2
|
||||
echo " 2) Installe Arch (ArchWSL, ou 'wsl --install -d archlinux') puis relance." >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Choix de la distro Arch : override $ARCH_WSL_DISTRO, sinon nom exact,
|
||||
# sinon 1re distro « arch » réellement joignable. On énumère via
|
||||
# `wsl -l -q` (sortie UTF-16LE → on retire NUL/CR) au lieu d'une liste
|
||||
# figée, mais on garde la sonde « echo ok » (une distro listée peut
|
||||
# être en cours d'install / cassée).
|
||||
pick_arch_distro() {
|
||||
wsl.exe -d "$DISTRO_NAME" -u root -- echo ok >/dev/null 2>&1 && return 0
|
||||
local d distros=()
|
||||
mapfile -t distros < <(wsl.exe -l -q 2>/dev/null | tr -d '\0\r' | sed 's/[[:space:]]*$//;/^$/d')
|
||||
for d in "${distros[@]}"; do
|
||||
[[ "$d" == "$DISTRO_NAME" ]] || continue
|
||||
wsl.exe -d "$d" -u root -- echo ok >/dev/null 2>&1 && { DISTRO_NAME="$d"; return 0; }
|
||||
done
|
||||
for d in "${distros[@]}"; do
|
||||
[[ "$d" =~ [Aa][Rr][Cc][Hh] ]] || continue
|
||||
wsl.exe -d "$d" -u root -- echo ok >/dev/null 2>&1 && { DISTRO_NAME="$d"; return 0; }
|
||||
done
|
||||
return 1
|
||||
}
|
||||
if ! pick_arch_distro; then
|
||||
echo -e "\e[31mAucune distribution WSL Arch joignable.\e[0m" >&2
|
||||
echo "Distros WSL installées :" >&2
|
||||
wsl.exe -l -v 2>/dev/null | tr -d '\0' >&2 || true
|
||||
echo "" >&2
|
||||
echo "Installe Arch dans WSL puis relance :" >&2
|
||||
echo " - ArchWSL (yuk7) — s'enregistre sous 'Arch' : https://github.com/yuk7/ArchWSL/releases/latest" >&2
|
||||
echo " - ou image officielle : wsl --install -d archlinux (nom 'archlinux')" >&2
|
||||
echo "Distro sous un autre nom ? export ARCH_WSL_DISTRO=<nom> (cf. 'wsl -l -v' ci-dessus)." >&2
|
||||
exit 1
|
||||
fi
|
||||
echo -e "\e[36m==> Distro WSL : $DISTRO_NAME\e[0m"
|
||||
|
||||
# Traduit le dossier du script en chemin WSL.
|
||||
SCRIPT_DIR_WIN="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -W)"
|
||||
SCRIPT_PATH_WSL=$(MSYS_NO_PATHCONV=1 wsl.exe -d "$DISTRO_NAME" -u root -- \
|
||||
wslpath "$(echo "$SCRIPT_DIR_WIN" | sed 's|/|\\\\|g')/build-offi.sh" \
|
||||
2>/dev/null | tr -d '\r\n')
|
||||
[ -n "$SCRIPT_PATH_WSL" ] || {
|
||||
echo -e "\e[31mTraduction du chemin vers WSL échouée (wslpath). Vérifie ARCH_WSL_DISTRO ($DISTRO_NAME).\e[0m" >&2
|
||||
exit 1
|
||||
}
|
||||
wsl.exe -d "$DISTRO_NAME" -u root -- test -f "$SCRIPT_PATH_WSL" || {
|
||||
echo -e "\e[31mScript introuvable dans WSL : $SCRIPT_PATH_WSL\e[0m" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Relance ce même script dans WSL, en root, depuis son vrai chemin
|
||||
# (BASH_SOURCE → WORK_DIR correct). Les fins de ligne sont garanties LF
|
||||
# par .gitattributes (*.sh text eol=lf) ; le profil copié est en plus
|
||||
# passé à dos2unix plus loin.
|
||||
echo "==> Script à exécuter dans WSL : $SCRIPT_PATH_WSL"
|
||||
MSYS_NO_PATHCONV=1 wsl.exe -d "$DISTRO_NAME" -u root -- bash "$SCRIPT_PATH_WSL"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Bascule conteneur : hôte non-Arch (Fedora, Ubuntu, …) →
|
||||
# build dans un conteneur Arch via podman.
|
||||
#
|
||||
# mkarchiso exige pacman + des mounts/chroot/loop privilégiés que
|
||||
# seul un environnement Arch fournit. Sur un hôte non-Arch on relance
|
||||
# CE script à l'identique dans docker.io/library/archlinux:latest, le
|
||||
# dépôt monté au MÊME chemin absolu (→ WORK_DIR et out/ inchangés).
|
||||
# podman ROOTFUL + --privileged obligatoire : rootless ne gère pas les
|
||||
# mounts/chroot de mkarchiso (et --privileged relâche aussi SELinux,
|
||||
# enforcing sur Fedora, sur le bind-mount sans avoir besoin de :Z).
|
||||
# ============================================================
|
||||
host_is_arch() {
|
||||
# Fedora empaquette aussi « pacman » → sa seule présence ne suffit pas ;
|
||||
# on exige en plus un ID/ID_LIKE « arch » dans /etc/os-release.
|
||||
command -v pacman >/dev/null 2>&1 \
|
||||
&& grep -qiE '^ID(_LIKE)?=.*arch' /etc/os-release 2>/dev/null
|
||||
}
|
||||
|
||||
if [ -z "$FWS_IN_CONTAINER" ] && ! host_is_arch; then
|
||||
echo -e "\e[36mHôte non-Arch détecté — build officiel dans un conteneur Arch (podman)...\e[0m"
|
||||
|
||||
command -v podman >/dev/null 2>&1 || {
|
||||
echo -e "\e[31mpodman introuvable.\e[0m" >&2
|
||||
echo " Fedora : sudo dnf install -y podman" >&2
|
||||
echo " Debian/Ubuntu : sudo apt install -y podman" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Rootful : préfixe sudo si on n'est pas déjà root.
|
||||
SUDO=(); [ "$EUID" -eq 0 ] || SUDO=(sudo)
|
||||
# -it seulement si on est dans un terminal (sinon podman casse en CI).
|
||||
TTY=(); [ -t 0 ] && TTY=(-it)
|
||||
|
||||
REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
SELF="$(basename "${BASH_SOURCE[0]}")"
|
||||
IMAGE="docker.io/library/archlinux:latest"
|
||||
|
||||
# pull explicite : « run » ne re-résout jamais le tag « latest » une fois
|
||||
# l'image en cache → sans ça on build indéfiniment sur une image qui
|
||||
# vieillit (puis partial upgrades pacman). Le -Syu côté conteneur (plus
|
||||
# bas) complète la parade.
|
||||
echo "==> Pull de l'image $IMAGE..."
|
||||
"${SUDO[@]}" podman pull "$IMAGE"
|
||||
|
||||
echo "==> Relance dans le conteneur ($SELF)..."
|
||||
# --network=host : le réseau bridge de podman ne route plus vers l'extérieur
|
||||
# sur ce wifi (firewalld/NAT cassé après changement de réseau → « core.db :
|
||||
# Resolving timed out », même avec --dns). En partageant la pile réseau de
|
||||
# l'hôte (qui, lui, a internet + DNS via 127.0.0.53/systemd-resolved joignable
|
||||
# dans son propre netns), le conteneur récupère une connectivité identique.
|
||||
"${SUDO[@]}" podman run --rm "${TTY[@]}" --network=host --privileged \
|
||||
-e FWS_IN_CONTAINER=1 \
|
||||
-v "$REPO_DIR":"$REPO_DIR" \
|
||||
-v fws-pacman-cache:/var/cache/pacman/pkg \
|
||||
-w "$REPO_DIR" \
|
||||
"$IMAGE" \
|
||||
bash "$REPO_DIR/$SELF"
|
||||
|
||||
# podman rootful → les fichiers produits (out/) appartiennent à root.
|
||||
# On les rend au propriétaire du dépôt pour confort côté hôte.
|
||||
OWNER="$(stat -c '%u:%g' "$REPO_DIR" 2>/dev/null || true)"
|
||||
if [ -n "$OWNER" ]; then
|
||||
for d in out local-repo; do
|
||||
[ -e "$REPO_DIR/$d" ] && "${SUDO[@]}" chown -R "$OWNER" "$REPO_DIR/$d" 2>/dev/null || true
|
||||
done
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Exécution native (Arch Linux bare-metal, WSL, OU conteneur Arch)
|
||||
# ============================================================
|
||||
command -v pacman >/dev/null \
|
||||
|| { echo -e "\e[31mpacman introuvable — lance ce script depuis Arch / WSL.\e[0m"; exit 1; }
|
||||
|
||||
# mkarchiso exige root. Sur Arch natif on s'élève (sudo de préférence,
|
||||
# sinon su) ; depuis la bascule Git Bash on est déjà root (-u root).
|
||||
# $0 est cité pour gérer les chemins à espaces (ex. "1. FWS").
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
if command -v sudo >/dev/null 2>&1; then
|
||||
exec sudo bash "$0" "$@"
|
||||
else
|
||||
exec su -c "bash \"$0\"" root
|
||||
fi
|
||||
fi
|
||||
|
||||
if grep -qi 'microsoft\|wsl' /proc/version 2>/dev/null; then
|
||||
echo -e "\e[36mBuild officiel dans WSL ($DISTRO_NAME) en tant que root...\e[0m"
|
||||
IS_WSL=1
|
||||
else
|
||||
echo -e "\e[36mBuild officiel sur Arch Linux natif en tant que root...\e[0m"
|
||||
IS_WSL=0
|
||||
fi
|
||||
|
||||
# Le dossier de travail = dossier qui contient ce script (gère les
|
||||
# espaces du chemin, ex. "1. FWS").
|
||||
WORK_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
echo "==> Dossier de travail : $WORK_DIR"
|
||||
|
||||
# ============================================================
|
||||
# Version (major.minor.build) + nom de la variante.
|
||||
# La version est DEMANDÉE ; le fichier VERSION sert de DÉFAUT (taper Entrée =
|
||||
# reprendre sa valeur). Produit fws-<major.minor.build>-<nom>.iso
|
||||
# (ex. fws-1.5.0-cli.iso). Nécessite un terminal (read).
|
||||
# ============================================================
|
||||
# Défaut éventuel lu dans le fichier VERSION (doit être major.minor.build).
|
||||
VERSION_FILE="$WORK_DIR/VERSION"
|
||||
VERSION_DEFAULT=""
|
||||
if [ -f "$VERSION_FILE" ]; then
|
||||
VERSION_DEFAULT="$(tr -d ' \t\r\n' < "$VERSION_FILE")"
|
||||
[[ "$VERSION_DEFAULT" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || VERSION_DEFAULT=""
|
||||
fi
|
||||
|
||||
while :; do
|
||||
if [ -n "$VERSION_DEFAULT" ]; then
|
||||
read -rp "==> Version (major.minor.build) [Entrée = $VERSION_DEFAULT] : " VERSION \
|
||||
|| { echo -e "\e[31mEntrée requise — lance le script en interactif.\e[0m" >&2; exit 1; }
|
||||
[ -n "$VERSION" ] || VERSION="$VERSION_DEFAULT" # vide → on reprend le fichier VERSION
|
||||
else
|
||||
read -rp "==> Version (major.minor.build, ex. 1.5.0) : " VERSION \
|
||||
|| { echo -e "\e[31mEntrée requise — lance le script en interactif.\e[0m" >&2; exit 1; }
|
||||
fi
|
||||
[[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] && break
|
||||
echo -e "\e[31m Format attendu : major.minor.build (ex. 1.5.0)\e[0m" >&2
|
||||
done
|
||||
while :; do
|
||||
read -rp "==> Nom de la variante (ex. cli, gnome, kde) : " ISO_TAG \
|
||||
|| { echo -e "\e[31mEntrée requise — lance le script en interactif.\e[0m" >&2; exit 1; }
|
||||
# normalise : minuscules, lettres / chiffres / tirets uniquement
|
||||
ISO_TAG="$(printf '%s' "$ISO_TAG" | tr '[:upper:]' '[:lower:]' | tr -cd 'a-z0-9-')"
|
||||
[ -n "$ISO_TAG" ] && break
|
||||
echo -e "\e[31m Nom requis (lettres, chiffres, tirets)\e[0m" >&2
|
||||
done
|
||||
|
||||
IFS='.' read -r MAJOR MINOR BUILD <<< "$VERSION"
|
||||
# iso_version interne (passé à mkarchiso) ; l'ISO finale est renommée plus bas.
|
||||
ISO_VERSION="${VERSION}-${ISO_TAG}"
|
||||
OUT_DIR="$WORK_DIR/out/v${MAJOR}/v${MAJOR}.${MINOR}"
|
||||
ISO_FILE="$OUT_DIR/fws-${VERSION}-${ISO_TAG}.iso"
|
||||
|
||||
echo "==> Version : ${VERSION} · variante : ${ISO_TAG}"
|
||||
echo "==> ISO finale : fws-${VERSION}-${ISO_TAG}.iso"
|
||||
echo "==> Dossier : $OUT_DIR"
|
||||
|
||||
# pacman ≥ 7 sandboxe les ops FS via landlock, non supporté par le kernel
|
||||
# WSL ni (selon le noyau) par le conteneur → désactivation. Idempotent,
|
||||
# sans effet sur Arch natif.
|
||||
if { [ "$IS_WSL" -eq 1 ] || [ -n "$FWS_IN_CONTAINER" ]; } \
|
||||
&& ! grep -qE '^[[:space:]]*DisableSandbox' /etc/pacman.conf; then
|
||||
sed -i '/^\[options\]/a DisableSandbox' /etc/pacman.conf
|
||||
echo "==> WSL/conteneur détecté → DisableSandbox ajouté à /etc/pacman.conf"
|
||||
fi
|
||||
|
||||
echo "==> Mise à jour des miroirs et installation de archiso..."
|
||||
pacman -Sy --noconfirm reflector || true
|
||||
reflector --verbose --latest 10 --sort rate --save /etc/pacman.d/mirrorlist || true
|
||||
if [ -n "$FWS_IN_CONTAINER" ]; then
|
||||
# Image de base qui vieillit → upgrade complet AVANT d'ajouter archiso,
|
||||
# sinon partial upgrade (archiso tire des deps plus récentes que la base).
|
||||
pacman -Syu --noconfirm archiso
|
||||
else
|
||||
pacman -Sy --noconfirm archiso
|
||||
fi
|
||||
|
||||
echo "==> Préparation de l'environnement de build..."
|
||||
rm -rf /tmp/fws-build
|
||||
mkdir -p /tmp/fws-build/releng
|
||||
|
||||
# Copie configs/releng/ en base
|
||||
if [ -d "$WORK_DIR/configs/releng" ]; then
|
||||
cp -ar "$WORK_DIR/configs/releng/"* /tmp/fws-build/releng/
|
||||
echo "==> configs/releng/ copié"
|
||||
fi
|
||||
|
||||
# Fusionne configs/baseline/ par dessus (priorité aux fichiers baseline)
|
||||
if [ -d "$WORK_DIR/configs/baseline" ]; then
|
||||
cp -ar "$WORK_DIR/configs/baseline/"* /tmp/fws-build/releng/
|
||||
echo "==> configs/baseline/ fusionné (prioritaire)"
|
||||
fi
|
||||
|
||||
# ── Injection de la version dans profiledef.sh (copie temporaire) ──
|
||||
# mkarchiso nomme l'ISO ${iso_name}-${iso_version}-${arch}.iso.
|
||||
# On force iso_version pour obtenir vMAJOR-MINOR-BUILD-DATE.
|
||||
if [ -f /tmp/fws-build/releng/profiledef.sh ]; then
|
||||
sed -i "s|^iso_version=.*|iso_version=\"${ISO_VERSION}\"|" \
|
||||
/tmp/fws-build/releng/profiledef.sh
|
||||
echo "==> iso_version forcé à '${ISO_VERSION}' dans profiledef.sh"
|
||||
else
|
||||
echo -e "\e[31mprofiledef.sh introuvable dans le profil de build.\e[0m"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "==> Activation de NetworkManager.service sur le live (symlink réel)..."
|
||||
mkdir -p /tmp/fws-build/releng/airootfs/etc/systemd/system/multi-user.target.wants
|
||||
ln -sf /usr/lib/systemd/system/NetworkManager.service \
|
||||
/tmp/fws-build/releng/airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service
|
||||
|
||||
echo "==> Vérification des services systemd..."
|
||||
ls /tmp/fws-build/releng/airootfs/etc/systemd/system/ 2>/dev/null || echo " (aucun service)"
|
||||
ls /tmp/fws-build/releng/airootfs/etc/systemd/system/multi-user.target.wants/ 2>/dev/null || echo " (aucun symlink)"
|
||||
|
||||
# Copie le repo local (winboat-bin + deps Anaconda packagées)
|
||||
if ls "$WORK_DIR/local-repo/"*.pkg.tar.zst &>/dev/null 2>&1; then
|
||||
echo "==> Copie du repo local fws-local..."
|
||||
mkdir -p /tmp/fws-build/local-repo
|
||||
cp -a "$WORK_DIR/local-repo/"* /tmp/fws-build/local-repo/
|
||||
|
||||
echo "==> Injection [fws-local] dans pacman.conf..."
|
||||
sed -i '/^\[fws-local\]/,/^$/d' /tmp/fws-build/releng/pacman.conf
|
||||
PACMAN_TMP=$(mktemp)
|
||||
printf '[fws-local]\nSigLevel = Optional TrustAll\nServer = file:///tmp/fws-build/local-repo\n\n' \
|
||||
> "$PACMAN_TMP"
|
||||
cat /tmp/fws-build/releng/pacman.conf >> "$PACMAN_TMP"
|
||||
mv "$PACMAN_TMP" /tmp/fws-build/releng/pacman.conf
|
||||
|
||||
echo "==> Vérification pacman.conf :"
|
||||
head -5 /tmp/fws-build/releng/pacman.conf
|
||||
else
|
||||
echo "==> Aucun repo local détecté."
|
||||
fi
|
||||
|
||||
echo "==> Correction des retours à la ligne Windows (dos2unix)..."
|
||||
pacman -S --needed --noconfirm dos2unix
|
||||
find /tmp/fws-build/releng -type f -exec dos2unix {} + 2>/dev/null
|
||||
|
||||
echo "==> Lancement de mkarchiso..."
|
||||
mkdir -p "$OUT_DIR"
|
||||
# mkarchiso supprime l'ISO cible avant de la réécrire : si elle est VERROUILLÉE
|
||||
# par Windows (VM ouverte dessus, ISO montée), ce rm casse tout le build à la
|
||||
# fin. Parade : staging neuf puis déplacement ; si la cible (cette même
|
||||
# version) est verrouillée, on bascule sur un nom horodaté. On ne touche
|
||||
# jamais aux ISO des autres versions.
|
||||
STAGE="$OUT_DIR/.staging-$$"
|
||||
rm -rf "$STAGE"; mkdir -p "$STAGE"
|
||||
mkarchiso -v -w /tmp/fws-build/work -o "$STAGE" /tmp/fws-build/releng
|
||||
|
||||
NEW_ISO="$(ls -1 "$STAGE/"*.iso 2>/dev/null | head -1)"
|
||||
[ -n "$NEW_ISO" ] || { echo -e "\e[31mAucune ISO produite par mkarchiso.\e[0m" >&2; exit 1; }
|
||||
if { chmod -f 666 "$ISO_FILE" 2>/dev/null; rm -f "$ISO_FILE" 2>/dev/null; } && mv -f "$NEW_ISO" "$ISO_FILE" 2>/dev/null; then
|
||||
FINAL="$ISO_FILE"
|
||||
else
|
||||
FINAL="${ISO_FILE%.iso}-$(date +%H%M%S).iso"
|
||||
echo -e "\e[33m[!] '$ISO_FILE' est verrouillée (une VM l'utilise ?). Écriture sous un nom unique.\e[0m" >&2
|
||||
mv -f "$NEW_ISO" "$FINAL"
|
||||
fi
|
||||
rm -rf "$STAGE" 2>/dev/null || true
|
||||
|
||||
echo "==> Nettoyage..."
|
||||
rm -rf /tmp/fws-build/work
|
||||
|
||||
echo "==> Build officiel terminé ! ISO : $FINAL"
|
||||
echo -e "\e[32mScript de build officiel (fws-${VERSION}-${ISO_TAG}) terminé avec succès.\e[0m"
|
||||
@@ -1,54 +1,229 @@
|
||||
#!/bin/bash
|
||||
|
||||
export MSYS_NO_PATHCONV=1
|
||||
# ============================================================
|
||||
# FWS — Build de l'ISO via mkarchiso (archiso)
|
||||
#
|
||||
# Fonctionne sur :
|
||||
# - Windows 10 / 11 (Git Bash → bascule auto dans WSL Arch)
|
||||
# - Arch Linux natif (exécution directe)
|
||||
# - WSL Arch lancé directement (exécution directe)
|
||||
#
|
||||
# Nom de la distro WSL : "Arch" par défaut, ou $ARCH_WSL_DISTRO,
|
||||
# ou auto-détecté parmi les noms courants.
|
||||
# ============================================================
|
||||
|
||||
set -e
|
||||
trap 'echo -e "\e[31mErreur lors de l execution (build.sh).\e[0m"; exit 1' ERR
|
||||
trap 'rc=$?; echo -e "\e[31mÉchec (build.sh) ligne $LINENO, code $rc.\e[0m" >&2; exit $rc' ERR
|
||||
|
||||
DISTRO_NAME="Arch"
|
||||
DISTRO_NAME="${ARCH_WSL_DISTRO:-Arch}"
|
||||
|
||||
if [ -n "$WSL_DISTRO_NAME" ]; then
|
||||
echo -e "\e[36mBuild exécuté depuis WSL ($WSL_DISTRO_NAME) en tant que root...\e[0m"
|
||||
IN_WSL=1
|
||||
else
|
||||
echo -e "\e[36mLancement du processus de build dans WSL ($DISTRO_NAME) en tant que root...\e[0m"
|
||||
# ============================================================
|
||||
# Bascule Git Bash (Windows 10/11) → WSL si besoin
|
||||
# ============================================================
|
||||
if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" || -n "$WINDIR" ]]; then
|
||||
echo -e "\e[36mGit Bash détecté — bascule dans WSL ($DISTRO_NAME)...\e[0m"
|
||||
export MSYS_NO_PATHCONV=1
|
||||
export MSYS2_ARG_CONV_EXCL="*"
|
||||
|
||||
# WSL doit être présent (sinon message clair plutôt que command not found).
|
||||
command -v wsl.exe >/dev/null 2>&1 || {
|
||||
echo -e "\e[31mWSL introuvable. Installe WSL2 puis une distro Arch :\e[0m" >&2
|
||||
echo " 1) PowerShell admin : wsl --install" >&2
|
||||
echo " 2) Installe Arch (ArchWSL, ou 'wsl --install -d archlinux') puis relance." >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Choix de la distro Arch : override $ARCH_WSL_DISTRO, sinon nom exact,
|
||||
# sinon 1re distro « arch » réellement joignable. On énumère via
|
||||
# `wsl -l -q` (sortie UTF-16LE → on retire NUL/CR) au lieu d'une liste
|
||||
# figée, mais on garde la sonde « echo ok » (une distro listée peut
|
||||
# être en cours d'install / cassée).
|
||||
pick_arch_distro() {
|
||||
wsl.exe -d "$DISTRO_NAME" -u root -- echo ok >/dev/null 2>&1 && return 0
|
||||
local d distros=()
|
||||
mapfile -t distros < <(wsl.exe -l -q 2>/dev/null | tr -d '\0\r' | sed 's/[[:space:]]*$//;/^$/d')
|
||||
for d in "${distros[@]}"; do
|
||||
[[ "$d" == "$DISTRO_NAME" ]] || continue
|
||||
wsl.exe -d "$d" -u root -- echo ok >/dev/null 2>&1 && { DISTRO_NAME="$d"; return 0; }
|
||||
done
|
||||
for d in "${distros[@]}"; do
|
||||
[[ "$d" =~ [Aa][Rr][Cc][Hh] ]] || continue
|
||||
wsl.exe -d "$d" -u root -- echo ok >/dev/null 2>&1 && { DISTRO_NAME="$d"; return 0; }
|
||||
done
|
||||
return 1
|
||||
}
|
||||
if ! pick_arch_distro; then
|
||||
echo -e "\e[31mAucune distribution WSL Arch joignable.\e[0m" >&2
|
||||
echo "Distros WSL installées :" >&2
|
||||
wsl.exe -l -v 2>/dev/null | tr -d '\0' >&2 || true
|
||||
echo "" >&2
|
||||
echo "Installe Arch dans WSL puis relance :" >&2
|
||||
echo " - ArchWSL (yuk7) — s'enregistre sous 'Arch' : https://github.com/yuk7/ArchWSL/releases/latest" >&2
|
||||
echo " - ou image officielle : wsl --install -d archlinux (nom 'archlinux')" >&2
|
||||
echo "Distro sous un autre nom ? export ARCH_WSL_DISTRO=<nom> (cf. 'wsl -l -v' ci-dessus)." >&2
|
||||
exit 1
|
||||
fi
|
||||
echo -e "\e[36m==> Distro WSL : $DISTRO_NAME\e[0m"
|
||||
|
||||
# Traduit le dossier du script en chemin WSL.
|
||||
SCRIPT_DIR_WIN="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -W)"
|
||||
SCRIPT_PATH_WSL=$(MSYS_NO_PATHCONV=1 wsl.exe -d "$DISTRO_NAME" -u root -- \
|
||||
wslpath "$(echo "$SCRIPT_DIR_WIN" | sed 's|/|\\\\|g')/build.sh" \
|
||||
2>/dev/null | tr -d '\r\n')
|
||||
[ -n "$SCRIPT_PATH_WSL" ] || {
|
||||
echo -e "\e[31mTraduction du chemin vers WSL échouée (wslpath). Vérifie ARCH_WSL_DISTRO ($DISTRO_NAME).\e[0m" >&2
|
||||
exit 1
|
||||
}
|
||||
wsl.exe -d "$DISTRO_NAME" -u root -- test -f "$SCRIPT_PATH_WSL" || {
|
||||
echo -e "\e[31mScript introuvable dans WSL : $SCRIPT_PATH_WSL\e[0m" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Relance ce même script dans WSL, en root, depuis son vrai chemin
|
||||
# (BASH_SOURCE → WORK_DIR correct). Les fins de ligne sont garanties LF
|
||||
# par .gitattributes (*.sh text eol=lf) ; le profil copié est en plus
|
||||
# passé à dos2unix plus loin.
|
||||
echo "==> Script à exécuter dans WSL : $SCRIPT_PATH_WSL"
|
||||
MSYS_NO_PATHCONV=1 wsl.exe -d "$DISTRO_NAME" -u root -- bash "$SCRIPT_PATH_WSL"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ -z "$IN_WSL" ]; then
|
||||
# ── Depuis Git Bash ──────────────────────────────────────
|
||||
SCRIPT_DIR_WIN="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -W)"
|
||||
WORK_DIR_WSL=$(MSYS_NO_PATHCONV=1 wsl.exe -d "$DISTRO_NAME" -u root -- \
|
||||
wslpath "$(echo "$SCRIPT_DIR_WIN" | sed 's|/|\\\\|g')" 2>/dev/null | tr -d '\r\n')
|
||||
# ============================================================
|
||||
# Bascule conteneur : hôte non-Arch (Fedora, Ubuntu, …) →
|
||||
# build dans un conteneur Arch via podman.
|
||||
#
|
||||
# mkarchiso exige pacman + des mounts/chroot/loop privilégiés que
|
||||
# seul un environnement Arch fournit. Sur un hôte non-Arch on relance
|
||||
# CE script à l'identique dans docker.io/library/archlinux:latest, le
|
||||
# dépôt monté au MÊME chemin absolu (→ WORK_DIR et out/ inchangés).
|
||||
# podman ROOTFUL + --privileged obligatoire : rootless ne gère pas les
|
||||
# mounts/chroot de mkarchiso (et --privileged relâche aussi SELinux,
|
||||
# enforcing sur Fedora, sur le bind-mount sans avoir besoin de :Z).
|
||||
# ============================================================
|
||||
host_is_arch() {
|
||||
# Fedora empaquette aussi « pacman » → sa seule présence ne suffit pas ;
|
||||
# on exige en plus un ID/ID_LIKE « arch » dans /etc/os-release.
|
||||
command -v pacman >/dev/null 2>&1 \
|
||||
&& grep -qiE '^ID(_LIKE)?=.*arch' /etc/os-release 2>/dev/null
|
||||
}
|
||||
|
||||
echo "==> Dossier de travail WSL : $WORK_DIR_WSL"
|
||||
if [ -z "$FWS_IN_CONTAINER" ] && ! host_is_arch; then
|
||||
echo -e "\e[36mHôte non-Arch détecté — build dans un conteneur Arch (podman)...\e[0m"
|
||||
|
||||
MSYS_NO_PATHCONV=1 wsl.exe -d "$DISTRO_NAME" -u root -- bash << EOF
|
||||
set -e
|
||||
WORK_DIR="${WORK_DIR_WSL}"
|
||||
echo "==> Dossier de travail : \$WORK_DIR"
|
||||
command -v podman >/dev/null 2>&1 || {
|
||||
echo -e "\e[31mpodman introuvable.\e[0m" >&2
|
||||
echo " Fedora : sudo dnf install -y podman" >&2
|
||||
echo " Debian/Ubuntu : sudo apt install -y podman" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Rootful : préfixe sudo si on n'est pas déjà root.
|
||||
SUDO=(); [ "$EUID" -eq 0 ] || SUDO=(sudo)
|
||||
# -it seulement si on est dans un terminal (sinon podman casse en CI).
|
||||
TTY=(); [ -t 0 ] && TTY=(-it)
|
||||
|
||||
REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
SELF="$(basename "${BASH_SOURCE[0]}")"
|
||||
IMAGE="docker.io/library/archlinux:latest"
|
||||
|
||||
# pull explicite : « run » ne re-résout jamais le tag « latest » une fois
|
||||
# l'image en cache → sans ça on build indéfiniment sur une image qui
|
||||
# vieillit (puis partial upgrades pacman). Le -Syu côté conteneur (plus
|
||||
# bas) complète la parade.
|
||||
echo "==> Pull de l'image $IMAGE..."
|
||||
"${SUDO[@]}" podman pull "$IMAGE"
|
||||
|
||||
echo "==> Relance dans le conteneur ($SELF)..."
|
||||
# --network=host : le réseau bridge de podman ne route plus vers l'extérieur
|
||||
# sur ce wifi (firewalld/NAT cassé après changement de réseau → « core.db :
|
||||
# Resolving timed out », même avec --dns). En partageant la pile réseau de
|
||||
# l'hôte (qui, lui, a internet + DNS via 127.0.0.53/systemd-resolved joignable
|
||||
# dans son propre netns), le conteneur récupère une connectivité identique.
|
||||
"${SUDO[@]}" podman run --rm "${TTY[@]}" --network=host --privileged \
|
||||
-e FWS_IN_CONTAINER=1 \
|
||||
-v "$REPO_DIR":"$REPO_DIR" \
|
||||
-v fws-pacman-cache:/var/cache/pacman/pkg \
|
||||
-w "$REPO_DIR" \
|
||||
"$IMAGE" \
|
||||
bash "$REPO_DIR/$SELF"
|
||||
|
||||
# podman rootful → les fichiers produits (out/) appartiennent à root.
|
||||
# On les rend au propriétaire du dépôt pour confort côté hôte.
|
||||
OWNER="$(stat -c '%u:%g' "$REPO_DIR" 2>/dev/null || true)"
|
||||
if [ -n "$OWNER" ]; then
|
||||
for d in out local-repo; do
|
||||
[ -e "$REPO_DIR/$d" ] && "${SUDO[@]}" chown -R "$OWNER" "$REPO_DIR/$d" 2>/dev/null || true
|
||||
done
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# ============================================================
|
||||
# Exécution native (Arch Linux bare-metal, WSL, OU conteneur Arch)
|
||||
# ============================================================
|
||||
command -v pacman >/dev/null \
|
||||
|| { echo -e "\e[31mpacman introuvable — lance ce script depuis Arch / WSL.\e[0m"; exit 1; }
|
||||
|
||||
# mkarchiso exige root. Sur Arch natif on s'élève (sudo de préférence,
|
||||
# sinon su) ; depuis la bascule Git Bash on est déjà root (-u root).
|
||||
# $0 est cité pour gérer les chemins à espaces (ex. "1. FWS").
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
if command -v sudo >/dev/null 2>&1; then
|
||||
exec sudo bash "$0" "$@"
|
||||
else
|
||||
exec su -c "bash \"$0\"" root
|
||||
fi
|
||||
fi
|
||||
|
||||
if grep -qi 'microsoft\|wsl' /proc/version 2>/dev/null; then
|
||||
echo -e "\e[36mBuild exécuté dans WSL ($DISTRO_NAME) en tant que root...\e[0m"
|
||||
IS_WSL=1
|
||||
else
|
||||
echo -e "\e[36mBuild exécuté sur Arch Linux natif en tant que root...\e[0m"
|
||||
IS_WSL=0
|
||||
fi
|
||||
|
||||
# Le dossier de travail = dossier qui contient ce script (gère les
|
||||
# espaces du chemin, ex. "1. FWS").
|
||||
WORK_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
echo "==> Dossier de travail : $WORK_DIR"
|
||||
|
||||
# pacman ≥ 7 sandboxe les ops FS via landlock, non supporté par le kernel
|
||||
# WSL ni (selon le noyau) par le conteneur → désactivation. Idempotent,
|
||||
# sans effet sur Arch natif.
|
||||
if { [ "$IS_WSL" -eq 1 ] || [ -n "$FWS_IN_CONTAINER" ]; } \
|
||||
&& ! grep -qE '^[[:space:]]*DisableSandbox' /etc/pacman.conf; then
|
||||
sed -i '/^\[options\]/a DisableSandbox' /etc/pacman.conf
|
||||
echo "==> WSL/conteneur détecté → DisableSandbox ajouté à /etc/pacman.conf"
|
||||
fi
|
||||
|
||||
echo "==> Mise à jour des miroirs et installation de archiso..."
|
||||
pacman -Sy --noconfirm reflector || true
|
||||
reflector --verbose --latest 10 --sort rate --save /etc/pacman.d/mirrorlist || true
|
||||
pacman -Sy --noconfirm archiso
|
||||
if [ -n "$FWS_IN_CONTAINER" ]; then
|
||||
# Image de base qui vieillit → upgrade complet AVANT d'ajouter archiso,
|
||||
# sinon partial upgrade (archiso tire des deps plus récentes que la base).
|
||||
pacman -Syu --noconfirm archiso
|
||||
else
|
||||
pacman -Sy --noconfirm archiso
|
||||
fi
|
||||
|
||||
echo "==> Préparation de l'environnement de build..."
|
||||
rm -rf /tmp/fws-build
|
||||
mkdir -p /tmp/fws-build/releng
|
||||
|
||||
# Copie configs/releng/ en base
|
||||
if [ -d "\$WORK_DIR/configs/releng" ]; then
|
||||
cp -ar "\$WORK_DIR/configs/releng/"* /tmp/fws-build/releng/
|
||||
if [ -d "$WORK_DIR/configs/releng" ]; then
|
||||
cp -ar "$WORK_DIR/configs/releng/"* /tmp/fws-build/releng/
|
||||
echo "==> configs/releng/ copié"
|
||||
fi
|
||||
|
||||
# Fusionne configs/baseline/ par dessus (priorité aux fichiers baseline)
|
||||
if [ -d "\$WORK_DIR/configs/baseline" ]; then
|
||||
cp -ar "\$WORK_DIR/configs/baseline/"* /tmp/fws-build/releng/
|
||||
if [ -d "$WORK_DIR/configs/baseline" ]; then
|
||||
cp -ar "$WORK_DIR/configs/baseline/"* /tmp/fws-build/releng/
|
||||
echo "==> configs/baseline/ fusionné (prioritaire)"
|
||||
fi
|
||||
|
||||
echo "==> Activation de NetworkManager.service sur le live (symlink réel WSL)..."
|
||||
echo "==> Activation de NetworkManager.service sur le live (symlink réel)..."
|
||||
mkdir -p /tmp/fws-build/releng/airootfs/etc/systemd/system/multi-user.target.wants
|
||||
ln -sf /usr/lib/systemd/system/NetworkManager.service \
|
||||
/tmp/fws-build/releng/airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service
|
||||
@@ -57,19 +232,19 @@ echo "==> Vérification des services systemd..."
|
||||
ls /tmp/fws-build/releng/airootfs/etc/systemd/system/ 2>/dev/null || echo " (aucun service)"
|
||||
ls /tmp/fws-build/releng/airootfs/etc/systemd/system/multi-user.target.wants/ 2>/dev/null || echo " (aucun symlink)"
|
||||
|
||||
# Copie le repo local (calamares + winboat-bin)
|
||||
if ls "\$WORK_DIR/local-repo/"*.pkg.tar.zst &>/dev/null 2>&1; then
|
||||
echo "==> Copie du repo local Calamares..."
|
||||
# Copie le repo local (winboat-bin + deps Anaconda packagées)
|
||||
if ls "$WORK_DIR/local-repo/"*.pkg.tar.zst &>/dev/null 2>&1; then
|
||||
echo "==> Copie du repo local fws-local..."
|
||||
mkdir -p /tmp/fws-build/local-repo
|
||||
cp -a "\$WORK_DIR/local-repo/"* /tmp/fws-build/local-repo/
|
||||
cp -a "$WORK_DIR/local-repo/"* /tmp/fws-build/local-repo/
|
||||
|
||||
echo "==> Injection [fws-local] dans pacman.conf..."
|
||||
sed -i '/^\[fws-local\]/,/^$/d' /tmp/fws-build/releng/pacman.conf
|
||||
PACMAN_TMP=\$(mktemp)
|
||||
PACMAN_TMP=$(mktemp)
|
||||
printf '[fws-local]\nSigLevel = Optional TrustAll\nServer = file:///tmp/fws-build/local-repo\n\n' \
|
||||
> "\$PACMAN_TMP"
|
||||
cat /tmp/fws-build/releng/pacman.conf >> "\$PACMAN_TMP"
|
||||
mv "\$PACMAN_TMP" /tmp/fws-build/releng/pacman.conf
|
||||
> "$PACMAN_TMP"
|
||||
cat /tmp/fws-build/releng/pacman.conf >> "$PACMAN_TMP"
|
||||
mv "$PACMAN_TMP" /tmp/fws-build/releng/pacman.conf
|
||||
|
||||
echo "==> Vérification pacman.conf :"
|
||||
head -5 /tmp/fws-build/releng/pacman.conf
|
||||
@@ -82,83 +257,31 @@ pacman -S --needed --noconfirm dos2unix
|
||||
find /tmp/fws-build/releng -type f -exec dos2unix {} + 2>/dev/null
|
||||
|
||||
echo "==> Lancement de mkarchiso..."
|
||||
mkdir -p "\$WORK_DIR/out"
|
||||
chmod -f 777 "\$WORK_DIR/out/"FWS-*.iso 2>/dev/null || true
|
||||
rm -f "\$WORK_DIR/out/"FWS-*.iso 2>/dev/null || true
|
||||
mkarchiso -v -w /tmp/fws-build/work -o "\$WORK_DIR/out" /tmp/fws-build/releng
|
||||
mkdir -p "$WORK_DIR/out"
|
||||
# mkarchiso fait un « rm » interne de l'ISO cible avant de la (ré)écrire ; si
|
||||
# une ISO du même nom est VERROUILLÉE par Windows (VM encore ouverte dessus,
|
||||
# ISO montée, antivirus), ce rm échoue et tout le build casse à la toute fin.
|
||||
# Parade : mkarchiso écrit dans un dossier de staging neuf, puis on déplace
|
||||
# l'ISO. Si la cible est verrouillée, on bascule sur un nom horodaté → le
|
||||
# build réussit quand même au lieu de tout perdre.
|
||||
STAGE="$WORK_DIR/out/.staging-$$"
|
||||
rm -rf "$STAGE"; mkdir -p "$STAGE"
|
||||
mkarchiso -v -w /tmp/fws-build/work -o "$STAGE" /tmp/fws-build/releng
|
||||
|
||||
NEW_ISO="$(ls -1 "$STAGE/"*.iso 2>/dev/null | head -1)"
|
||||
[ -n "$NEW_ISO" ] || { echo -e "\e[31mAucune ISO produite par mkarchiso.\e[0m" >&2; exit 1; }
|
||||
DEST="$WORK_DIR/out/$(basename "$NEW_ISO")"
|
||||
if { chmod -f 666 "$DEST" 2>/dev/null; rm -f "$DEST" 2>/dev/null; } && mv -f "$NEW_ISO" "$DEST" 2>/dev/null; then
|
||||
FINAL="$DEST"
|
||||
else
|
||||
FINAL="$WORK_DIR/out/$(basename "${NEW_ISO%.iso}")-$(date +%H%M%S).iso"
|
||||
echo -e "\e[33m[!] '$DEST' est verrouillée (une VM l'utilise ?). Écriture sous un nom unique.\e[0m" >&2
|
||||
mv -f "$NEW_ISO" "$FINAL"
|
||||
fi
|
||||
rm -rf "$STAGE" 2>/dev/null || true
|
||||
|
||||
echo "==> Nettoyage..."
|
||||
rm -rf /tmp/fws-build/work
|
||||
|
||||
echo "==> Build terminé ! ISO dans \$WORK_DIR/out"
|
||||
EOF
|
||||
|
||||
else
|
||||
# ── Déjà dans WSL ────────────────────────────────────────
|
||||
WORK_DIR="$PWD"
|
||||
echo "==> Dossier de travail : $WORK_DIR"
|
||||
|
||||
echo "==> Mise à jour et installation de archiso..."
|
||||
pacman -Sy --noconfirm reflector || true
|
||||
reflector --verbose --latest 10 --sort rate --save /etc/pacman.d/mirrorlist || true
|
||||
pacman -Sy --noconfirm archiso
|
||||
|
||||
echo "==> Préparation de l'environnement de build..."
|
||||
rm -rf /tmp/fws-build
|
||||
mkdir -p /tmp/fws-build/releng
|
||||
|
||||
if [ -d "$WORK_DIR/configs/releng" ]; then
|
||||
cp -ar "$WORK_DIR/configs/releng/"* /tmp/fws-build/releng/
|
||||
echo "==> configs/releng/ copié"
|
||||
fi
|
||||
|
||||
if [ -d "$WORK_DIR/configs/baseline" ]; then
|
||||
cp -ar "$WORK_DIR/configs/baseline/"* /tmp/fws-build/releng/
|
||||
echo "==> configs/baseline/ fusionné (prioritaire)"
|
||||
fi
|
||||
|
||||
echo "==> Activation de NetworkManager.service sur le live (symlink réel)..."
|
||||
mkdir -p /tmp/fws-build/releng/airootfs/etc/systemd/system/multi-user.target.wants
|
||||
ln -sf /usr/lib/systemd/system/NetworkManager.service \
|
||||
/tmp/fws-build/releng/airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service
|
||||
|
||||
echo "==> Vérification des services systemd..."
|
||||
ls /tmp/fws-build/releng/airootfs/etc/systemd/system/ 2>/dev/null || echo " (aucun service)"
|
||||
ls /tmp/fws-build/releng/airootfs/etc/systemd/system/multi-user.target.wants/ 2>/dev/null || echo " (aucun symlink)"
|
||||
|
||||
if ls "$WORK_DIR/local-repo/"*.pkg.tar.zst &>/dev/null 2>&1; then
|
||||
echo "==> Copie du repo local Calamares..."
|
||||
mkdir -p /tmp/fws-build/local-repo
|
||||
cp -a "$WORK_DIR/local-repo/"* /tmp/fws-build/local-repo/
|
||||
|
||||
echo "==> Injection [fws-local] dans pacman.conf..."
|
||||
sed -i '/^\[fws-local\]/,/^$/d' /tmp/fws-build/releng/pacman.conf
|
||||
PACMAN_TMP=$(mktemp)
|
||||
printf '[fws-local]\nSigLevel = Optional TrustAll\nServer = file:///tmp/fws-build/local-repo\n\n' \
|
||||
> "$PACMAN_TMP"
|
||||
cat /tmp/fws-build/releng/pacman.conf >> "$PACMAN_TMP"
|
||||
mv "$PACMAN_TMP" /tmp/fws-build/releng/pacman.conf
|
||||
|
||||
echo "==> Vérification pacman.conf :"
|
||||
head -5 /tmp/fws-build/releng/pacman.conf
|
||||
else
|
||||
echo "==> Aucun repo local détecté."
|
||||
fi
|
||||
|
||||
echo "==> Correction des retours à la ligne Windows (dos2unix)..."
|
||||
pacman -S --needed --noconfirm dos2unix
|
||||
find /tmp/fws-build/releng -type f -exec dos2unix {} + 2>/dev/null
|
||||
|
||||
echo "==> Lancement de mkarchiso..."
|
||||
mkdir -p "$WORK_DIR/out"
|
||||
chmod -f 777 "$WORK_DIR/out/"FWS-*.iso 2>/dev/null || true
|
||||
rm -f "$WORK_DIR/out/"FWS-*.iso 2>/dev/null || true
|
||||
mkarchiso -v -w /tmp/fws-build/work -o "$WORK_DIR/out" /tmp/fws-build/releng
|
||||
|
||||
echo "==> Nettoyage..."
|
||||
rm -rf /tmp/fws-build/work
|
||||
|
||||
echo "==> Build terminé ! L'ISO se trouve dans '$WORK_DIR/out'."
|
||||
fi
|
||||
|
||||
echo "==> Build terminé ! ISO : $FINAL"
|
||||
echo -e "\e[32mScript de build terminé avec succès.\e[0m"
|
||||
@@ -1,40 +0,0 @@
|
||||
# ============================================================
|
||||
# FWS Linux — branding.desc
|
||||
# ============================================================
|
||||
|
||||
componentName: fws
|
||||
|
||||
strings:
|
||||
productName: "FWS"
|
||||
shortProductName: "FWS"
|
||||
version: "1.0"
|
||||
shortVersion: "1.0"
|
||||
versionedName: "FWS 1.0"
|
||||
shortVersionedName: "FWS 1.0"
|
||||
bootloaderEntryName: "FWS"
|
||||
productUrl: ""
|
||||
supportUrl: ""
|
||||
releaseNotesUrl: ""
|
||||
donateUrl: ""
|
||||
|
||||
images:
|
||||
productLogo: "logo.png"
|
||||
productIcon: "logo.png"
|
||||
productWelcome: "logo.png"
|
||||
|
||||
slideshow: "slideshow.qml"
|
||||
slideshowAPI: 2
|
||||
|
||||
style:
|
||||
# Couleurs de la sidebar
|
||||
sidebarBackground: "#1a1a2e"
|
||||
sidebarText: "#e0e0e0"
|
||||
sidebarTextHighlight: "#00d4ff"
|
||||
sidebarSelect: "#16213e"
|
||||
|
||||
# Couleurs générales
|
||||
backgroundColor: "#0f3460"
|
||||
highlightedTextColor: "#ffffff"
|
||||
genericTextColor: "#e0e0e0"
|
||||
errorTextColor: "#ff6b6b"
|
||||
warningTextColor: "#ffa500"
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 11 KiB |
@@ -1,138 +0,0 @@
|
||||
/* ============================================================
|
||||
FWS Linux — slideshow.qml
|
||||
Affiché pendant l'installation
|
||||
============================================================ */
|
||||
|
||||
import QtQuick 2.0
|
||||
import calamares.slideshow 1.0
|
||||
|
||||
Presentation {
|
||||
id: presentation
|
||||
|
||||
function nextSlide() {
|
||||
if (presentation.currentSlide < slides.count - 1)
|
||||
presentation.currentSlide++
|
||||
else
|
||||
presentation.currentSlide = 0
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: timer
|
||||
interval: 4000
|
||||
repeat: true
|
||||
running: true
|
||||
onTriggered: nextSlide()
|
||||
}
|
||||
|
||||
Slide {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: "#1a1a2e"
|
||||
|
||||
Column {
|
||||
anchors.centerIn: parent
|
||||
spacing: 20
|
||||
|
||||
Text {
|
||||
text: "🚀 Bienvenue sur FWS Linux"
|
||||
color: "#00d4ff"
|
||||
font.pixelSize: 32
|
||||
font.bold: true
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
Text {
|
||||
text: "Un système rapide, léger et puissant."
|
||||
color: "#e0e0e0"
|
||||
font.pixelSize: 18
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Slide {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: "#16213e"
|
||||
|
||||
Column {
|
||||
anchors.centerIn: parent
|
||||
spacing: 20
|
||||
|
||||
Text {
|
||||
text: "⚡ Basé sur Arch Linux"
|
||||
color: "#00d4ff"
|
||||
font.pixelSize: 32
|
||||
font.bold: true
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
Text {
|
||||
text: "Accès à l'AUR et aux derniers paquets."
|
||||
color: "#e0e0e0"
|
||||
font.pixelSize: 18
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Slide {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: "#0f3460"
|
||||
|
||||
Column {
|
||||
anchors.centerIn: parent
|
||||
spacing: 20
|
||||
|
||||
Text {
|
||||
text: "🛡️ Sécurité & Stabilité"
|
||||
color: "#00d4ff"
|
||||
font.pixelSize: 32
|
||||
font.bold: true
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
Text {
|
||||
text: "FWS est conçu pour être robuste et fiable."
|
||||
color: "#e0e0e0"
|
||||
font.pixelSize: 18
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Slide {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: "#1a1a2e"
|
||||
|
||||
Column {
|
||||
anchors.centerIn: parent
|
||||
spacing: 20
|
||||
|
||||
Text {
|
||||
text: "✅ Installation en cours..."
|
||||
color: "#00d4ff"
|
||||
font.pixelSize: 32
|
||||
font.bold: true
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
Text {
|
||||
text: "Merci de patienter, FWS s'installe sur votre machine."
|
||||
color: "#e0e0e0"
|
||||
font.pixelSize: 18
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
---
|
||||
efiBootLoader: "grub"
|
||||
|
||||
grubInstall: "grub-install"
|
||||
grubMkconfig: "grub-mkconfig"
|
||||
grubCfg: "/boot/grub/grub.cfg"
|
||||
grubProbe: "grub-probe"
|
||||
efiBootMgr: "efibootmgr"
|
||||
|
||||
efiBootloaderId: "FWS"
|
||||
installEFIFallback: true
|
||||
installHybridGRUB: false
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
restartNowEnabled: true
|
||||
restartNowChecked: false
|
||||
restartNowCommand: "systemctl -i reboot"
|
||||
|
||||
notifyOnFinished: true
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
crypttabOptions: luks,keyscript=/bin/cat
|
||||
|
||||
tmpOptions:
|
||||
default:
|
||||
tmpfs: false
|
||||
options: ""
|
||||
ssd:
|
||||
tmpfs: true
|
||||
options: "defaults,noatime,mode=1777"
|
||||
@@ -1,13 +0,0 @@
|
||||
---
|
||||
overwrite: true
|
||||
|
||||
kernel_params:
|
||||
- "quiet"
|
||||
|
||||
defaults:
|
||||
GRUB_TIMEOUT: 5
|
||||
GRUB_DEFAULT: "saved"
|
||||
GRUB_DISABLE_SUBMENU: true
|
||||
GRUB_TERMINAL_OUTPUT: "console"
|
||||
GRUB_DISABLE_RECOVERY: true
|
||||
GRUB_DISTRIBUTOR: "FWS"
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
location: EtcFile
|
||||
writeHostsFile: true
|
||||
setSystemdHostname: EtcFile
|
||||
|
||||
template: "fws-${first}"
|
||||
@@ -1 +0,0 @@
|
||||
---
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
# Calamares 3.3+ : initcpiocfg modifie le mkinitcpio.conf existant
|
||||
# au lieu de le réécrire entièrement.
|
||||
|
||||
useSystemdHook: false
|
||||
|
||||
hooks:
|
||||
prepend: []
|
||||
append: []
|
||||
remove: []
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
xOrgConfFileName: "00-keyboard.conf"
|
||||
convertedKeymapPath: "/usr/share/X11/xkb/symbols/pc"
|
||||
keyboardLayout: "fr"
|
||||
keyboardVariant: ""
|
||||
keyboardModel: "pc105"
|
||||
@@ -1,6 +0,0 @@
|
||||
---
|
||||
region: "Europe"
|
||||
zone: "Paris"
|
||||
localeGenPath: "/etc/locale.gen"
|
||||
geoipStyle: "json"
|
||||
geoipUrl: "https://geoip.kde.org/v1/calamares"
|
||||
@@ -1 +0,0 @@
|
||||
---
|
||||
@@ -1,4 +0,0 @@
|
||||
---
|
||||
systemd: true
|
||||
dbus: true
|
||||
dbus-symlink: true
|
||||
@@ -1,45 +0,0 @@
|
||||
---
|
||||
extraMounts:
|
||||
- device: proc
|
||||
fs: proc
|
||||
mountPoint: /proc
|
||||
- device: sys
|
||||
fs: sysfs
|
||||
mountPoint: /sys
|
||||
- device: /dev
|
||||
mountPoint: /dev
|
||||
options: [ bind ]
|
||||
- device: /dev/pts
|
||||
fs: devpts
|
||||
mountPoint: /dev/pts
|
||||
- device: tmpfs
|
||||
fs: tmpfs
|
||||
mountPoint: /run
|
||||
- device: /run/udev
|
||||
mountPoint: /run/udev
|
||||
options: [ bind ]
|
||||
- device: efivarfs
|
||||
fs: efivarfs
|
||||
mountPoint: /sys/firmware/efi/efivars
|
||||
efi: true
|
||||
|
||||
mountOptions:
|
||||
- filesystem: default
|
||||
options: [ defaults, noatime ]
|
||||
- filesystem: efi
|
||||
options: [ defaults, umask=0077 ]
|
||||
- filesystem: ext4
|
||||
ssdOptions: [ discard ]
|
||||
- filesystem: xfs
|
||||
ssdOptions: [ discard ]
|
||||
- filesystem: btrfs
|
||||
options: [ defaults, noatime, "compress=zstd:1", "space_cache=v2" ]
|
||||
ssdOptions: [ discard=async ]
|
||||
hddOptions: [ autodefrag ]
|
||||
- filesystem: btrfs_swap
|
||||
options: [ defaults, noatime ]
|
||||
- filesystem: f2fs
|
||||
options: [ defaults, noatime ]
|
||||
ssdOptions: [ discard ]
|
||||
- filesystem: swap
|
||||
ssdOptions: [ discard ]
|
||||
@@ -1,2 +0,0 @@
|
||||
---
|
||||
# Copie /etc/NetworkManager du live vers le système cible (NM gérera le réseau).
|
||||
@@ -1,14 +0,0 @@
|
||||
---
|
||||
# Étape post-unpackfs : retire les paquets live-only.
|
||||
# Tous les paquets utiles sont déjà dans le squashfs.
|
||||
# Pas besoin d'installer quoi que ce soit depuis internet.
|
||||
|
||||
backend: pacman
|
||||
update_db: false
|
||||
update_system: false
|
||||
|
||||
operations:
|
||||
- remove:
|
||||
- calamares
|
||||
- kpmcore
|
||||
- mkinitcpio-archiso
|
||||
@@ -1,22 +0,0 @@
|
||||
---
|
||||
efiSystemPartition: "/boot/efi"
|
||||
efiSystemPartitionSize: 300M
|
||||
efiSystemPartitionName: EFI
|
||||
|
||||
userSwapChoices:
|
||||
- none
|
||||
- small
|
||||
- suspend
|
||||
- file
|
||||
|
||||
drawNestedPartitions: true
|
||||
alwaysShowPartitionLabels: true
|
||||
|
||||
initialPartitioningChoice: replace
|
||||
initialSwapChoice: small
|
||||
|
||||
defaultFileSystemType: "ext4"
|
||||
availableFileSystemTypes: ["ext4", "btrfs", "xfs", "f2fs"]
|
||||
|
||||
enableLuksAutomatedPartitioning: true
|
||||
allowManualPartitioning: true
|
||||
@@ -1,21 +0,0 @@
|
||||
---
|
||||
units:
|
||||
- name: "NetworkManager.service"
|
||||
action: "enable"
|
||||
mandatory: true
|
||||
|
||||
- name: "systemd-resolved.service"
|
||||
action: "enable"
|
||||
mandatory: false
|
||||
|
||||
- name: "systemd-timesyncd.service"
|
||||
action: "enable"
|
||||
mandatory: false
|
||||
|
||||
- name: "lightdm.service"
|
||||
action: "enable"
|
||||
mandatory: true
|
||||
|
||||
- name: "sshd.service"
|
||||
action: "enable"
|
||||
mandatory: false
|
||||
@@ -1,22 +0,0 @@
|
||||
---
|
||||
# Exécuté HORS chroot (live system) pour accéder à l'ISO montée.
|
||||
# But : restaurer le kernel (retiré du squashfs par mkarchiso) et
|
||||
# corriger les fichiers mkinitcpio archiso-spécifiques.
|
||||
|
||||
dontChroot: true
|
||||
|
||||
script:
|
||||
# Copie le kernel depuis l'ISO vers /boot du système cible
|
||||
- 'cp "$(find /run/archiso/bootmnt -name vmlinuz-linux 2>/dev/null | head -1)" "${ROOT}/boot/vmlinuz-linux"'
|
||||
|
||||
# Configure LightDM pour démarrer automatiquement la session XFCE du premier utilisateur créé.
|
||||
- 'FIRST_USER="$(awk -F: ''$$3 >= 1000 && $$1 != "nobody" { print $$1; exit }'' "${ROOT}/etc/passwd")"'
|
||||
- 'if [ -n "$$FIRST_USER" ]; then mkdir -p "${ROOT}/etc/lightdm/lightdm.conf.d"; printf ''[Seat:*]\nautologin-user=%s\nautologin-user-timeout=0\nuser-session=xfce\nautologin-session=xfce\ngreeter-hide-users=true\nallow-guest=false\n'' "$$FIRST_USER" > "${ROOT}/etc/lightdm/lightdm.conf.d/50-fws.conf"; fi'
|
||||
- 'if [ -n "$$FIRST_USER" ] && [ -d "${ROOT}/home/$$FIRST_USER" ]; then printf ''[Desktop]\nSession=xfce\n'' > "${ROOT}/home/$$FIRST_USER/.dmrc"; fi'
|
||||
|
||||
# Supprime le drop-in archiso (surcharge HOOKS avec des hooks inexistants post-install)
|
||||
- '-rm -f "${ROOT}/etc/mkinitcpio.conf.d/archiso.conf"'
|
||||
|
||||
# Remplace le linux.preset archiso par le preset standard (default + fallback)
|
||||
# \x27 = ' et \x22 = " pour éviter les conflits de quotes dans YAML/bash
|
||||
- 'printf "PRESETS=(\x27default\x27 \x27fallback\x27)\nALL_kver=\x22/boot/vmlinuz-linux\x22\nALL_config=\x22/etc/mkinitcpio.conf\x22\nALL_microcode=(/boot/*-ucode.img)\ndefault_image=\x22/boot/initramfs-linux.img\x22\nfallback_image=\x22/boot/initramfs-linux-fallback.img\x22\nfallback_options=\x22-S autodetect\x22\n" > "${ROOT}/etc/mkinitcpio.d/linux.preset"'
|
||||
@@ -1,9 +0,0 @@
|
||||
---
|
||||
# Copie le squashfs du live vers le disque cible.
|
||||
# Le chemin /run/archiso/bootmnt/<install_dir>/<arch>/airootfs.sfs
|
||||
# doit correspondre à `install_dir` dans configs/releng/profiledef.sh ("fws").
|
||||
|
||||
unpack:
|
||||
- source: "/run/archiso/bootmnt/fws/x86_64/airootfs.sfs"
|
||||
sourcefs: "squashfs"
|
||||
destination: ""
|
||||
@@ -1,29 +0,0 @@
|
||||
---
|
||||
defaultGroups:
|
||||
- wheel
|
||||
- audio
|
||||
- video
|
||||
- network
|
||||
- storage
|
||||
- power
|
||||
- lp
|
||||
- scanner
|
||||
|
||||
autologinGroup: autologin
|
||||
sudoersGroup: wheel
|
||||
setRootPassword: true
|
||||
doAutologin: true
|
||||
userShell: /bin/bash
|
||||
|
||||
passwordRequirements:
|
||||
minLength: 6
|
||||
maxLength: -1
|
||||
nonempty: true
|
||||
|
||||
allowWeakPasswords: false
|
||||
allowWeakPasswordsDefault: false
|
||||
|
||||
hostname:
|
||||
location: EtcFile
|
||||
writeHostsFile: true
|
||||
setSystemdHostname: true
|
||||
@@ -1,20 +0,0 @@
|
||||
---
|
||||
showSupportUrl: true
|
||||
showKnownIssuesUrl: true
|
||||
showReleaseNotesUrl: false
|
||||
showDonateUrl: false
|
||||
|
||||
requirements:
|
||||
requiredStorage: 8.0
|
||||
requiredRam: 1.5
|
||||
internetCheckUrl: "https://archlinux.org"
|
||||
check:
|
||||
- storage
|
||||
- ram
|
||||
- power
|
||||
- root
|
||||
- screen
|
||||
required:
|
||||
- storage
|
||||
- ram
|
||||
- root
|
||||
@@ -1,45 +0,0 @@
|
||||
---
|
||||
# ============================================================
|
||||
# FWS — Calamares settings
|
||||
# ============================================================
|
||||
|
||||
modules-search: [ local, /usr/lib/calamares/modules ]
|
||||
|
||||
sequence:
|
||||
- show:
|
||||
- welcome
|
||||
- locale
|
||||
- keyboard
|
||||
- partition
|
||||
- users
|
||||
- summary
|
||||
- exec:
|
||||
- partition
|
||||
- mount
|
||||
- unpackfs
|
||||
- machineid
|
||||
- fstab
|
||||
- locale
|
||||
- keyboard
|
||||
- localecfg
|
||||
- users
|
||||
- hwclock
|
||||
- networkcfg
|
||||
- packages
|
||||
- shellprocess
|
||||
- initcpiocfg
|
||||
- initcpio
|
||||
- grubcfg
|
||||
- bootloader
|
||||
- services-systemd
|
||||
- umount
|
||||
- show:
|
||||
- finished
|
||||
|
||||
branding: fws
|
||||
|
||||
prompt-install: true
|
||||
dont-chroot: false
|
||||
oem-setup: false
|
||||
disable-cancel: false
|
||||
disable-cancel-during-exec: false
|
||||
@@ -0,0 +1,16 @@
|
||||
# FWS — force le plugin LVM de libblockdev en mode CLI (libbd_lvm.so) au lieu
|
||||
# du mode DBus (libbd_lvm-dbus.so).
|
||||
#
|
||||
# POURQUOI : libblockdev 3.x sur Arch charge par défaut la variante LVM qui
|
||||
# pilote le démon « lvmdbusd » (service DBus com.redhat.lvmdbus1). Or Arch ne
|
||||
# package PAS lvmdbusd (lvm2 ne livre ni le binaire ni le .service DBus). Quand
|
||||
# Anaconda/blivet peuple l'arbre des périphériques, blivet appelle
|
||||
# blockdev.lvm.lvs() → la variante DBus tente d'activer com.redhat.lvmdbus1 →
|
||||
# GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: name is not activatable
|
||||
# ce qui FAIT PLANTER Anaconda au démarrage.
|
||||
#
|
||||
# La variante CLI (libbd_lvm.so) parle directement aux binaires LVM (lvs, vgs…)
|
||||
# sans démon → fonctionne sans lvmdbusd. Ce fichier conf.d (numéro élevé → lu
|
||||
# après 00-default.cfg) force ce choix de façon fiable.
|
||||
[lvm]
|
||||
sonames=libbd_lvm.so.3
|
||||
@@ -0,0 +1,10 @@
|
||||
# FWS — locales à générer dans l'ISO (par locale-gen, via le hook pacman
|
||||
# etc/pacman.d/hooks/zzz-fws-locale-gen.hook au moment du pacstrap).
|
||||
#
|
||||
# en_US.UTF-8 est REQUIS par Anaconda : ses modules DBus font
|
||||
# locale.setlocale(LC_ALL, "en_US.UTF-8") (DEFAULT_LANG)
|
||||
# au démarrage → sans cette locale générée : « locale.Error: unsupported
|
||||
# locale setting » et le module Boss sort en status 1 (installateur planté).
|
||||
# C.UTF-8 (la locale par défaut du live, cf. locale.conf) est intégrée à la
|
||||
# glibc et n'a pas besoin d'être générée.
|
||||
en_US.UTF-8 UTF-8
|
||||
@@ -0,0 +1,28 @@
|
||||
# FWS — expose la base squashfs du live à /run/rootfsbase.
|
||||
#
|
||||
# POURQUOI : avec --liveinst, Anaconda utilise le payload « LiveOS » qui RECOPIE
|
||||
# le système live en cours sur le disque. Sa tâche DetectLiveOSImageTask cherche
|
||||
# l'image de base à /dev/mapper/live-base, /dev/mapper/live-osimg-min ou
|
||||
# /run/rootfsbase (conventions dracut-live de Fedora). archiso n'en crée AUCUNE
|
||||
# → « SourceSetupError: No Live OS image found! » et l'installateur plante.
|
||||
#
|
||||
# archiso a pourtant la squashfs (montée en lecture seule sur /run/archiso/
|
||||
# airootfs). On la remonte ici en loop sur /run/rootfsbase pour qu'Anaconda la
|
||||
# détecte : findmnt -o SOURCE /run/rootfsbase → /dev/loopN, qu'Anaconda monte
|
||||
# puis recopie sur la cible (= installe FWS). Le %post du kickstart fait ensuite
|
||||
# mkinitcpio + grub-install (bootloader --disabled côté Anaconda).
|
||||
[Unit]
|
||||
Description=FWS — base squashfs sur /run/rootfsbase (payload LiveOS Anaconda)
|
||||
DefaultDependencies=no
|
||||
After=local-fs.target
|
||||
ConditionPathExists=/run/archiso/bootmnt/fws/x86_64/airootfs.sfs
|
||||
ConditionPathIsMountPoint=!/run/rootfsbase
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/usr/bin/mkdir -p /run/rootfsbase
|
||||
ExecStart=/usr/bin/mount -o loop,ro /run/archiso/bootmnt/fws/x86_64/airootfs.sfs /run/rootfsbase
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
@@ -5,6 +5,99 @@ if [ ! -d /run/archiso ]; then
|
||||
fi
|
||||
|
||||
xsetroot -solid "#1a1a2e"
|
||||
|
||||
# Openbox en arrière-plan : gestionnaire de fenêtres pour l'installateur.
|
||||
openbox &
|
||||
sleep 1
|
||||
exec calamares
|
||||
_OB_PID=$!
|
||||
|
||||
# Chantier C : lance l'installateur Anaconda en mode live s'il est présent.
|
||||
# « liveinst » re-exécute anaconda (ici on est déjà root → pas de pkexec/polkit).
|
||||
#
|
||||
# DEBUG (premier run réel) : on CAPTURE stdout+stderr — un plantage d'import
|
||||
# précoce de Python n'apparaît QUE là, pas dans /tmp/anaconda.log — et, si
|
||||
# liveinst quitte en erreur, on regroupe tous les logs Anaconda et on les AFFICHE
|
||||
# (zenity) au lieu de laisser startx rendre la main → .zprofile relancerait X en
|
||||
# boucle (symptôme « fond bleu qui clignote/reboote »). On NE rend jamais la main
|
||||
# à startx : on reste sur Openbox pour lire les logs / rebooter proprement.
|
||||
if command -v liveinst >/dev/null 2>&1; then
|
||||
LIVEINST_LOG=/tmp/fws-liveinst.log
|
||||
liveinst >"$LIVEINST_LOG" 2>&1
|
||||
rc=$?
|
||||
|
||||
# ATTENTION : liveinst NE propage PAS le code de sortie d'anaconda — il
|
||||
# enchaîne son propre nettoyage et sort souvent 0 même quand anaconda a
|
||||
# planté. On ne se fie donc PAS à $rc : en phase debug on regroupe TOUS les
|
||||
# logs et on les affiche systématiquement (zenity). Le traceback Python d'un
|
||||
# crash d'import précoce n'est QUE dans $LIVEINST_LOG (stderr capturé).
|
||||
# Log du %post chrooté (grub-install / mkinitcpio) = CE qui rend le disque
|
||||
# bootable. Le kickstart en copie une version dans le LIVE
|
||||
# (/tmp/fws-post-chroot.log, via un %post --nochroot final, cible encore
|
||||
# montée → fiable). SECOURS si absent : on réactive le LVM (pvscan/vgscan
|
||||
# rescannent les PV qu'Anaconda a désactivés) et on remonte le disque pour
|
||||
# le lire.
|
||||
if [ ! -s /tmp/fws-post-chroot.log ]; then
|
||||
pvscan --cache >/dev/null 2>&1 || true
|
||||
vgscan --mknodes >/dev/null 2>&1 || true
|
||||
vgchange -ay >/dev/null 2>&1 || true
|
||||
udevadm settle --timeout=10 >/dev/null 2>&1 || true
|
||||
mkdir -p /run/fws-installed
|
||||
for _dev in /dev/mapper/*-root /dev/mapper/* /dev/sd*[0-9] /dev/vd*[0-9] /dev/nvme*n*p*; do
|
||||
[ -b "$_dev" ] || continue
|
||||
mount -o ro "$_dev" /run/fws-installed 2>/dev/null || continue
|
||||
if [ -f /run/fws-installed/var/log/fws-post.log ]; then
|
||||
cp -f /run/fws-installed/var/log/fws-post.log /tmp/fws-post-chroot.log 2>/dev/null
|
||||
umount /run/fws-installed 2>/dev/null || true
|
||||
break
|
||||
fi
|
||||
umount /run/fws-installed 2>/dev/null || true
|
||||
done
|
||||
fi
|
||||
|
||||
DBG=/tmp/fws-debug.txt
|
||||
{
|
||||
echo "===== liveinst sorti (code $rc) — logs Anaconda ====="
|
||||
echo
|
||||
echo "########## sortie liveinst (stdout+stderr) ##########"
|
||||
cat "$LIVEINST_LOG" 2>/dev/null
|
||||
echo
|
||||
echo "########## %post chrooté = grub-install / mkinitcpio ##########"
|
||||
echo "########## >>> C'EST CE BLOC QUI DIT SI LE DISQUE VA BOOTER <<< ##########"
|
||||
cat /tmp/fws-post-chroot.log 2>/dev/null || echo "(log introuvable)"
|
||||
echo
|
||||
echo "########## %post --nochroot (/tmp/fws-post-nochroot.log) ##########"
|
||||
cat /tmp/fws-post-nochroot.log 2>/dev/null || echo "(absent)"
|
||||
for f in /tmp/anaconda.log /tmp/syslog /tmp/program.log \
|
||||
/tmp/storage.log /tmp/dbus.log /tmp/packaging.log /tmp/X.log; do
|
||||
echo
|
||||
echo "########## $f ##########"
|
||||
tail -n 200 "$f" 2>/dev/null || echo "(absent)"
|
||||
done
|
||||
} >"$DBG" 2>&1
|
||||
|
||||
# Succès d'install = les DEUX étapes qui rendent le disque bootable ont
|
||||
# réussi dans le %post : mkinitcpio (« Initcpio image generation successful »)
|
||||
# ET grub-install (« Installation finished. No error reported. »). Si oui →
|
||||
# on montre un écran de RÉUSSITE et on éteint (l'utilisateur retire l'ISO puis
|
||||
# rallume sur FWS). Sinon → on affiche tous les logs de debug (comportement
|
||||
# debug). Les lignes cosmétiques (load_policy, warnings GTK…) n'influent PAS
|
||||
# sur cette détection : on ne regarde que le log du %post.
|
||||
if grep -q 'Initcpio image generation successful' /tmp/fws-post-chroot.log 2>/dev/null \
|
||||
&& grep -q 'Installation finished. No error reported.' /tmp/fws-post-chroot.log 2>/dev/null; then
|
||||
if command -v zenity >/dev/null 2>&1; then
|
||||
zenity --info --width=480 --title="FWS — installation réussie ✅" \
|
||||
--text="<b>FWS est installé sur le disque.</b>\n\n1. Clique OK pour <b>éteindre</b> la machine.\n2. <b>Retire l'ISO</b> (lecteur CD/DVD).\n3. Rallume → FWS démarre." \
|
||||
2>/dev/null
|
||||
fi
|
||||
systemctl poweroff
|
||||
else
|
||||
# Échec (ou install non terminée) : on montre les logs pour diagnostiquer.
|
||||
if command -v zenity >/dev/null 2>&1; then
|
||||
zenity --text-info --title="FWS — logs Anaconda (sortie $rc)" \
|
||||
--filename="$DBG" --width=1100 --height=720 2>/dev/null &
|
||||
fi
|
||||
wait "$_OB_PID"
|
||||
fi
|
||||
else
|
||||
echo "[FWS] Anaconda absent de l'ISO — à builder (setup-aur.sh) + ajouter à packages.x86_64." >&2
|
||||
exec openbox
|
||||
fi
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
# fix for screen readers
|
||||
if grep -Fqa 'accessibility=' /proc/cmdline &> /dev/null; then
|
||||
setopt SINGLE_LINE_ZLE
|
||||
fi
|
||||
|
||||
# Provisionnement automatique archiso (param noyau script=) : LIVE uniquement.
|
||||
# Sur le système installé /run/archiso n'existe pas, donc ce bloc ne s'exécute
|
||||
# jamais hors du live — c'est la barrière qui empêche l'auto-script sur la cible.
|
||||
if [[ -d /run/archiso ]]; then
|
||||
~/.automated_script.sh
|
||||
fi
|
||||
@@ -1,4 +1,4 @@
|
||||
# Démarrage automatique de Xorg + Calamares uniquement dans le live FWS.
|
||||
# Démarrage automatique de Xorg uniquement dans le live FWS.
|
||||
# Sur le système installé, /run/archiso n'existe pas, donc rien ne se lance.
|
||||
if [[ -d /run/archiso && "$(tty)" == "/dev/tty1" && -z "$DISPLAY" ]]; then
|
||||
exec startx -- vt1
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env bash
|
||||
# ============================================================================
|
||||
# FWS — script de customisation de l'airootfs.
|
||||
# Exécuté par mkarchiso DANS le chroot airootfs, APRÈS le pacstrap
|
||||
# (cf. fws/mkarchiso _make_customize_airootfs), puis supprimé : il n'apparaît
|
||||
# donc PAS dans l'ISO finale. C'est le seul endroit fiable pour lancer des
|
||||
# commandes dans l'image (les hooks pacman ne tournent pas sous pacstrap).
|
||||
# ============================================================================
|
||||
set -euo pipefail
|
||||
|
||||
# Génère les locales déclarées dans /etc/locale.gen. en_US.UTF-8 est REQUIS par
|
||||
# Anaconda (ses modules DBus font setlocale(LC_ALL, "en_US.UTF-8") au démarrage,
|
||||
# sinon « locale.Error: unsupported locale setting » → le module Boss plante).
|
||||
# ~3 Mo générés, vs 222 Mo pour le paquet glibc-locales complet.
|
||||
locale-gen
|
||||
@@ -0,0 +1 @@
|
||||
grub-editenv
|
||||
@@ -0,0 +1 @@
|
||||
grub-install
|
||||
@@ -0,0 +1 @@
|
||||
grub-mkconfig
|
||||
@@ -0,0 +1 @@
|
||||
grub-mkpasswd-pbkdf2
|
||||
@@ -0,0 +1 @@
|
||||
grub-set-default
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
#!/bin/sh
|
||||
# FWS — stub no-op de load_policy.
|
||||
#
|
||||
# À sa fermeture, le module Runtime d'Anaconda appelle /usr/sbin/load_policy
|
||||
# pour recharger la politique SELinux. Arch N'EST PAS SELinux → le vrai binaire
|
||||
# n'existe pas → « AnacondaError: ... '/usr/sbin/load_policy' » dans un atexit
|
||||
# callback (« Exception ignored »). C'est cosmétique (exit 0 quand même), mais
|
||||
# ça affiche un traceback rouge. Ce stub renvoie 0 → plus aucune erreur.
|
||||
# (/usr/sbin est un lien vers /usr/bin sur Arch usr-merge → ce fichier répond
|
||||
# aussi pour /usr/sbin/load_policy.)
|
||||
exit 0
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
# FWS — stub no-op de setstatus.
|
||||
#
|
||||
# Le script Fedora « liveinst » appelle « setstatus » (ligne ~154) pour publier
|
||||
# un statut SELinux/systemd. Cet outil n'existe pas sur Arch →
|
||||
# « /usr/bin/liveinst: line 154: setstatus: command not found » (cosmétique,
|
||||
# liveinst continue). Ce stub renvoie 0 → l'avertissement disparaît.
|
||||
exit 0
|
||||
@@ -1,7 +1,7 @@
|
||||
# ============================================================
|
||||
# FWS — paquets de l'ISO live
|
||||
# Objectif : système live bootable + installeur Calamares
|
||||
# fonctionnel + jeu minimal d'outils de rescue.
|
||||
# Objectif : système live bootable + installateur Anaconda
|
||||
# (migration depuis Calamares) + jeu minimal d'outils de rescue.
|
||||
# ============================================================
|
||||
|
||||
# --- Base système ---
|
||||
@@ -61,6 +61,7 @@ wget
|
||||
zsh
|
||||
grml-zsh-config
|
||||
bash
|
||||
zenity
|
||||
nano
|
||||
vim
|
||||
less
|
||||
@@ -85,26 +86,15 @@ htop
|
||||
alsa-utils
|
||||
sof-firmware
|
||||
|
||||
# --- Xorg + Openbox (pour Calamares) ---
|
||||
# --- Xorg + Openbox (session graphique de l'installateur) ---
|
||||
xorg-server
|
||||
xorg-xinit
|
||||
xorg-xrandr
|
||||
xorg-xsetroot
|
||||
openbox
|
||||
ttf-dejavu
|
||||
|
||||
# --- Bureau FWS installé ---
|
||||
xfce4
|
||||
xfce4-goodies
|
||||
lightdm
|
||||
lightdm-gtk-greeter
|
||||
|
||||
# --- Calamares (fournis par fws-local) ---
|
||||
calamares
|
||||
kpmcore
|
||||
qt5-base
|
||||
qt5-svg
|
||||
qt6-base
|
||||
# Terminal X : debug de l'installateur + entrée « Terminals » du menu Openbox.
|
||||
xterm
|
||||
|
||||
# --- Agents VM (pratique pour tester l'ISO) ---
|
||||
qemu-guest-agent
|
||||
@@ -113,3 +103,17 @@ open-vm-tools
|
||||
|
||||
# --- FWS (fws-local) ---
|
||||
winboat-bin
|
||||
|
||||
# --- Installateur Anaconda (fws-local) ---
|
||||
# 'anaconda' tire automatiquement anaconda-widgets + toutes ses dépendances
|
||||
# (python-blivet, pykickstart, libreport, gtk3, NetworkManager…).
|
||||
anaconda
|
||||
# Module 'cgi' (retiré de Python 3.13, PEP 594) requis par python-requests-ftp
|
||||
# que pyanaconda/core/util.py importe en dur. python-legacy-cgi le réintroduit.
|
||||
python-legacy-cgi
|
||||
# Module 'crypt'/'crypt_r' (retiré de Python 3.13, PEP 594) requis par
|
||||
# pyanaconda/core/users.py (hash des mots de passe). Paquet maison (fws-local).
|
||||
python-crypt_r
|
||||
# Namespace GI 'OSTree-1.0' : pyanaconda/rescue.py importe le payload rpm_ostree
|
||||
# (inconditionnellement, même si FWS utilise liveimg) → fourni par 'ostree'.
|
||||
ostree
|
||||
|
||||
@@ -14,6 +14,16 @@ pacman_conf="pacman.conf"
|
||||
airootfs_image_type="squashfs"
|
||||
airootfs_image_tool_options=('-comp' 'xz' '-Xbcj' 'x86' '-b' '1M' '-Xdict-size' '1M')
|
||||
bootstrap_tarball_compression=(xz -9e)
|
||||
# NB : ce profiledef.sh ÉCRASE celui de configs/releng/ lors de la fusion du
|
||||
# build (baseline prioritaire). Il doit donc être un SUR-ENSEMBLE des
|
||||
# permissions de releng, sinon les helpers live perdent leur bit exécutable
|
||||
# (ils sont versionnés en 0644) et /root/.gnupg perd son 0700 (gpg refuse).
|
||||
file_permissions=(
|
||||
["/etc/shadow"]="0:0:400"
|
||||
["/root"]="0:0:750"
|
||||
["/root/.automated_script.sh"]="0:0:755"
|
||||
["/root/.gnupg"]="0:0:700"
|
||||
["/usr/local/bin/choose-mirror"]="0:0:755"
|
||||
["/usr/local/bin/Installation_guide"]="0:0:755"
|
||||
["/usr/local/bin/livecd-sound"]="0:0:755"
|
||||
)
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
# ============================================================
|
||||
# FWS Linux — branding.desc
|
||||
# ============================================================
|
||||
|
||||
componentName: fws
|
||||
|
||||
strings:
|
||||
productName: "FWS Linux"
|
||||
shortProductName: "FWS"
|
||||
version: "1.0"
|
||||
shortVersion: "1.0"
|
||||
versionedName: "FWS Linux 1.0"
|
||||
shortVersionedName: "FWS 1.0"
|
||||
bootloaderEntryName: "FWS Linux"
|
||||
productUrl: "https://fws-linux.org"
|
||||
supportUrl: "https://fws-linux.org/support"
|
||||
releaseNotesUrl: "https://fws-linux.org/release-notes"
|
||||
donateUrl: "https://fws-linux.org/donate"
|
||||
|
||||
images:
|
||||
productLogo: "logo.png"
|
||||
productIcon: "logo.png"
|
||||
productWelcome: "logo.png"
|
||||
|
||||
slideshow: "slideshow.qml"
|
||||
slideshowAPI: 2
|
||||
|
||||
style:
|
||||
# Couleurs de la sidebar
|
||||
sidebarBackground: "#1a1a2e"
|
||||
sidebarText: "#e0e0e0"
|
||||
sidebarTextHighlight: "#00d4ff"
|
||||
sidebarSelect: "#16213e"
|
||||
|
||||
# Couleurs générales
|
||||
backgroundColor: "#0f3460"
|
||||
highlightedTextColor: "#ffffff"
|
||||
genericTextColor: "#e0e0e0"
|
||||
errorTextColor: "#ff6b6b"
|
||||
warningTextColor: "#ffa500"
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 11 KiB |
@@ -1,138 +0,0 @@
|
||||
/* ============================================================
|
||||
FWS Linux — slideshow.qml
|
||||
Affiché pendant l'installation
|
||||
============================================================ */
|
||||
|
||||
import QtQuick 2.0
|
||||
import calamares.slideshow 1.0
|
||||
|
||||
Presentation {
|
||||
id: presentation
|
||||
|
||||
function nextSlide() {
|
||||
if (presentation.currentSlide < slides.count - 1)
|
||||
presentation.currentSlide++
|
||||
else
|
||||
presentation.currentSlide = 0
|
||||
}
|
||||
|
||||
Timer {
|
||||
id: timer
|
||||
interval: 4000
|
||||
repeat: true
|
||||
running: true
|
||||
onTriggered: nextSlide()
|
||||
}
|
||||
|
||||
Slide {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: "#1a1a2e"
|
||||
|
||||
Column {
|
||||
anchors.centerIn: parent
|
||||
spacing: 20
|
||||
|
||||
Text {
|
||||
text: "🚀 Bienvenue sur FWS Linux"
|
||||
color: "#00d4ff"
|
||||
font.pixelSize: 32
|
||||
font.bold: true
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
Text {
|
||||
text: "Un système rapide, léger et puissant."
|
||||
color: "#e0e0e0"
|
||||
font.pixelSize: 18
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Slide {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: "#16213e"
|
||||
|
||||
Column {
|
||||
anchors.centerIn: parent
|
||||
spacing: 20
|
||||
|
||||
Text {
|
||||
text: "⚡ Basé sur Arch Linux"
|
||||
color: "#00d4ff"
|
||||
font.pixelSize: 32
|
||||
font.bold: true
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
Text {
|
||||
text: "Accès à l'AUR et aux derniers paquets."
|
||||
color: "#e0e0e0"
|
||||
font.pixelSize: 18
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Slide {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: "#0f3460"
|
||||
|
||||
Column {
|
||||
anchors.centerIn: parent
|
||||
spacing: 20
|
||||
|
||||
Text {
|
||||
text: "🛡️ Sécurité & Stabilité"
|
||||
color: "#00d4ff"
|
||||
font.pixelSize: 32
|
||||
font.bold: true
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
Text {
|
||||
text: "FWS est conçu pour être robuste et fiable."
|
||||
color: "#e0e0e0"
|
||||
font.pixelSize: 18
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Slide {
|
||||
anchors.fill: parent
|
||||
|
||||
Rectangle {
|
||||
anchors.fill: parent
|
||||
color: "#1a1a2e"
|
||||
|
||||
Column {
|
||||
anchors.centerIn: parent
|
||||
spacing: 20
|
||||
|
||||
Text {
|
||||
text: "✅ Installation en cours..."
|
||||
color: "#00d4ff"
|
||||
font.pixelSize: 32
|
||||
font.bold: true
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
Text {
|
||||
text: "Merci de patienter, FWS s'installe sur votre machine."
|
||||
color: "#e0e0e0"
|
||||
font.pixelSize: 18
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
# ============================================================
|
||||
# FWS Linux — modules/bootloader.conf
|
||||
# ============================================================
|
||||
|
||||
# Bootloader à utiliser
|
||||
# Options: grub, systemd-boot, refind
|
||||
efiBootLoader: "grub"
|
||||
|
||||
# Paramètres GRUB
|
||||
grubInstall: "grub-install"
|
||||
grubMkconfig: "grub-mkconfig"
|
||||
grubCfg: "/boot/grub/grub.cfg"
|
||||
|
||||
# Chemin EFI
|
||||
efiDirectory: "/boot/efi"
|
||||
|
||||
# ID pour l'entrée EFI
|
||||
efiBootEntryName: "FWS Linux"
|
||||
|
||||
# Menu GRUB
|
||||
grubTimeout: 5
|
||||
grubQuiet: false
|
||||
@@ -1,11 +0,0 @@
|
||||
# ============================================================
|
||||
# FWS Linux — modules/finished.conf
|
||||
# ============================================================
|
||||
|
||||
# Redémarrer automatiquement après l'installation
|
||||
restartNowEnabled: true
|
||||
restartNowChecked: false
|
||||
restartNowCommand: "systemctl reboot"
|
||||
|
||||
# Message de fin affiché à l'utilisateur
|
||||
notifyOnFinished: true
|
||||
@@ -1,28 +0,0 @@
|
||||
# ============================================================
|
||||
# FWS Linux — modules/grubcfg.conf
|
||||
# Paramètres passés à grub-mkconfig
|
||||
# ============================================================
|
||||
|
||||
# Nom de l'entrée dans le menu GRUB
|
||||
defaultEntry: "FWS Linux"
|
||||
|
||||
defaults:
|
||||
GRUB_ENABLE_CRYPTODISK: true
|
||||
|
||||
# Paramètres kernel supplémentaires
|
||||
kernel_params: ""
|
||||
|
||||
# Désactiver l'écran splash (mettre false pour debug)
|
||||
splash: true
|
||||
|
||||
# Thème GRUB (laisse vide pour le thème par défaut)
|
||||
theme: ""
|
||||
|
||||
# Timeout du menu GRUB (en secondes)
|
||||
timeout: 5
|
||||
|
||||
# Activer les entrées des autres OS détectés (os-prober)
|
||||
enable_osprober: true
|
||||
|
||||
# Écrire /etc/default/grub
|
||||
writeEtcDefaultGrub: true
|
||||
@@ -1,10 +0,0 @@
|
||||
---
|
||||
# Calamares 3.3+ : initcpiocfg modifie le mkinitcpio.conf existant
|
||||
# au lieu de le réécrire entièrement.
|
||||
|
||||
useSystemdHook: false
|
||||
|
||||
hooks:
|
||||
prepend: []
|
||||
append: []
|
||||
remove: []
|
||||
@@ -1,17 +0,0 @@
|
||||
# ============================================================
|
||||
# FWS Linux — modules/keyboard.conf
|
||||
# ============================================================
|
||||
|
||||
# Disposition clavier par défaut
|
||||
xorgConfigFileName: "/etc/X11/xorg.conf.d/00-keyboard.conf"
|
||||
|
||||
# Clavier par défaut
|
||||
keyboardLayout: "fr"
|
||||
keyboardVariant: ""
|
||||
keyboardModel: "pc105"
|
||||
|
||||
# Permettre à l'utilisateur de choisir son clavier
|
||||
guiTimezone: true
|
||||
|
||||
# Conversions vc (console virtuelle) → X11
|
||||
convertedKeymapPath: "/lib/kbd/keymaps/xkb"
|
||||
@@ -1,18 +0,0 @@
|
||||
# ============================================================
|
||||
# FWS Linux — modules/locale.conf
|
||||
# ============================================================
|
||||
|
||||
# Région/timezone par défaut
|
||||
region: "Europe"
|
||||
zone: "Paris"
|
||||
|
||||
# Langue par défaut
|
||||
locale: "fr_FR.UTF-8"
|
||||
|
||||
# Format des nombres, dates, monnaie
|
||||
# Laisse vide pour utiliser la même valeur que locale
|
||||
localeGenPath: "/etc/locale.gen"
|
||||
|
||||
# Timezone GeoIP (détection auto basée sur l'IP)
|
||||
geoipStyle: "json"
|
||||
geoipUrl: "https://geoip.kde.org/v1/calamares"
|
||||
@@ -1,54 +0,0 @@
|
||||
# ============================================================
|
||||
# FWS Linux — modules/packages.conf
|
||||
# Paquets installés via pacman pendant l'installation
|
||||
# ============================================================
|
||||
|
||||
# Gestionnaire de paquets
|
||||
backend: pacman
|
||||
|
||||
# Ne pas mettre à jour la base de données pacman (déjà dans le live)
|
||||
update_db: false
|
||||
|
||||
operations:
|
||||
- install:
|
||||
# Base système
|
||||
- base
|
||||
- base-devel
|
||||
- linux
|
||||
- linux-headers
|
||||
- linux-firmware
|
||||
|
||||
# Bootloader
|
||||
- grub
|
||||
- efibootmgr
|
||||
- os-prober
|
||||
- mkinitcpio-openswap
|
||||
|
||||
# Réseau
|
||||
- networkmanager
|
||||
- network-manager-applet
|
||||
- wpa_supplicant
|
||||
- dhcpcd
|
||||
|
||||
# Outils essentiels
|
||||
- sudo
|
||||
- nano
|
||||
- vim
|
||||
- git
|
||||
- curl
|
||||
- wget
|
||||
- htop
|
||||
- bash-completion
|
||||
|
||||
# Locale & timezone
|
||||
- tzdata
|
||||
|
||||
# Optionnel — retire ce qui ne correspond pas à FWS
|
||||
- pipewire
|
||||
- pipewire-pulse
|
||||
- wireplumber
|
||||
|
||||
# Paquets à retirer du système live (pas nécessaires après install)
|
||||
- remove:
|
||||
- calamares
|
||||
- calamares-config
|
||||
@@ -1,34 +0,0 @@
|
||||
# ============================================================
|
||||
# FWS Linux — modules/partition.conf
|
||||
# ============================================================
|
||||
|
||||
# Backend de partitionnement
|
||||
backend: kpmcore
|
||||
|
||||
# Autoriser le partitionnement manuel
|
||||
allowManualPartitioning: true
|
||||
|
||||
# Schéma de partition par défaut (pour install automatique)
|
||||
# Options: mbr, gpt
|
||||
defaultPartitionTableType: gpt
|
||||
|
||||
# Swap
|
||||
# Options: none, small, suspend, file
|
||||
defaultSwapType: small
|
||||
|
||||
# Taille minimale des partitions en MiB
|
||||
defaultFileSystemType: "ext4"
|
||||
|
||||
# Partitions EFI (pour UEFI)
|
||||
efiSystemPartition: "/boot/efi"
|
||||
efiSystemPartitionSize: 300
|
||||
|
||||
# Point de montage racine
|
||||
requiredStorage: 20.0
|
||||
|
||||
# Systèmes de fichiers proposés à l'utilisateur
|
||||
availableFileSystemTypes: ["ext4", "btrfs", "xfs", "f2fs"]
|
||||
|
||||
# Chiffrement
|
||||
# Activer le chiffrement LUKS
|
||||
allowZfs: true
|
||||
@@ -1,27 +0,0 @@
|
||||
# ============================================================
|
||||
# FWS Linux — modules/services-systemd.conf
|
||||
# Services systemd activés sur le système installé
|
||||
# ============================================================
|
||||
|
||||
services:
|
||||
# Réseau
|
||||
- name: NetworkManager
|
||||
mandatory: true
|
||||
|
||||
# DHCP
|
||||
- name: dhcpcd
|
||||
mandatory: false
|
||||
|
||||
# Heure synchronisée
|
||||
- name: systemd-timesyncd
|
||||
mandatory: true
|
||||
|
||||
# Gestionnaire de session graphique
|
||||
- name: lightdm
|
||||
mandatory: true
|
||||
|
||||
# Ajoute ici tes services FWS supplémentaires
|
||||
# - name: mon-service-fws
|
||||
# mandatory: false
|
||||
|
||||
targets: []
|
||||
@@ -1,16 +0,0 @@
|
||||
# ============================================================
|
||||
# FWS Linux — modules/unpackfs.conf
|
||||
# Copie le système live vers le disque cible
|
||||
# ============================================================
|
||||
|
||||
unpack:
|
||||
# Source : le squashfs de l'ISO FWS
|
||||
# Adapte "FWS" selon la valeur de iso_name dans profiledef.sh
|
||||
- source: /run/archiso/bootmnt/FWS/x86_64/airootfs.sfs
|
||||
sourcefs: squashfs
|
||||
destination: ""
|
||||
|
||||
# Alternative si tu utilises erofs au lieu de squashfs :
|
||||
# - source: /run/archiso/bootmnt/FWS/x86_64/airootfs.erofs
|
||||
# sourcefs: erofs
|
||||
# destination: ""
|
||||
@@ -1,40 +0,0 @@
|
||||
# ============================================================
|
||||
# FWS Linux — modules/users.conf
|
||||
# ============================================================
|
||||
|
||||
# Nom d'hôte par défaut
|
||||
defaultGroups:
|
||||
- users
|
||||
- lp
|
||||
- video
|
||||
- network
|
||||
- storage
|
||||
- wheel
|
||||
- audio
|
||||
- optical
|
||||
- scanner
|
||||
- power
|
||||
|
||||
# Autoriser le login automatique
|
||||
autologinGroup: autologin
|
||||
doAutologin: true
|
||||
|
||||
# Sudoers — donne les droits sudo au groupe wheel
|
||||
sudoersGroup: wheel
|
||||
|
||||
# Shell par défaut pour les nouveaux utilisateurs
|
||||
userShell: /bin/bash
|
||||
|
||||
# Hostname par défaut
|
||||
hostname:
|
||||
location: EtcFile
|
||||
template: "fws-${first}"
|
||||
|
||||
# Règles pour les mots de passe
|
||||
passwordRequirements:
|
||||
minLength: 6
|
||||
maxLength: -1
|
||||
nonempty: true
|
||||
|
||||
# Permet de définir le même mot de passe pour root et user
|
||||
allowWeakPasswords: false
|
||||
@@ -1,29 +0,0 @@
|
||||
# ============================================================
|
||||
# FWS Linux — modules/welcome.conf
|
||||
# ============================================================
|
||||
|
||||
# Afficher les conditions requises avant l'installation
|
||||
showSupportUrl: true
|
||||
showKnownIssuesUrl: true
|
||||
showReleaseNotesUrl: false
|
||||
showDonateUrl: false
|
||||
|
||||
# Vérifications système requises
|
||||
requirements:
|
||||
# Espace disque minimum en MiB
|
||||
requiredStorage: 20.0
|
||||
|
||||
# RAM minimum en MiB
|
||||
requiredRam: 2.0
|
||||
|
||||
# Vérifier la connexion internet (optionnel)
|
||||
checkInternet: false
|
||||
|
||||
# Vérifier si on tourne en live (pas déjà installé)
|
||||
checkForRoot: true
|
||||
|
||||
# Vérifier l'alimentation (AC power)
|
||||
checkPower: true
|
||||
|
||||
# Ne bloque pas l'install si pas connecté
|
||||
internetCheckUrl: "https://cloudflare.com"
|
||||
@@ -1,51 +0,0 @@
|
||||
# ============================================================
|
||||
# FWS Linux — Calamares settings.conf
|
||||
# ============================================================
|
||||
|
||||
modules-search: [ local, /usr/lib/calamares/modules ]
|
||||
|
||||
sequence:
|
||||
- show:
|
||||
- welcome
|
||||
- locale
|
||||
- keyboard
|
||||
- partition
|
||||
- users
|
||||
- summary
|
||||
|
||||
- exec:
|
||||
- partition
|
||||
- mount
|
||||
- luksbootkeyfile
|
||||
- luksopenswaphookcfg
|
||||
- unpackfs
|
||||
- machineid
|
||||
- fstab
|
||||
- locale
|
||||
- keyboard
|
||||
- localecfg
|
||||
- users
|
||||
- networkcfg
|
||||
- hwclock
|
||||
- services-systemd
|
||||
- packages
|
||||
- initcpiocfg
|
||||
- initcpio
|
||||
- grubcfg
|
||||
- bootloader
|
||||
- umount
|
||||
|
||||
- show:
|
||||
- finished
|
||||
|
||||
branding: fws
|
||||
|
||||
# Demande confirmation avant d'installer
|
||||
prompt-install: true
|
||||
|
||||
# Ne pas chroot (laisser à false pour une install normale)
|
||||
dont-chroot: false
|
||||
|
||||
# Désactive les vérifications réseau au démarrage
|
||||
disable-cancel: false
|
||||
disable-cancel-during-exec: true
|
||||
@@ -1 +1 @@
|
||||
archiso
|
||||
fws
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
To install [38;2;23;147;209mFWS[0m follow the installation guide:
|
||||
https://wiki.archlinux.org/title/Installation_guide
|
||||
Welcome to [38;2;23;147;209mFWS[0m live media.
|
||||
|
||||
To install FWS, see the project page:
|
||||
https://github.com/You-re-like-Windows-a-bitch/fws
|
||||
|
||||
For Wi-Fi, authenticate to the wireless network using the [35miwctl[0m utility.
|
||||
For mobile broadband (WWAN) modems, connect with the [35mmmcli[0m utility.
|
||||
Ethernet, WLAN and WWAN interfaces using DHCP should work automatically.
|
||||
|
||||
After connecting to the internet, the installation guide can be accessed
|
||||
via the convenience script [35mInstallation_guide[0m.
|
||||
|
||||
[41m [41m [41m [40m [44m [40m [41m [46m [45m [41m [46m [43m [41m [44m [45m [40m [44m [40m [41m [44m [41m [41m [46m [42m [41m [44m [43m [41m [45m [40m [40m [44m [40m [41m [44m [42m [41m [46m [44m [41m [46m [47m [0m
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
# remove from airootfs!
|
||||
# Branding FWS : le paquet « filesystem » d'Arch installe /usr/lib/os-release
|
||||
# avec NAME="Arch Linux". On le remplace par la version FWS APRÈS l'installation
|
||||
# des paquets (PostTransaction), donc sans conflit pacman « exists in filesystem »
|
||||
# (poser le fichier dans l'overlay déclencherait ce conflit, cf. ordre overlay→
|
||||
# pacstrap dans mkarchiso). /etc/os-release reste un lien vers ce fichier.
|
||||
# Ce hook ne sert qu'au build : zzzz99-remove-custom-hooks le retire du système.
|
||||
|
||||
[Trigger]
|
||||
Operation = Install
|
||||
Operation = Upgrade
|
||||
Type = Package
|
||||
Target = filesystem
|
||||
|
||||
[Action]
|
||||
Description = Applying FWS branding to /usr/lib/os-release...
|
||||
When = PostTransaction
|
||||
Depends = filesystem
|
||||
Depends = coreutils
|
||||
Exec = /usr/bin/install -Dm0644 /usr/local/share/fws/os-release /usr/lib/os-release
|
||||
@@ -1,5 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
status=$?
|
||||
if [ "${status}" -eq 0 ]; then
|
||||
fastfetch
|
||||
# NB : ce fichier est SOURCÉ par le shell de login (zsh sur le live), pas exécuté
|
||||
# → le shebang est ignoré. En zsh « status » est une variable spéciale EN LECTURE
|
||||
# SEULE (alias de $?) : s'y affecter casse (« read-only variable: status »).
|
||||
# On utilise donc un autre nom.
|
||||
_fastfetch_rc=$?
|
||||
if [ "${_fastfetch_rc}" -eq 0 ]; then
|
||||
# Logo FWS maison (4 carrés + Tux) au lieu du logo Arch détecté par défaut.
|
||||
fastfetch \
|
||||
--logo-type file \
|
||||
--logo /usr/local/share/fws/logo.txt \
|
||||
--logo-color-1 '38;2;30;160;100' \
|
||||
--logo-color-2 '38;2;45;125;210' \
|
||||
--logo-color-3 '38;2;240;180;40' \
|
||||
--logo-color-4 '38;2;25;85;145' \
|
||||
--logo-color-5 '38;2;28;28;34' \
|
||||
--logo-color-6 '38;2;245;165;35'
|
||||
fi
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
[Unit]
|
||||
Description=Calamares Installer
|
||||
After=display-manager.service
|
||||
Requires=display-manager.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
ExecStart=/usr/bin/calamares
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=graphical.target
|
||||
@@ -1,31 +0,0 @@
|
||||
#!/bin/bash
|
||||
# ============================================================
|
||||
# FWS Linux — fws-installer
|
||||
# Script de lancement de Calamares
|
||||
# ============================================================
|
||||
|
||||
# Vérifie que Calamares est installé
|
||||
if ! command -v calamares &>/dev/null; then
|
||||
echo "ERREUR : calamares n'est pas installé."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Vérifie qu'on tourne bien en live
|
||||
if [ ! -d /run/archiso ]; then
|
||||
echo "ATTENTION : Ce script doit être lancé depuis le live FWS."
|
||||
fi
|
||||
|
||||
# Lance Calamares avec les droits root
|
||||
# -D6 active les logs de debug (retirer en production)
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
if command -v sudo >/dev/null 2>&1; then
|
||||
exec sudo -E calamares "$@"
|
||||
elif command -v pkexec >/dev/null 2>&1; then
|
||||
exec pkexec calamares "$@"
|
||||
else
|
||||
echo "ERREUR : Impossible de lancer Calamares en tant que root (sudo/pkexec non trouvés)."
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
exec calamares "$@"
|
||||
fi
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
@@ -0,0 +1,9 @@
|
||||
$1████████ $2██$5████$2██
|
||||
$1████████ $2█$5██$2██$5██$2█
|
||||
$1████████ $2█$5██████$2█
|
||||
$1████████ $2██$6█$2██$6█$2██
|
||||
|
||||
$3████████ $4████████
|
||||
$3████████ $4████████
|
||||
$3████████ $4████████
|
||||
$3████████ $4████████
|
||||
@@ -0,0 +1,11 @@
|
||||
NAME="FWS"
|
||||
PRETTY_NAME="FWS Linux"
|
||||
ID=fws
|
||||
ID_LIKE=arch
|
||||
BUILD_ID=rolling
|
||||
VERSION_ID="1.0.0"
|
||||
ANSI_COLOR="38;2;23;147;209"
|
||||
HOME_URL="https://github.com/You-re-like-Windows-a-bitch/fws"
|
||||
SUPPORT_URL="https://github.com/You-re-like-Windows-a-bitch/fws/issues"
|
||||
BUG_REPORT_URL="https://github.com/You-re-like-Windows-a-bitch/fws/issues"
|
||||
LOGO=fws
|
||||
@@ -0,0 +1,255 @@
|
||||
# ============================================================================
|
||||
# FWS — interactive-defaults.ks
|
||||
#
|
||||
# Kickstart de base, lu AUTOMATIQUEMENT par Anaconda quand l'install est
|
||||
# lancée en mode interactif (chemin fixe codé en dur dans Anaconda :
|
||||
# /usr/share/anaconda/interactive-defaults.ks). Aucun inst.ks= n'est requis.
|
||||
#
|
||||
# RÔLE : empêcher Anaconda d'installer Fedora.
|
||||
# ----------------------------------------------------------------------------
|
||||
# Sans payload défini, Anaconda utilise DNF → des RPM depuis les dépôts
|
||||
# Fedora = il installe Fedora. Anaconda n'a AUCUN backend pacman. La seule
|
||||
# façon de poser FWS/Arch est le payload « liveimg » : il recopie une image
|
||||
# de système de fichiers (ici le squashfs du live = FWS) sur le disque, puis
|
||||
# on finalise nous-mêmes (grub, mkinitcpio, bureau) en %post. C'est le modèle
|
||||
# « Sabayon » : le système installé EST une copie du live.
|
||||
#
|
||||
# L'utilisateur garde la main dans le GUI sur tout ce qui N'EST PAS fixé ici :
|
||||
# partitionnement, fuseau, clavier, langue, création d'utilisateur, mot de
|
||||
# passe root, etc.
|
||||
# ============================================================================
|
||||
|
||||
# --- Source d'installation : l'image du live (FWS), surtout pas Fedora -------
|
||||
# Squashfs archiso sur le média booté :
|
||||
# /run/archiso/bootmnt/<install_dir>/<arch>/airootfs.sfs
|
||||
# install_dir=fws, arch=x86_64, airootfs_image_type=squashfs (cf. profiledef.sh).
|
||||
# Anaconda loop-monte ce .sfs et rsync son contenu vers la cible.
|
||||
#
|
||||
# ⚠ À VALIDER sur ISO réelle : certaines versions d'Anaconda attendent une
|
||||
# structure « LiveOS/rootfs.img » à l'intérieur du squashfs (format Fedora
|
||||
# Live) et non un squashfs « plat » comme celui d'archiso. Si l'install
|
||||
# échoue à monter la source, basculer sur un tarball de rootfs dédié :
|
||||
# liveimg --url=file:///run/archiso/bootmnt/fws/x86_64/fws-rootfs.tar.gz
|
||||
# (un build-rootfs.sh produirait alors ce tar via pacstrap).
|
||||
liveimg --url=file:///run/archiso/bootmnt/fws/x86_64/airootfs.sfs
|
||||
|
||||
# --- Disque : repartir d'un disque PROPRE, même s'il a déjà servi ------------
|
||||
# Sans ça, une réinstallation sur un disque déjà partitionné (typiquement une
|
||||
# install FWS précédente : partitions + VG LVM « anaconda_archiso ») pose deux
|
||||
# problèmes : le partitionnement auto n'a plus d'espace libre, et blivet
|
||||
# rescanne/auto-active un LVM existant au boot du live → l'installateur se
|
||||
# comporte mal voire plante au 2e passage (alors qu'un disque vierge passe).
|
||||
# zerombr : réinitialise toute table de partitions invalide
|
||||
# (répond « oui » au lieu de bloquer sur un disque
|
||||
# non reconnu).
|
||||
# clearpart --all : supprime TOUTES les partitions de TOUS les disques.
|
||||
# --initlabel : réécrit une étiquette de disque neuve.
|
||||
# --disklabel=msdos : force une table MBR (et non GPT). CRUCIAL en BIOS :
|
||||
# en BIOS+GPT, GRUB i386-pc exige une partition « BIOS
|
||||
# Boot » (~1 Mo, type EF02) pour embarquer core.img,
|
||||
# qu'Anaconda NE crée PAS avec « bootloader --disabled
|
||||
# » → « this GPT partition label contains no BIOS Boot
|
||||
# Partition; embedding won't be possible » →
|
||||
# grub-install échoue. En MBR, core.img se loge dans
|
||||
# l'espace post-MBR, aucune partition dédiée requise.
|
||||
# ⚠ Ce choix vise le BIOS (cas VMware actuel). Pour l'UEFI il faudra du GPT
|
||||
# (+ ESP) — à rendre dépendant du firmware (%pre) le jour où on cible l'UEFI.
|
||||
# L'utilisateur garde la main dans le GUI (il peut repasser en manuel), mais le
|
||||
# DÉFAUT est désormais un disque net → réinstall fiable à chaque fois.
|
||||
# ⚠ VM mono-disque : « --all » efface le seul disque, c'est voulu. Sur une
|
||||
# machine multi-disques il faudrait cibler avec « --drives=sda ».
|
||||
zerombr
|
||||
clearpart --all --initlabel --disklabel=msdos
|
||||
|
||||
# --- Bootloader : géré à la main en %post ------------------------------------
|
||||
# Anaconda lancerait « grub2-install » / « grub2-mkconfig » (binaires Fedora,
|
||||
# préfixe grub2-) qui n'existent pas dans un rootfs Arch (lequel fournit
|
||||
# grub-install / grub-mkconfig). On désactive donc l'étape native d'Anaconda.
|
||||
# L'ESP (UEFI) ou la partition bios_boot (BIOS/GPT) reste créée par le
|
||||
# partitionnement (auto ou manuel) car la plateforme l'impose.
|
||||
bootloader --disabled
|
||||
|
||||
# Pas de section %packages : le payload liveimg n'installe aucun paquet
|
||||
# (il copie une image). Toute installation de paquets se fait en %post.
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# %post --nochroot — s'exécute dans le LIVE, la cible montée sous /mnt/sysroot
|
||||
# But : déposer dans la cible ce dont le %post chrooté aura besoin (DNS pour
|
||||
# pacman, choix de bureau écrit par l'addon de sélection).
|
||||
# ============================================================================
|
||||
%post --nochroot --log=/tmp/fws-post-nochroot.log
|
||||
set -x
|
||||
|
||||
# Selon la version d'Anaconda la cible est sous /mnt/sysroot (récent) ou
|
||||
# /mnt/sysimage (ancien).
|
||||
SYSROOT=/mnt/sysroot
|
||||
[ -d "$SYSROOT" ] || SYSROOT=/mnt/sysimage
|
||||
|
||||
# DNS pour que « pacman -S <bureau> » fonctionne dans le chroot.
|
||||
cp -f /etc/resolv.conf "$SYSROOT/etc/resolv.conf" 2>/dev/null || true
|
||||
|
||||
# --- Hostname : valeur saisie dans le champ « Nom de machine » du spoke User --
|
||||
# Anaconda ne capte PAS le hostname du spoke Réseau (→ /etc/hostname vide). On a
|
||||
# donc ajouté un champ Hostname au spoke Utilisateur (cf. patch du paquet
|
||||
# anaconda) : user.py écrit la valeur dans /tmp/fws-hostname (live). On la
|
||||
# nettoie (caractères de hostname valides) et on l'écrit dans la cible ; défaut
|
||||
# « fws » si vide/absent → plus jamais de hostname vide ni « archiso ».
|
||||
HN=""
|
||||
[ -f /tmp/fws-hostname ] && HN="$(tr -cd 'a-zA-Z0-9._-' < /tmp/fws-hostname)"
|
||||
[ -n "$HN" ] || HN="fws"
|
||||
echo "$HN" > "$SYSROOT/etc/hostname"
|
||||
|
||||
# Choix du bureau (écrit par l'addon « Choix du bureau », à venir ; valeur lue
|
||||
# par le %post chrooté ci-dessous). « cli » par défaut si absent.
|
||||
if [ -f /tmp/fws-desktop ]; then
|
||||
cp -f /tmp/fws-desktop "$SYSROOT/tmp/fws-desktop" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# --- Noyau : archiso RETIRE /boot/vmlinuz-linux du squashfs ------------------
|
||||
# mkarchiso boote le noyau depuis l'ISO et l'EXCLUT de l'airootfs squashfs (gain
|
||||
# de place). Conséquence : le payload LiveOS recopie un rootfs SANS noyau →
|
||||
# « mkinitcpio: /boot/vmlinuz-linux must be readable » puis aucun OS à booter
|
||||
# (« Operating System not found »). On récupère donc le noyau depuis le média
|
||||
# booté (/run/archiso/bootmnt/<install_dir>/boot/<arch>/vmlinuz-linux) et on le
|
||||
# dépose dans la cible. Les modules (/usr/lib/modules) sont, eux, dans le
|
||||
# squashfs → déjà recopiés. Avec le noyau présent, le %post chrooté peut bâtir
|
||||
# l'initramfs (mkinitcpio) et GRUB trouve de quoi booter.
|
||||
SRC_KERN="$(find /run/archiso/bootmnt -name 'vmlinuz-linux' 2>/dev/null | head -1)"
|
||||
if [ -n "$SRC_KERN" ]; then
|
||||
cp -f "$SRC_KERN" "$SYSROOT/boot/vmlinuz-linux"
|
||||
else
|
||||
echo "[FWS] AVERTISSEMENT : noyau vmlinuz-linux introuvable sur le média"
|
||||
fi
|
||||
%end
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# %post (chroot) — DANS le rootfs FWS recopié. pacman, grub-install,
|
||||
# mkinitcpio existent ici : ce sont les outils Arch de l'image copiée.
|
||||
# Log persistant : /var/log/fws-post.log sur le système installé.
|
||||
# ============================================================================
|
||||
%post --log=/var/log/fws-post.log
|
||||
set -x
|
||||
|
||||
# --- 1) Purge des résidus « live » (modèle Sabayon = live copié tel quel) ----
|
||||
# Ce qui est propre au live casserait ou pollue le système installé.
|
||||
rm -f /etc/mkinitcpio.conf.d/archiso.conf
|
||||
rm -f /etc/systemd/system/getty@tty1.service.d/autologin.conf
|
||||
for svc in choose-mirror.service pacman-init.service \
|
||||
livecd-talk.service livecd-alsa-unmuter.service \
|
||||
etc-pacman.d-gnupg.mount; do
|
||||
rm -f "/etc/systemd/system/$svc"
|
||||
rm -f /etc/systemd/system/*.target.wants/"$svc"
|
||||
done
|
||||
# cloud-init (présent dans l'airootfs archiso) : inutile sur un poste installé.
|
||||
rm -f /etc/systemd/system/cloud-init.target.wants/* 2>/dev/null || true
|
||||
# Hooks initramfs archiso, s'ils ont été recopiés en tant que paquet.
|
||||
if pacman -Q mkinitcpio-archiso &>/dev/null; then
|
||||
pacman -Rns --noconfirm mkinitcpio-archiso || true
|
||||
fi
|
||||
|
||||
# --- 2) initramfs propre (preset Arch standard, sans archiso) ----------------
|
||||
# Le live fournit un preset 'archiso' (/etc/mkinitcpio.d/linux.preset qui pointe
|
||||
# vers conf.d/archiso.conf + hooks archiso) → inadapté à un disque normal. On
|
||||
# pose un preset Arch standard (config par défaut /etc/mkinitcpio.conf).
|
||||
cat > /etc/mkinitcpio.d/linux.preset <<'PRESET'
|
||||
ALL_kver="/boot/vmlinuz-linux"
|
||||
PRESETS=('default' 'fallback')
|
||||
default_image="/boot/initramfs-linux.img"
|
||||
fallback_image="/boot/initramfs-linux-fallback.img"
|
||||
fallback_options="-S autodetect"
|
||||
PRESET
|
||||
# Le partitionnement auto d'Anaconda met « / » sur LVM (/dev/mapper/...-root).
|
||||
# Sans le hook 'lvm2' dans l'initramfs, le VG n'est pas activé au boot → la
|
||||
# racine est introuvable → kernel panic. On l'insère avant 'filesystems' s'il
|
||||
# manque (inoffensif si la racine n'est finalement pas sur LVM).
|
||||
if ! grep -qE '^HOOKS=.*\blvm2\b' /etc/mkinitcpio.conf; then
|
||||
sed -i -E 's/^(HOOKS=\(.*)\bfilesystems\b/\1lvm2 filesystems/' /etc/mkinitcpio.conf
|
||||
fi
|
||||
mkinitcpio -P || echo "[FWS] AVERTISSEMENT : mkinitcpio a échoué"
|
||||
|
||||
# --- 3) GRUB installé à la main (cf. bootloader --disabled) ------------------
|
||||
install_grub() {
|
||||
if [ -d /sys/firmware/efi ]; then
|
||||
# UEFI. efibootmgr crée l'entrée NVRAM « FWS », mais il peut MANQUER de
|
||||
# l'airootfs et son install dépend du réseau → on ne BLOQUE pas dessus.
|
||||
pacman -Q efibootmgr &>/dev/null || pacman -Sy --noconfirm efibootmgr || true
|
||||
# (a) Entrée NVRAM dédiée (best effort, si efibootmgr dispo) :
|
||||
grub-install --target=x86_64-efi --efi-directory=/boot/efi \
|
||||
--bootloader-id=FWS --recheck || true
|
||||
# (b) Chemin de SECOURS EFI/BOOT/BOOTX64.EFI (--removable) : boote SANS
|
||||
# aucune entrée NVRAM. INDISPENSABLE en VM / sans réseau / firmware
|
||||
# qui « oublie » l'entrée — c'est lui qui garantit le 1er boot UEFI.
|
||||
grub-install --target=x86_64-efi --efi-directory=/boot/efi \
|
||||
--bootloader-id=FWS --removable --recheck
|
||||
else
|
||||
# BIOS : installer GRUB dans le MBR du DISQUE physique (PAS une partition)
|
||||
# portant « / », même quand « / » est sur du LVM (chaîne
|
||||
# LV → PV partition → disque). « lsblk -s » descend vers le physique ; on
|
||||
# prend la ligne de type « disk ». ATTENTION : « lsblk -s » dessine un
|
||||
# ARBRE → les caractères de branche (└─) se collent au chemin (on
|
||||
# obtenait disk='-/dev/sda' → « grub-install: cannot find a GRUB drive
|
||||
# for `-/dev/sda' »). On EXTRAIT donc le chemin propre avec grep.
|
||||
local rootsrc disk
|
||||
rootsrc="$(findmnt -no SOURCE / 2>/dev/null)"
|
||||
disk="$(lsblk -spno NAME,TYPE "$rootsrc" 2>/dev/null \
|
||||
| awk '$2=="disk"{print $1; exit}' | grep -oE '/dev/[a-z0-9]+')"
|
||||
[ -n "$disk" ] || { echo "[FWS] Disque BIOS introuvable pour '$rootsrc'"; return 1; }
|
||||
grub-install --target=i386-pc --recheck "$disk"
|
||||
fi
|
||||
}
|
||||
if install_grub; then
|
||||
grub-mkconfig -o /boot/grub/grub.cfg || echo "[FWS] grub-mkconfig a échoué"
|
||||
else
|
||||
echo "[FWS] AVERTISSEMENT : grub-install a échoué — bootloader à refaire à la main"
|
||||
fi
|
||||
|
||||
# --- 4) Bureau choisi : pacman -S du DE (non bloquant si pas de réseau) -------
|
||||
DESK="cli"
|
||||
[ -f /tmp/fws-desktop ] && DESK="$(tr -d '[:space:]' < /tmp/fws-desktop)"
|
||||
DM=""
|
||||
case "$DESK" in
|
||||
kde) PKGS="plasma-meta sddm konsole dolphin"; DM="sddm" ;;
|
||||
gnome) PKGS="gnome gdm"; DM="gdm" ;;
|
||||
xfce) PKGS="xfce4 xfce4-goodies lightdm lightdm-gtk-greeter"; DM="lightdm" ;;
|
||||
hyprland) PKGS="hyprland kitty wofi waybar sddm"; DM="sddm" ;;
|
||||
cli|*) PKGS="" ;;
|
||||
esac
|
||||
if [ -n "$PKGS" ]; then
|
||||
pacman-key --init &>/dev/null || true
|
||||
pacman-key --populate archlinux &>/dev/null || true
|
||||
if pacman -Sy --noconfirm $PKGS; then
|
||||
[ -n "$DM" ] && systemctl enable "$DM" || true
|
||||
systemctl set-default graphical.target || true
|
||||
else
|
||||
echo "[FWS] Bureau '$DESK' non installé (réseau ?) — à refaire après le 1er boot."
|
||||
fi
|
||||
fi
|
||||
|
||||
# --- 5) Sécurité : verrouiller root s'il est resté SANS mot de passe ----------
|
||||
# L'airootfs live a souvent un root sans mot de passe ; si l'utilisateur n'en a
|
||||
# pas défini dans le GUI, on verrouille plutôt que de laisser le compte ouvert.
|
||||
if passwd -S root 2>/dev/null | grep -qE '\bNP\b'; then
|
||||
passwd -l root || true
|
||||
fi
|
||||
|
||||
# --- 6) Le resolv.conf du live ne doit pas rester figé -----------------------
|
||||
# NetworkManager (activé sur le système installé) régénère /etc/resolv.conf.
|
||||
rm -f /tmp/fws-desktop /etc/resolv.conf 2>/dev/null || true
|
||||
%end
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# %post --nochroot (FINAL) — exfiltre le log du %post chrooté vers le LIVE.
|
||||
# À ce stade la cible est ENCORE montée sous /mnt/sysroot (l'unmount n'a pas
|
||||
# encore eu lieu). On copie /var/log/fws-post.log (résultat de grub-install /
|
||||
# mkinitcpio) vers le live /tmp pour que le harnais de debug (.xinitrc)
|
||||
# l'affiche SANS avoir à remonter le disque démonté — c'est ce log qui dit si
|
||||
# le disque va booter.
|
||||
# ============================================================================
|
||||
%post --nochroot
|
||||
SYSROOT=/mnt/sysroot
|
||||
[ -d "$SYSROOT" ] || SYSROOT=/mnt/sysimage
|
||||
cp -f "$SYSROOT/var/log/fws-post.log" /tmp/fws-post-chroot.log 2>/dev/null || true
|
||||
%end
|
||||
@@ -1,13 +0,0 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Name=Installer FWS Linux
|
||||
Name[fr]=Installer FWS Linux
|
||||
Comment=Installe FWS Linux sur votre machine
|
||||
Comment[fr]=Installe FWS Linux sur votre machine
|
||||
Exec=fws-installer
|
||||
Icon=/etc/calamares/branding/fws/logo.png
|
||||
Terminal=false
|
||||
Categories=System;
|
||||
Keywords=install;installer;fws;calamares;
|
||||
StartupNotify=true
|
||||
@@ -1,7 +1,7 @@
|
||||
# ============================================================
|
||||
# FWS — paquets de l'ISO live
|
||||
# Objectif : système live bootable + installeur Calamares
|
||||
# fonctionnel + jeu minimal d'outils de rescue.
|
||||
# Objectif : système live bootable + installateur Anaconda
|
||||
# (migration depuis Calamares) + jeu minimal d'outils de rescue.
|
||||
# ============================================================
|
||||
|
||||
# --- Base système ---
|
||||
@@ -85,7 +85,7 @@ htop
|
||||
alsa-utils
|
||||
sof-firmware
|
||||
|
||||
# --- Xorg + Openbox (pour Calamares) ---
|
||||
# --- Xorg + Openbox (session graphique de l'installateur) ---
|
||||
xorg-server
|
||||
xorg-xinit
|
||||
xorg-xrandr
|
||||
@@ -93,19 +93,6 @@ xorg-xsetroot
|
||||
openbox
|
||||
ttf-dejavu
|
||||
|
||||
# --- Bureau FWS installé ---
|
||||
xfce4
|
||||
xfce4-goodies
|
||||
lightdm
|
||||
lightdm-gtk-greeter
|
||||
|
||||
# --- Calamares (fournis par fws-local) ---
|
||||
calamares
|
||||
kpmcore
|
||||
qt5-base
|
||||
qt5-svg
|
||||
qt6-base
|
||||
|
||||
# --- Agents VM (pratique pour tester l'ISO) ---
|
||||
qemu-guest-agent
|
||||
virtualbox-guest-utils-nox
|
||||
@@ -113,3 +100,17 @@ open-vm-tools
|
||||
|
||||
# --- FWS (fws-local) ---
|
||||
winboat-bin
|
||||
|
||||
# --- Installateur Anaconda (fws-local) ---
|
||||
# 'anaconda' tire automatiquement anaconda-widgets + toutes ses dépendances
|
||||
# (python-blivet, pykickstart, libreport, gtk3, NetworkManager…).
|
||||
anaconda
|
||||
# Module 'cgi' (retiré de Python 3.13, PEP 594) requis par python-requests-ftp
|
||||
# que pyanaconda/core/util.py importe en dur. python-legacy-cgi le réintroduit.
|
||||
python-legacy-cgi
|
||||
# Module 'crypt'/'crypt_r' (retiré de Python 3.13, PEP 594) requis par
|
||||
# pyanaconda/core/users.py (hash des mots de passe). Paquet maison (fws-local).
|
||||
python-crypt_r
|
||||
# Namespace GI 'OSTree-1.0' : pyanaconda/rescue.py importe le payload rpm_ostree
|
||||
# (inconditionnellement, même si FWS utilise liveimg) → fourni par 'ostree'.
|
||||
ostree
|
||||
|
||||
@@ -22,4 +22,6 @@ file_permissions=(
|
||||
["/usr/local/bin/choose-mirror"]="0:0:755"
|
||||
["/usr/local/bin/Installation_guide"]="0:0:755"
|
||||
["/usr/local/bin/livecd-sound"]="0:0:755"
|
||||
["/usr/bin/load_policy"]="0:0:755"
|
||||
["/usr/bin/setstatus"]="0:0:755"
|
||||
)
|
||||
|
||||
@@ -0,0 +1,380 @@
|
||||
# Environnement de référence — machine hôte qui build FWS
|
||||
|
||||
Ce document décrit **l'environnement exact** sur lequel le build FWS fonctionne de bout en bout. Si le build échoue chez toi, **compare ligne par ligne** avec cette config et aligne ce qui diffère.
|
||||
|
||||
> ⚠️ Ce n'est pas une simple recommandation : chaque ligne ci-dessous a été vérifiée comme nécessaire (ou suffisante) à un build réussi. Une seule différence peut tout casser (keyring, kernel WSL, sandbox pacman, ligne d'encodage…).
|
||||
|
||||
---
|
||||
|
||||
## 1. Matériel (host Windows)
|
||||
|
||||
| Composant | Valeur de référence | Minimum acceptable | Pourquoi |
|
||||
|---|---|---|---|
|
||||
| CPU | AMD Ryzen 9 9950X3D (16 cores / 32 threads) | x86_64 avec **VT-x ou AMD-V activé dans le BIOS** | WSL 2 = Hyper-V → la virtualisation **doit** être activée dans le firmware |
|
||||
| RAM | 64 GB (61.67 GB utilisable) | 8 GB | `mkarchiso` charge l'image squashfs en RAM ; `makepkg` des paquets AUR compile en parallèle |
|
||||
| Disque libre sur `C:` | ≥ 130 GB libres | 25 GB libres | WSL grossit dynamiquement ; squashfs intermédiaire peut atteindre 10 GB |
|
||||
| Architecture | x86_64 | x86_64 | ArchWSL n'existe pas en ARM |
|
||||
|
||||
---
|
||||
|
||||
## 2. OS hôte
|
||||
|
||||
| Composant | Valeur exacte référence | Notes |
|
||||
|---|---|---|
|
||||
| OS | **Microsoft Windows 11 Professionnel** | Édition Pro/Entreprise/Éducation recommandée (Hyper-V natif) |
|
||||
| Version | **10.0.26200** (build 26200) | Windows 11 24H2 ou plus récent |
|
||||
| Architecture | 64 bits | — |
|
||||
|
||||
Vérifier :
|
||||
|
||||
```bash
|
||||
powershell.exe -Command "(Get-CimInstance Win32_OperatingSystem).Caption + ' build ' + (Get-CimInstance Win32_OperatingSystem).BuildNumber"
|
||||
```
|
||||
|
||||
Doit retourner : `Microsoft Windows 11 ... build 26200` (ou supérieur).
|
||||
|
||||
---
|
||||
|
||||
## 3. Git for Windows + Git Bash
|
||||
|
||||
| Composant | Valeur de référence |
|
||||
|---|---|
|
||||
| Git | **2.53.0.windows.2** |
|
||||
| Bash (Git Bash) | **GNU bash 5.2.37(1)-release (x86_64-pc-msys)** |
|
||||
|
||||
Vérifier :
|
||||
|
||||
```bash
|
||||
git --version
|
||||
bash --version | head -1
|
||||
```
|
||||
|
||||
> Git Bash < 2.40 a un quoting cassé sur `wsl.exe` — les scripts plantent silencieusement. Mets à jour si tu es en dessous.
|
||||
|
||||
---
|
||||
|
||||
## 4. WSL (Windows Subsystem for Linux)
|
||||
|
||||
| Composant | Valeur de référence |
|
||||
|---|---|
|
||||
| Version WSL | **WSL 2** (WSL 1 = pas supporté) |
|
||||
| Distribution par défaut | **Arch** |
|
||||
| Version de la distro | **2** |
|
||||
| `.wslconfig` (côté Windows, `C:\Users\<toi>\.wslconfig`) | **Absent** (réglages par défaut suffisent) |
|
||||
|
||||
Vérifier :
|
||||
|
||||
```bash
|
||||
wsl.exe --status
|
||||
wsl.exe -l -v
|
||||
```
|
||||
|
||||
Doit afficher exactement :
|
||||
|
||||
```
|
||||
NAME STATE VERSION
|
||||
* Arch Stopped 2
|
||||
```
|
||||
|
||||
⚠️ **Le nom doit être exactement `Arch`** (sinon exporter `ARCH_WSL_DISTRO=NomChezToi` avant de lancer les scripts).
|
||||
|
||||
---
|
||||
|
||||
## 5. WSL Arch — kernel et système
|
||||
|
||||
| Composant | Valeur de référence | Vérif |
|
||||
|---|---|---|
|
||||
| Kernel WSL | **6.6.114.1-microsoft-standard-WSL2** | `wsl.exe -d Arch -- uname -r` |
|
||||
| Hostname (par défaut) | murasaki (peu importe le tien) | — |
|
||||
| Distribution | **Arch Linux rolling** | `cat /etc/os-release` |
|
||||
| Build ID | `20250302.0.316047` (ou plus récent) | — |
|
||||
|
||||
Mettre à jour le kernel WSL si nécessaire (PowerShell admin) :
|
||||
|
||||
```bash
|
||||
powershell.exe -Command "Start-Process powershell -Verb RunAs -ArgumentList 'wsl --update'"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. WSL Arch — `/etc/wsl.conf`
|
||||
|
||||
Fichier **obligatoire** : `/etc/wsl.conf` dans la distro Arch.
|
||||
|
||||
```ini
|
||||
[boot]
|
||||
systemd=true
|
||||
```
|
||||
|
||||
Vérifier :
|
||||
|
||||
```bash
|
||||
wsl.exe -d Arch -u root -- cat //etc/wsl.conf
|
||||
```
|
||||
|
||||
> Sans `systemd=true`, l'activation de `NetworkManager.service` dans le live ne sera pas testable, et `pacman-key --populate` peut bloquer.
|
||||
|
||||
Après modification :
|
||||
|
||||
```bash
|
||||
wsl.exe --shutdown
|
||||
```
|
||||
|
||||
(redémarrage complet de la WSL pour appliquer `wsl.conf`).
|
||||
|
||||
---
|
||||
|
||||
## 7. WSL Arch — pacman
|
||||
|
||||
| Composant | Valeur de référence |
|
||||
|---|---|
|
||||
| pacman | **v7.1.0** |
|
||||
| libalpm | **v16.0.1** |
|
||||
| `/etc/pacman.conf` → `DisableSandbox` | **Présent et décommenté** |
|
||||
|
||||
`/etc/pacman.conf` doit contenir, dans la section `[options]` :
|
||||
|
||||
```ini
|
||||
DisableSandbox
|
||||
```
|
||||
|
||||
> pacman ≥ 7 utilise **landlock** pour sandboxer les opérations FS. **Le kernel WSL ne supporte pas landlock** → tout install bloque. `setup-aur.sh` l'ajoute automatiquement la première fois.
|
||||
|
||||
Vérifier :
|
||||
|
||||
```bash
|
||||
wsl.exe -d Arch -u root -- grep -E "^DisableSandbox" //etc/pacman.conf
|
||||
```
|
||||
|
||||
Doit retourner : `DisableSandbox` (sans `#`).
|
||||
|
||||
---
|
||||
|
||||
## 8. WSL Arch — paquets requis
|
||||
|
||||
Versions de référence (peuvent évoluer, l'important est que ces paquets soient installés et à jour) :
|
||||
|
||||
| Paquet | Version réf | Rôle |
|
||||
|---|---|---|
|
||||
| `archiso` | **88-1** | `mkarchiso` (build de l'ISO) |
|
||||
| `base-devel` | **1-2** | `makepkg`, gcc, make, fakeroot |
|
||||
| `git` | **2.54.0-1** | clone des paquets AUR |
|
||||
| `reflector` | **2023-5** | mise à jour des miroirs |
|
||||
| `dos2unix` | **7.5.5-1** | fix des CRLF Windows |
|
||||
|
||||
Vérifier :
|
||||
|
||||
```bash
|
||||
wsl.exe -d Arch -u root -- pacman -Q archiso base-devel git reflector dos2unix
|
||||
```
|
||||
|
||||
Tout doit retourner une version (pas `not found`). Si manquant :
|
||||
|
||||
```bash
|
||||
wsl.exe -d Arch -u root -- pacman -Sy --noconfirm archiso base-devel git reflector dos2unix
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. WSL Arch — keyring pacman
|
||||
|
||||
État requis :
|
||||
|
||||
- `pacman-key --init` exécuté au moins une fois (crée `/etc/pacman.d/gnupg/`)
|
||||
- `pacman-key --populate archlinux` exécuté au moins une fois
|
||||
- `archlinux-keyring` à jour
|
||||
|
||||
Vérifier :
|
||||
|
||||
```bash
|
||||
wsl.exe -d Arch -u root -- ls //etc/pacman.d/gnupg/
|
||||
wsl.exe -d Arch -u root -- pacman -Q archlinux-keyring
|
||||
```
|
||||
|
||||
Le dossier `gnupg/` doit exister et contenir `pubring.gpg`, `trustdb.gpg`, etc.
|
||||
|
||||
Si jamais initialisé :
|
||||
|
||||
```bash
|
||||
wsl.exe -d Arch -u root -- bash -c "pacman-key --init && pacman-key --populate archlinux && pacman -Sy --noconfirm archlinux-keyring && pacman -Syu --noconfirm"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 10. WSL Arch — espace disque
|
||||
|
||||
Mesuré sur la machine de référence :
|
||||
|
||||
```
|
||||
Filesystem Size Used Avail Use% Mounted on
|
||||
tmpfs 16G 0 16G 0% /tmp
|
||||
/dev/sdd 1007G 4.3G 952G 1% /
|
||||
```
|
||||
|
||||
Vérifier :
|
||||
|
||||
```bash
|
||||
wsl.exe -d Arch -u root -- df -h //tmp /
|
||||
```
|
||||
|
||||
| Point de montage | Minimum |
|
||||
|---|---|
|
||||
| `/tmp` (tmpfs) | ≥ 4 GB libres |
|
||||
| `/` (rootfs WSL) | ≥ 20 GB libres |
|
||||
|
||||
> Si `/tmp` n'est pas un `tmpfs`, mkarchiso sera **5-10× plus lent**. Sur WSL avec systemd, c'est tmpfs par défaut.
|
||||
|
||||
---
|
||||
|
||||
## 11. Variables d'environnement (Git Bash)
|
||||
|
||||
Aucune variable n'est requise **pour que ça marche**, mais les scripts en utilisent en interne :
|
||||
|
||||
| Variable | Valeur | Quand |
|
||||
|---|---|---|
|
||||
| `MSYS_NO_PATHCONV=1` | forcée par `build.sh` et `setup-aur.sh` | empêche Git Bash de convertir `/tmp/...` en chemins Windows |
|
||||
| `MSYS2_ARG_CONV_EXCL=*` | forcée par `setup-aur.sh` | empêche la conversion d'arguments passés à `wsl.exe` |
|
||||
| `ARCH_WSL_DISTRO` | optionnel, défaut = `Arch` | nom de la distro WSL si tu as renommé |
|
||||
|
||||
---
|
||||
|
||||
## 12. Permissions & emplacement du repo
|
||||
|
||||
| Critère | Référence |
|
||||
|---|---|
|
||||
| Chemin du repo (host) | `C:\Users\<user>\Documents\1. FWS\FWS\` |
|
||||
| Chemin équivalent WSL | `/mnt/c/Users/<user>/Documents/1. FWS/FWS/` |
|
||||
| Espaces dans le chemin | **OK** (les scripts gèrent `"1. FWS"`) |
|
||||
| Caractères accentués dans le chemin | **À éviter** (mkarchiso plante) |
|
||||
| Antivirus / Defender exclusion sur le dossier | **Recommandé** (gros gain de perf sur `cp -ar`) |
|
||||
|
||||
Ajouter une exclusion Defender (PowerShell admin) :
|
||||
|
||||
```bash
|
||||
powershell.exe -Command "Start-Process powershell -Verb RunAs -ArgumentList 'Add-MpPreference -ExclusionPath \"C:\Users\$env:USERNAME\Documents\1. FWS\"'"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 13. Réseau
|
||||
|
||||
| Critère | État requis |
|
||||
|---|---|
|
||||
| Accès internet depuis WSL | obligatoire (pacman, AUR, reflector) |
|
||||
| Proxy d'entreprise | configurer dans `/etc/wgetrc` + `/etc/pacman.d/mirrorlist` |
|
||||
| `mirrorlist` à jour | `reflector --latest 10 --sort rate` (fait par `setup-aur.sh`) |
|
||||
|
||||
Tester depuis WSL :
|
||||
|
||||
```bash
|
||||
wsl.exe -d Arch -u root -- bash -c "curl -sI https://archlinux.org/ | head -1"
|
||||
```
|
||||
|
||||
Doit retourner : `HTTP/2 200`.
|
||||
|
||||
---
|
||||
|
||||
## 14. Procédure de remise à zéro complète
|
||||
|
||||
Si rien ne fonctionne, **réinitialise la WSL Arch** depuis Git Bash :
|
||||
|
||||
```bash
|
||||
# Sauvegarde le repo FWS d'abord (il est sur C:, donc safe)
|
||||
wsl.exe --shutdown
|
||||
wsl.exe --unregister Arch
|
||||
|
||||
# Réinstalle ArchWSL
|
||||
curl.exe -L -o "$TEMP/Arch.zip" "https://github.com/yuk7/ArchWSL/releases/latest/download/Arch.zip"
|
||||
powershell.exe -Command "Expand-Archive -Force '$env:TEMP\Arch.zip' '$env:LOCALAPPDATA\ArchWSL'"
|
||||
"$LOCALAPPDATA/ArchWSL/Arch.exe" # ferme la fenêtre dès qu'elle s'ouvre
|
||||
|
||||
# Configure wsl.conf
|
||||
wsl.exe -d Arch -u root -- bash -c 'printf "[boot]\nsystemd=true\n" > /etc/wsl.conf'
|
||||
wsl.exe --shutdown
|
||||
|
||||
# Init complète
|
||||
wsl.exe -d Arch -u root -- bash -c "pacman-key --init && pacman-key --populate archlinux && pacman -Sy --noconfirm archlinux-keyring && pacman -Syu --noconfirm && pacman -S --noconfirm --needed archiso base-devel git reflector dos2unix"
|
||||
|
||||
# Relance le build
|
||||
cd "/c/Users/$USER/Documents/1. FWS/FWS"
|
||||
./setup-aur.sh
|
||||
./build.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 15. Checklist rapide de diagnostic
|
||||
|
||||
À copier-coller dans Git Bash pour comparer ta machine avec la référence :
|
||||
|
||||
```bash
|
||||
echo "=== Host ===" && powershell.exe -Command "(Get-CimInstance Win32_OperatingSystem).Caption + ' build ' + (Get-CimInstance Win32_OperatingSystem).BuildNumber"
|
||||
echo "=== Git ===" && git --version
|
||||
echo "=== Bash ===" && bash --version | head -1
|
||||
echo "=== WSL ===" && wsl.exe -l -v
|
||||
echo "=== Kernel ===" && wsl.exe -d Arch -u root -- uname -r 2>&1 | tr -d '\0'
|
||||
echo "=== pacman ===" && wsl.exe -d Arch -u root -- bash -c "pacman --version | head -2" 2>&1 | tr -d '\0'
|
||||
echo "=== Sandbox ===" && wsl.exe -d Arch -u root -- grep "^DisableSandbox" //etc/pacman.conf 2>&1 | tr -d '\0'
|
||||
echo "=== Paquets ===" && wsl.exe -d Arch -u root -- pacman -Q archiso base-devel git reflector dos2unix 2>&1 | tr -d '\0'
|
||||
echo "=== wsl.conf ===" && wsl.exe -d Arch -u root -- cat //etc/wsl.conf 2>&1 | tr -d '\0'
|
||||
echo "=== Disque WSL ===" && wsl.exe -d Arch -u root -- df -h / //tmp 2>&1 | tr -d '\0'
|
||||
```
|
||||
|
||||
Compare la sortie avec les valeurs de référence des sections 2 à 10 ci-dessus.
|
||||
|
||||
---
|
||||
|
||||
## 16. Configuration de référence en une page (résumé)
|
||||
|
||||
```
|
||||
Host : Windows 11 Pro build 26200, x86_64, VT/AMD-V activé
|
||||
CPU : x86_64 (Ryzen 9 9950X3D testé)
|
||||
RAM : 64 GB (8 GB min)
|
||||
Disque libre: ≥ 130 GB sur C:
|
||||
Git : 2.53.0.windows.2
|
||||
Bash : 5.2.37(1)-release msys
|
||||
WSL : version 2, distro "Arch", version 2
|
||||
Kernel WSL : 6.6.114.1-microsoft-standard-WSL2
|
||||
.wslconfig : absent
|
||||
wsl.conf : [boot]\nsystemd=true
|
||||
pacman : v7.1.0 / libalpm v16.0.1
|
||||
pacman.conf : DisableSandbox actif
|
||||
Keyring : initialisé + populé + archlinux-keyring à jour
|
||||
Paquets : archiso 88-1, base-devel 1-2, git 2.54.0-1,
|
||||
reflector 2023-5, dos2unix 7.5.5-1
|
||||
Repo path : C:\Users\<user>\Documents\1. FWS\FWS\
|
||||
(pas d'accents, espaces OK)
|
||||
Defender : exclusion sur le dossier du repo
|
||||
Réseau : accès archlinux.org (HTTP/2 200), pas de proxy bloquant
|
||||
```
|
||||
|
||||
Si **tout** ce qui précède est aligné, `./setup-aur.sh && ./build.sh` doit produire `out/FWS-*.iso` en 25-55 min au total.
|
||||
|
||||
---
|
||||
|
||||
## 17. Build depuis Fedora / Linux non-Arch (bascule conteneur podman)
|
||||
|
||||
Les trois scripts (`setup-aur.sh`, `build.sh`, `build-offi.sh`) détectent un hôte
|
||||
**non-Arch** et se relancent automatiquement à l'identique dans un conteneur Arch
|
||||
podman. Aucune Arch native ni WSL n'est nécessaire — il suffit d'installer podman.
|
||||
|
||||
```bash
|
||||
sudo dnf install -y podman # Fedora
|
||||
sudo apt install -y podman # Debian / Ubuntu
|
||||
./setup-aur.sh && ./build.sh # exactement comme sur Arch
|
||||
```
|
||||
|
||||
### Design (points à NE PAS « simplifier »)
|
||||
|
||||
| Choix | Pourquoi |
|
||||
|---|---|
|
||||
| **Détection hôte Arch** = `command -v pacman` **ET** `grep -qiE '^ID(_LIKE)?=.*arch' /etc/os-release` | Fedora empaquette aussi `pacman` → sa seule présence ne suffit pas à conclure « hôte Arch ». |
|
||||
| **podman rootful** (`sudo podman`) | mkarchiso exige des mounts/chroot/loop privilégiés ; podman rootless ne les gère pas. |
|
||||
| **`--privileged`** | Donne les capabilities mkarchiso **et** relâche SELinux (enforcing sur Fedora) sur le bind-mount, sans avoir besoin de `:Z` (qui relabellerait le dépôt). |
|
||||
| **`pull` explicite** avant `run` | `run` ne re-résout jamais le tag `latest` une fois l'image en cache → sinon on build sur une image qui vieillit. |
|
||||
| **`pacman -Syu archiso`** (pas `-Sy`) quand `FWS_IN_CONTAINER=1` | Évite le partial upgrade : sur une image de base vieillissante, `-Sy archiso` tire des deps plus récentes que la base installée. |
|
||||
| **`FWS_IN_CONTAINER=1`** | Garde anti-récursion **et** active `DisableSandbox` (landlock) comme le chemin WSL. |
|
||||
| **Dépôt monté au MÊME chemin absolu** + volume `fws-pacman-cache` | `WORK_DIR`, `out/` et `local-repo/` restent identiques côté hôte ; le cache pacman persiste entre les runs. Les artefacts (root, podman rootful) sont re-`chown` vers le propriétaire du dépôt en fin de run. |
|
||||
|
||||
> Validé par revue adversariale sur Fedora 43 (podman 5.8.2, SELinux enforcing).
|
||||
> Image : `docker.io/library/archlinux:latest`.
|
||||
@@ -0,0 +1,45 @@
|
||||
# Maintainer: FWS
|
||||
# Widgets GTK3 de l'installateur Anaconda (rhinstaller). Lib C + introspection
|
||||
# GObject (AnacondaWidgets-1.0.typelib) + overrides gi. Le sous-dossier widgets/
|
||||
# du source anaconda est un projet autotools AUTONOME (son propre configure.ac,
|
||||
# AC_INIT([AnacondaWidgets],[3.4])) → on le construit seul depuis le tarball
|
||||
# anaconda-45.8. Paquet versionné sur la release anaconda (comme le sous-paquet
|
||||
# Fedora anaconda-widgets).
|
||||
pkgname=anaconda-widgets
|
||||
pkgver=45.8
|
||||
pkgrel=1
|
||||
pkgdesc="GTK3 UI widgets for the Anaconda installer (introspection inclus)"
|
||||
arch=('x86_64')
|
||||
url="https://github.com/rhinstaller/anaconda"
|
||||
license=('GPL-2.0-or-later')
|
||||
depends=('gtk3' 'glib2' 'pango' 'gdk-pixbuf2' 'python-gobject')
|
||||
# NB : pas de 'glade' — on désactive le module Glade (catalogue pour le designer,
|
||||
# inutile au runtime). Sur Arch le paquet s'appelle 'glade' (pas 'gladeui').
|
||||
# glib2-devel : fournit gdbus-codegen / glib-mkenums / glib-genmarshal (outils
|
||||
# de codegen GLib, scindés de glib2 sur Arch). Indispensable au build des widgets.
|
||||
makedepends=('autoconf' 'automake' 'libtool' 'gettext' 'intltool'
|
||||
'gobject-introspection' 'gtk-doc' 'glib2-devel' 'python')
|
||||
source=("anaconda-$pkgver.tar.gz::https://github.com/rhinstaller/anaconda/archive/refs/tags/anaconda-$pkgver.tar.gz")
|
||||
sha256sums=('5ef1464bff7f28a4a09a821cbb0121f09ef504ec169288d742373f86807ec4ed')
|
||||
_srcdir="anaconda-anaconda-$pkgver"
|
||||
|
||||
build() {
|
||||
cd "$srcdir/$_srcdir/widgets"
|
||||
# Glade désactivé : le flag doit être posé À LA FOIS pour autoreconf (variable
|
||||
# d'env lue par m4 dans configure.ac) ET pour configure (--disable-glade).
|
||||
export ANACONDA_DISABLE_GLADE=yes
|
||||
# autogen.sh : autoreconf -vfi + copie /usr/share/gettext/gettext.h dans src/.
|
||||
./autogen.sh
|
||||
./configure --prefix=/usr --libdir=/usr/lib \
|
||||
--disable-static --disable-gtk-doc --disable-glade --enable-introspection
|
||||
make
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "$srcdir/$_srcdir/widgets"
|
||||
make DESTDIR="$pkgdir" install
|
||||
find "$pkgdir" -name '*.la' -delete
|
||||
# NB : on inclut aussi les fichiers -devel (.so/.h/.pc + catalogue glade) ;
|
||||
# inoffensif sur l'ISO et évite de manquer un fichier runtime. Le paquet
|
||||
# « anaconda » retirera ces mêmes fichiers de son propre pkgdir.
|
||||
}
|
||||
@@ -0,0 +1,212 @@
|
||||
# Maintainer: FWS
|
||||
# ============================================================================
|
||||
# anaconda — l'installateur Fedora (rhinstaller) PORTÉ sur Arch pour FWS.
|
||||
# Build autotools : ./autogen.sh && ./configure && make && make install
|
||||
# (le source compile aussi widgets/ via AC_CONFIG_SUBDIRS → on retire ces
|
||||
# fichiers en package(), ils sont fournis par le paquet anaconda-widgets).
|
||||
#
|
||||
# ⚠️ SCAFFOLD À ITÉRER : ce PKGBUILD est un point de départ fidèle au spec
|
||||
# amont, mais Anaconda est profondément couplé à Fedora. Il faudra très
|
||||
# probablement itérer sur Arch RÉEL (via ./setup-aur.sh) pour :
|
||||
# - des BuildRequires manquants au configure,
|
||||
# - des chemins/macros Fedora (systemd-rpm-macros, find_lang…),
|
||||
# - la compat Python 3.14 d'Arch (Anaconda vise le Python de Fedora).
|
||||
#
|
||||
# DÉVIATIONS FWS vs Requires du spec (justifiées) :
|
||||
# - RETIRÉS car payload liveimg (jamais le payload DNF) : python3-libdnf5,
|
||||
# python3-rpm. → cf. verdict « drop DNF » (libdnf5 importé seulement dans
|
||||
# dnf_manager.py, chemin non pris avec liveimg).
|
||||
# - RETIRÉ libselinux : Arch n'est pas SELinux (blivet/anaconda gèrent son
|
||||
# absence). - RETIRÉS Fedora-only / N/A archiso : subscription-manager,
|
||||
# s390utils-*, crypto-policies(-scripts), glibc-langpack-*, dracut-network,
|
||||
# teamd/NetworkManager-team, flatpak(-libs). - grub2-common → grub (Arch).
|
||||
# - RISQUE connu : python3-crypt-r (module `crypt` retiré de Python ≥ 3.13)
|
||||
# n'a peut-être pas d'équivalent Arch → à packager si l'import casse.
|
||||
# ============================================================================
|
||||
pkgname=anaconda
|
||||
pkgver=45.8
|
||||
pkgrel=4
|
||||
pkgdesc="The Anaconda installer (porté sur Arch pour FWS, payload liveimg)"
|
||||
arch=('x86_64')
|
||||
url="https://github.com/rhinstaller/anaconda"
|
||||
license=('GPL-2.0-or-later')
|
||||
depends=(
|
||||
# — interface & widgets —
|
||||
'anaconda-widgets' 'gtk3' 'python-gobject' 'gsettings-desktop-schemas'
|
||||
'adwaita-icon-theme' 'librsvg' 'nm-connection-editor'
|
||||
# — cœur Python Anaconda —
|
||||
'python' 'python-meh' 'python-simpleline' 'pykickstart' 'python-dasbus'
|
||||
'python-productmd' 'python-pid' 'python-langtable' 'python-iso639'
|
||||
'python-requests' 'python-requests-file' 'python-requests-ftp'
|
||||
# — stockage —
|
||||
'python-blivet' 'libblockdev' 'python-pyparted' 'parted' 'util-linux'
|
||||
'lvm2' 'cryptsetup' 'mdadm' 'dosfstools' 'e2fsprogs' 'xfsprogs' 'btrfs-progs'
|
||||
# — rapport de crash (python-meh importe `report` en dur) —
|
||||
'libreport'
|
||||
# — système / réseau / boot —
|
||||
'networkmanager' 'kbd' 'chrony' 'systemd' 'dbus' 'openssh' 'grub'
|
||||
'libpwquality' 'python-systemd' 'python-xkbregistry' 'cracklib'
|
||||
)
|
||||
# NB : pas de 'glade' — module Glade désactivé au build (cf. build()).
|
||||
makedepends=(
|
||||
'autoconf' 'automake' 'libtool' 'gettext' 'intltool' 'gtk-doc'
|
||||
'gobject-introspection' 'python' 'gdk-pixbuf2' 'libxml2'
|
||||
'desktop-file-utils' 'glib2-devel' 'libarchive' 'rpm-tools'
|
||||
)
|
||||
source=("anaconda-$pkgver.tar.gz::https://github.com/rhinstaller/anaconda/archive/refs/tags/anaconda-$pkgver.tar.gz")
|
||||
sha256sums=('5ef1464bff7f28a4a09a821cbb0121f09ef504ec169288d742373f86807ec4ed')
|
||||
_srcdir="anaconda-anaconda-$pkgver"
|
||||
|
||||
prepare() {
|
||||
cd "$srcdir/$_srcdir"
|
||||
# ── FWS : clavier par défaut selon le TERRITOIRE de la locale ──────────────
|
||||
# set_layouts() amont fait « locale = get_language_id(self.language) » →
|
||||
# get_language_id JETTE le territoire (fr_CH.UTF-8 → 'fr') → list_keyboards('fr')
|
||||
# = 'fr(oss)' (France) au lieu de 'ch(fr)' (Suisse). On passe la LOCALE COMPLÈTE
|
||||
# (self.language) : langtable.list_keyboards('fr_CH.UTF-8') = 'ch(fr)'. La
|
||||
# validation l'accepte (is_valid_langcode → parse_locale().language non vide).
|
||||
# → le clavier du GUI ET du système installé suivent enfin la locale choisie.
|
||||
sed -i \
|
||||
's/^\(\s*\)locale = get_language_id(self\.language)/\1locale = self.language # FWS: garder le territoire (fr_CH -> ch(fr))/' \
|
||||
pyanaconda/modules/localization/localization.py
|
||||
# Garde-fou : casse le build si le motif amont a changé (le patch silencieux).
|
||||
grep -q 'locale = self.language # FWS' \
|
||||
pyanaconda/modules/localization/localization.py
|
||||
|
||||
# ── FWS : champ « Nom de machine » dans le spoke Utilisateur ───────────────
|
||||
# Anaconda ne propage PAS le hostname (le champ du spoke Réseau est perdu chez
|
||||
# nous → /etc/hostname vide). On ajoute donc un champ Hostname à l'onglet de
|
||||
# création de compte (ligne 2 de la grille, libre) ; user.py écrit la valeur
|
||||
# dans /tmp/fws-hostname, que le %post du kickstart applique à /etc/hostname.
|
||||
python3 - <<'PYEOF'
|
||||
import glob
|
||||
|
||||
# 1) user.glade : insérer label + entry "Host name" APRÈS le bloc username_entry.
|
||||
glades = [p for p in glob.glob("pyanaconda/**/user.glade", recursive=True)
|
||||
if 'username_entry' in open(p, encoding='utf-8').read()]
|
||||
assert glades, "FWS: user.glade introuvable"
|
||||
g = glades[0]
|
||||
s = open(g, encoding='utf-8').read()
|
||||
assert 'id="hostname_entry"' not in s, "FWS: glade déjà patché"
|
||||
i = s.index('id="username_entry"')
|
||||
k = s.index('</packing>', i) # fin du packing de username_entry
|
||||
j = s.index('</child>', k) + len('</child>') # fin du <child> EXTERNE (pas l'accessible)
|
||||
block = '''
|
||||
<child>
|
||||
<object class="GtkLabel" id="hostname_label">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">False</property>
|
||||
<property name="xpad">10</property>
|
||||
<property name="label" translatable="yes" context="GUI|User">_Host name</property>
|
||||
<property name="use-underline">True</property>
|
||||
<property name="mnemonic-widget">hostname_entry</property>
|
||||
<property name="xalign">1</property>
|
||||
<attributes>
|
||||
<attribute name="weight" value="bold"/>
|
||||
</attributes>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">0</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkEntry" id="hostname_entry">
|
||||
<property name="visible">True</property>
|
||||
<property name="can-focus">True</property>
|
||||
<property name="width-chars">50</property>
|
||||
<child internal-child="accessible">
|
||||
<object class="AtkObject" id="hostname_entry-atkobject">
|
||||
<property name="AtkObject::accessible-name" translatable="yes">Host Name</property>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left-attach">1</property>
|
||||
<property name="top-attach">2</property>
|
||||
</packing>
|
||||
</child>'''
|
||||
open(g, 'w', encoding='utf-8').write(s[:j] + block + s[j:])
|
||||
|
||||
# 2) user.py (GUI) : récupérer le widget + écrire /tmp/fws-hostname dans apply().
|
||||
pys = glob.glob("pyanaconda/ui/gui/spokes/user.py")
|
||||
assert pys, "FWS: user.py introuvable"
|
||||
p = pys[0]
|
||||
s = open(p, encoding='utf-8').read()
|
||||
anchor = 'self._username_entry = self.builder.get_object("username_entry")'
|
||||
assert anchor in s, "FWS: ancre username_entry absente"
|
||||
s = s.replace(anchor,
|
||||
anchor + '\n self._hostname_entry = self.builder.get_object("hostname_entry")',
|
||||
1)
|
||||
ap = 'set_user_list(self._users_module, self._user_list, remove_unset=True)'
|
||||
assert ap in s, "FWS: ancre apply() absente"
|
||||
s = s.replace(ap, ap + '''
|
||||
|
||||
# FWS : mémorise le nom de machine saisi (cible pas encore montée) pour
|
||||
# le %post du kickstart, qui l'écrira dans /etc/hostname.
|
||||
try:
|
||||
_hn = self._hostname_entry.get_text().strip()
|
||||
except Exception:
|
||||
_hn = ""
|
||||
try:
|
||||
with open("/tmp/fws-hostname", "w") as _f:
|
||||
_f.write(_hn)
|
||||
except OSError:
|
||||
pass''', 1)
|
||||
open(p, 'w', encoding='utf-8').write(s)
|
||||
print("FWS: champ Hostname ajouté au spoke Utilisateur (glade + user.py)")
|
||||
PYEOF
|
||||
}
|
||||
|
||||
build() {
|
||||
cd "$srcdir/$_srcdir"
|
||||
# Glade désactivé (catalogue designer, inutile au runtime) → pas de dép glade.
|
||||
# La variable d'env doit être posée AVANT autogen.sh (lue par m4 à l'autoreconf)
|
||||
# EN PLUS du flag --disable-glade au configure.
|
||||
export ANACONDA_DISABLE_GLADE=yes
|
||||
# autogen.sh : autoreconf -vfi racine + (cd widgets && ./autogen.sh).
|
||||
./autogen.sh
|
||||
# ANACONDA_RELEASE=1 : release réelle, pas la date de création du tarball.
|
||||
./configure \
|
||||
--prefix=/usr --libdir=/usr/lib --sysconfdir=/etc \
|
||||
--disable-glade --disable-gtk-doc ANACONDA_RELEASE=1
|
||||
make
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "$srcdir/$_srcdir"
|
||||
make DESTDIR="$pkgdir" install
|
||||
find "$pkgdir" -name '*.la' -delete
|
||||
|
||||
# Répertoires attendus par Anaconda (créés vides par le spec).
|
||||
install -d "$pkgdir/usr/share/anaconda/addons" \
|
||||
"$pkgdir/usr/share/anaconda/post-scripts"
|
||||
|
||||
# Fichiers widgets : fournis par le paquet anaconda-widgets → on les retire
|
||||
# ici (le build principal recompile widgets/ via AC_CONFIG_SUBDIRS) pour
|
||||
# éviter le conflit de fichiers à l'install. On enlève TOUT l'empreinte
|
||||
# widgets : lib, typelib, pkgconfig, headers, .gir, doc, override gi.
|
||||
rm -f "$pkgdir"/usr/lib/libAnacondaWidgets.so*
|
||||
rm -f "$pkgdir"/usr/lib/girepository-*/AnacondaWidgets*.typelib
|
||||
rm -f "$pkgdir"/usr/lib/pkgconfig/AnacondaWidgets.pc
|
||||
rm -rf "$pkgdir"/usr/include/AnacondaWidgets
|
||||
rm -f "$pkgdir"/usr/share/gir-1.0/AnacondaWidgets*.gir
|
||||
rm -rf "$pkgdir"/usr/share/gtk-doc/html/AnacondaWidgets
|
||||
rm -f "$pkgdir"/usr/lib/python*/site-packages/gi/overrides/AnacondaWidgets*
|
||||
|
||||
# interactive-defaults.ks : FWS le fournit via l'overlay airootfs
|
||||
# (configs/*/airootfs/usr/share/anaconda/) avec le payload liveimg. mkarchiso
|
||||
# copie l'overlay AVANT pacstrap → si le paquet livrait aussi ce fichier, pacman
|
||||
# planterait (« exists in filesystem »). On retire donc la version amont : le
|
||||
# fichier de l'overlay reste la seule à ce chemin, et anaconda le lit au runtime.
|
||||
rm -f "$pkgdir"/usr/share/anaconda/interactive-defaults.ks
|
||||
|
||||
# usr-merge Arch : /usr/sbin est un LIEN → /usr/bin. Anaconda installe dans
|
||||
# /usr/sbin (vrai dossier sur Fedora) → conflit avec le paquet 'filesystem'.
|
||||
# On rapatrie le contenu dans /usr/bin et on supprime le dossier sbin.
|
||||
if [ -d "$pkgdir/usr/sbin" ] && [ ! -L "$pkgdir/usr/sbin" ]; then
|
||||
install -d "$pkgdir/usr/bin"
|
||||
cp -aT "$pkgdir/usr/sbin" "$pkgdir/usr/bin"
|
||||
rm -rf "$pkgdir/usr/sbin"
|
||||
fi
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
# Maintainer: FWS
|
||||
# Dépendance de l'installateur Anaconda (rhinstaller) — parseur du langage
|
||||
# Kickstart (Anaconda l'exige >= 3.73 ; absent des dépôts Arch et de l'AUR).
|
||||
# Pur Python (setuptools, install_requires=['requests']) : on installe
|
||||
# l'arborescence du module à la main pour éviter d'exiger python-build/installer.
|
||||
pkgname=pykickstart
|
||||
pkgver=3.74
|
||||
pkgrel=1
|
||||
pkgdesc="Library for manipulating kickstart files (dépendance Anaconda)"
|
||||
arch=('any')
|
||||
url="https://github.com/pykickstart/pykickstart"
|
||||
license=('GPL-2.0-or-later')
|
||||
depends=('python' 'python-requests')
|
||||
_tag="r$pkgver"
|
||||
source=("$pkgname-$pkgver.tar.gz::https://github.com/pykickstart/pykickstart/archive/refs/tags/$_tag.tar.gz")
|
||||
sha256sums=('05b19c5af3453f90464428c418b0c79bbe0a87718d1db1812f9006ba151e5c63')
|
||||
_srcdir="pykickstart-$_tag"
|
||||
|
||||
package() {
|
||||
cd "$srcdir/$_srcdir"
|
||||
local sitedir
|
||||
sitedir=$(python -c 'import site; print(site.getsitepackages()[0])')
|
||||
install -d "$pkgdir$sitedir"
|
||||
cp -a pykickstart "$pkgdir$sitedir/pykickstart"
|
||||
# -d : grave le chemin d'exécution réel dans les .pyc (pas le $pkgdir de build).
|
||||
python -m compileall -q -d "$sitedir/pykickstart" "$pkgdir$sitedir/pykickstart" || true
|
||||
install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING"
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
# Maintainer: FWS
|
||||
# Dépendance de l'installateur Anaconda (rhinstaller) — couche d'abstraction
|
||||
# de gestion du stockage (partitions, LVM, LUKS, RAID).
|
||||
#
|
||||
# VENDORISÉ depuis l'AUR (python-blivet) avec DEUX modifications FWS :
|
||||
#
|
||||
# 1. Retrait de 'libselinux' des depends. Arch n'est pas SELinux et blivet
|
||||
# importe selinux en try/except (blivet/util.py + flags.py →
|
||||
# HAVE_SELINUX/self.selinux = False si absent), donc il fonctionne sans.
|
||||
# Ça évite de tirer toute la pile SELinux (libselinux/libsepol) de l'AUR
|
||||
# juste pour une fonctionnalité inutile sur FWS.
|
||||
#
|
||||
# 2. depends COMPLÉTÉS. L'AUR ne déclare QUE 'libblockdev' → sur une vraie ISO
|
||||
# blivet crashe à l'import. Il lui faut en plus :
|
||||
# - python-libblockdev : l'OVERRIDE GObject-introspection
|
||||
# (gi/overrides/BlockDev.py) qui définit les helpers (plugin_specs_from_names)
|
||||
# ET les alias d'enum (DMTech.MAP, LoopTech, MDTech…) qu'utilise blivet.
|
||||
# SANS lui : « AttributeError: 'gi.repository.BlockDev' object has no
|
||||
# attribute 'plugin_specs_from_names' » puis « DMTech has no attribute MAP ».
|
||||
# C'est LA pièce maîtresse (les symboles n'existent QUE dans cet override,
|
||||
# pas dans le typelib ni l'amont libblockdev).
|
||||
# - les 11 sous-paquets plugins libblockdev-* (sur Arch ils sont SÉPARÉS du
|
||||
# cœur 'libblockdev') : sinon « failed to load module lvm: libbd_lvm.so.3 ».
|
||||
# - libbytesize : fournit le module Python 'bytesize' (blivet/size.py).
|
||||
# - python-dasbus : importé en dur (blivet/util.py).
|
||||
#
|
||||
# Tout le reste (code source) est identique à l'amont.
|
||||
_py='python'
|
||||
_pkg="blivet"
|
||||
pkgname="python-${_pkg}"
|
||||
pkgver=3.13.2
|
||||
_tag="${_pkg}-${pkgver}"
|
||||
pkgrel=4
|
||||
pkgdesc="A DBus service and python module for management of the system storage configuration (dépendance Anaconda)"
|
||||
arch=('any')
|
||||
license=('LGPL-2.1-only')
|
||||
depends=(
|
||||
'libblockdev'
|
||||
# Override GI (gi/overrides/BlockDev.py) : helpers + alias d'enum exigés par
|
||||
# blivet. ABSENT du paquet 'libblockdev' → paquet séparé. Pièce maîtresse.
|
||||
"${_py}-libblockdev"
|
||||
# Plugins libblockdev : sous-paquets SÉPARÉS sur Arch (le cœur 'libblockdev'
|
||||
# ne fournit PAS les libbd_*.so.3). blivet les charge à l'import via
|
||||
# try_reinit() ; sans eux : « failed to load module lvm: libbd_lvm.so.3 ».
|
||||
'libblockdev-lvm' 'libblockdev-btrfs' 'libblockdev-swap' 'libblockdev-loop'
|
||||
'libblockdev-crypto' 'libblockdev-mpath' 'libblockdev-dm' 'libblockdev-mdraid'
|
||||
'libblockdev-part' 'libblockdev-fs' 'libblockdev-nvme'
|
||||
# libbytesize fournit le module Python 'bytesize' (blivet/size.py:
|
||||
# « from bytesize import bytesize ») — sinon ModuleNotFoundError.
|
||||
'libbytesize'
|
||||
'lsof'
|
||||
'multipath-tools'
|
||||
'parted'
|
||||
"${_py}"
|
||||
"${_py}-six"
|
||||
"${_py}-pyparted"
|
||||
"${_py}-pyudev"
|
||||
"${_py}-gobject"
|
||||
# blivet importe dasbus en dur (blivet/util.py: from dasbus.connection ...).
|
||||
"${_py}-dasbus"
|
||||
'systemd-libs'
|
||||
'util-linux'
|
||||
)
|
||||
makedepends=("${_py}-setuptools")
|
||||
url='https://github.com/storaged-project/blivet'
|
||||
source=("${pkgname}-${pkgver}.tar.gz::https://github.com/storaged-project/${_pkg}/archive/${_pkg}-${pkgver}.tar.gz")
|
||||
sha512sums=('6142ee7e25416c13d751bffab22ba287895e256611254fb87652f1005d6303df50cb116683552bbbad28b818a515e6a20f7073d313e024996a99b449c29132bf')
|
||||
|
||||
package() {
|
||||
cd "${srcdir}/${_pkg}-${_tag}"
|
||||
"${_py}" setup.py install --root="${pkgdir}" --optimize=1
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
# Maintainer: FWS
|
||||
# ============================================================================
|
||||
# python-crypt_r — réintroduit le module `crypt` (et son alias moderne
|
||||
# `crypt_r`) retiré de Python 3.13 (PEP 594). Arch est en Python 3.14.
|
||||
#
|
||||
# POURQUOI (dépendance Anaconda) : pyanaconda/core/users.py fait
|
||||
# import crypt_r (ligne 41) → sinon fallback :
|
||||
# import crypt as crypt_r (ligne 44)
|
||||
# Les DEUX échouent sur Python ≥ 3.13 → « ModuleNotFoundError: crypt_r »
|
||||
# puis « crypt » → Anaconda plante au chargement (hash des mots de passe
|
||||
# root/utilisateur à l'install). Ce paquet PyPI (maintenu par fedora-python,
|
||||
# les mêmes que legacy-cgi) fournit les modules `crypt_r` ET `crypt` via une
|
||||
# extension C qui enrobe crypt_r(3) de libxcrypt.
|
||||
#
|
||||
# Paquet absent d'Arch officiel ET de l'AUR → packagé maison pour FWS.
|
||||
# ============================================================================
|
||||
pkgname=python-crypt_r
|
||||
_pyname=crypt_r
|
||||
pkgver=3.13.1
|
||||
pkgrel=1
|
||||
pkgdesc="The crypt module removed from Python 3.13 (PEP 594), as crypt_r + crypt (dépendance Anaconda)"
|
||||
arch=('x86_64')
|
||||
url="https://github.com/fedora-python/crypt_r"
|
||||
license=('PSF-2.0')
|
||||
depends=('python' 'libxcrypt')
|
||||
makedepends=('python-setuptools' 'python-build' 'python-installer' 'python-wheel')
|
||||
source=("$pkgname-$pkgver.tar.gz::https://files.pythonhosted.org/packages/source/c/${_pyname}/${_pyname}-${pkgver}.tar.gz")
|
||||
sha256sums=('5bd46ad51f5b7fe5f0ecf49d8ba2cafd6fbd43aa3bb5efbcaa6b44df6340c1a6')
|
||||
|
||||
build() {
|
||||
cd "$srcdir/${_pyname}-${pkgver}"
|
||||
python -m build --wheel --no-isolation
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "$srcdir/${_pyname}-${pkgver}"
|
||||
python -m installer --destdir="$pkgdir" dist/*.whl
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
# Maintainer: FWS
|
||||
# ============================================================================
|
||||
# python-iso639 — bibliothèque ISO 639 (langues) pour Anaconda.
|
||||
#
|
||||
# ⚠️ IL Y A PLUSIEURS PROJETS PyPI HOMONYMES « iso639 » avec des API
|
||||
# INCOMPATIBLES. Anaconda (pyanaconda/localization.py) utilise les
|
||||
# FONCTIONS DE MODULE :
|
||||
# iso639.find(iso639_2=...) et iso639.to_name(...)
|
||||
# → c'est le projet PyPI « iso639 » (SANS tiret), version 0.1.4, MIT.
|
||||
#
|
||||
# Le paquet AUR « python-iso639 » fournit un AUTRE projet (API
|
||||
# Iso639/languages, PAS de find()) → « AttributeError: module 'iso639'
|
||||
# has no attribute 'find' » et le module DBus Localization d'Anaconda
|
||||
# sort en status 1. On le RETIRE donc de setup-aur.sh AUR_PACKAGES et on
|
||||
# le remplace par CE paquet local (même nom → satisfait la dép anaconda).
|
||||
# Idem « iso-639 » (avec tiret, noumar) : API languages.get(), pas find().
|
||||
# ============================================================================
|
||||
pkgname=python-iso639
|
||||
pkgver=0.1.4
|
||||
pkgrel=1
|
||||
pkgdesc="ISO 639 library with find()/to_name() module API (dépendance Anaconda Localization)"
|
||||
arch=('any')
|
||||
url="https://pypi.org/project/iso639/"
|
||||
license=('MIT')
|
||||
depends=('python')
|
||||
makedepends=('python-build' 'python-installer' 'python-wheel' 'python-setuptools')
|
||||
source=("$pkgname-$pkgver.tar.gz::https://files.pythonhosted.org/packages/source/i/iso639/iso639-$pkgver.tar.gz")
|
||||
sha256sums=('88b70cf6c64ee9c2c2972292818c8beb32db9ea6f4de1f8471a9b081a3d92e98')
|
||||
|
||||
build() {
|
||||
cd "$srcdir/iso639-$pkgver"
|
||||
python -m build --wheel --no-isolation
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "$srcdir/iso639-$pkgver"
|
||||
python -m installer --destdir="$pkgdir" dist/*.whl
|
||||
install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
# Maintainer: FWS
|
||||
# ============================================================================
|
||||
# python-langtable — tables de langues/locales/claviers (dépendance Anaconda).
|
||||
#
|
||||
# ⚠️ L'AUR python-langtable est figé à 0.0.51, TROP VIEUX pour Anaconda 45.8 :
|
||||
# le spoke d'accueil GUI fait localization.get_common_languages() →
|
||||
# langtable.list_common_languages(), fonction ajoutée seulement en
|
||||
# langtable 0.0.71 (« derived from gnome-control-center »). Avec 0.0.51 :
|
||||
# « AttributeError: module 'langtable' has no attribute
|
||||
# 'list_common_languages' » → le GUI plante au démarrage.
|
||||
#
|
||||
# On package donc 0.0.71 en LOCAL (même nom → satisfait la dép anaconda) et
|
||||
# on RETIRE python-langtable de setup-aur.sh AUR_PACKAGES.
|
||||
# ============================================================================
|
||||
pkgname=python-langtable
|
||||
_pyname=langtable
|
||||
pkgver=0.0.71
|
||||
pkgrel=1
|
||||
pkgdesc="Guessing reasonable defaults for locale/keyboard/territory/language (dépendance Anaconda)"
|
||||
arch=('any')
|
||||
url="https://github.com/mike-fabian/langtable"
|
||||
license=('GPL-3.0-or-later' 'MIT')
|
||||
depends=('python' 'python-setuptools' 'gzip')
|
||||
makedepends=('python-build' 'python-installer' 'python-wheel' 'python-setuptools')
|
||||
source=("$pkgname-$pkgver.tar.gz::https://files.pythonhosted.org/packages/source/l/langtable/langtable-$pkgver.tar.gz")
|
||||
sha256sums=('f9d39c06d5182ea14eb4576bf1da8875af1d44efb166e55d6865b3b59b8ac617')
|
||||
|
||||
build() {
|
||||
cd "$srcdir/langtable-$pkgver"
|
||||
python -m build --wheel --no-isolation
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "$srcdir/langtable-$pkgver"
|
||||
python -m installer --destdir="$pkgdir" dist/*.whl
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
# Maintainer: FWS
|
||||
# Dépendance de l'installateur Anaconda (rhinstaller) — gestion d'exceptions.
|
||||
# setup.py amont = distutils + `setup.py install` : tous deux supprimés
|
||||
# (Python 3.12+, setuptools 80+). Le paquet étant du pur Python, on installe
|
||||
# l'arborescence à la main plutôt que de patcher la chaîne distutils.
|
||||
pkgname=python-meh
|
||||
pkgver=0.43
|
||||
pkgrel=1
|
||||
pkgdesc="Python exception handling library (dépendance Anaconda)"
|
||||
arch=('any')
|
||||
url="https://github.com/rhinstaller/python-meh"
|
||||
license=('GPL-2.0-or-later')
|
||||
depends=('python' 'python-gobject' 'python-dbus' 'libreport')
|
||||
_tag="r$pkgver-1"
|
||||
source=("$pkgname-$pkgver.tar.gz::https://github.com/rhinstaller/python-meh/archive/refs/tags/$_tag.tar.gz")
|
||||
sha256sums=('cd50301794ab68a064715f1ace960f6de07aea809aa85f73087d44573c98be52')
|
||||
_srcdir="python-meh-$_tag"
|
||||
|
||||
package() {
|
||||
cd "$srcdir/$_srcdir"
|
||||
local sitedir
|
||||
sitedir=$(python -c 'import site; print(site.getsitepackages()[0])')
|
||||
install -d "$pkgdir$sitedir"
|
||||
cp -a meh "$pkgdir$sitedir/meh"
|
||||
# -d : grave le chemin d'exécution réel dans les .pyc (pas le $pkgdir de build).
|
||||
python -m compileall -q -d "$sitedir/meh" "$pkgdir$sitedir/meh" || true
|
||||
install -Dm644 ui/exception-dialog.glade -t "$pkgdir/usr/share/python-meh/"
|
||||
install -Dm644 COPYING "$pkgdir/usr/share/licenses/$pkgname/COPYING"
|
||||
}
|
||||
@@ -0,0 +1,898 @@
|
||||
format = 2
|
||||
pkgname = python-meh
|
||||
pkgbase = python-meh
|
||||
pkgver = 0.43-1
|
||||
pkgarch = any
|
||||
pkgbuild_sha256sum = 207bd70c0f151083b8194b40534aeed665c9af48e588230ad370757eb4368229
|
||||
packager = Unknown Packager
|
||||
builddate = 1781307281
|
||||
builddir = /home/nocode/Files/FWS-ISO/pkgbuilds/python-meh
|
||||
startdir = /home/nocode/Files/FWS-ISO/pkgbuilds/python-meh
|
||||
buildtool = makepkg
|
||||
buildtoolver = 7.1.0
|
||||
buildenv = !distcc
|
||||
buildenv = color
|
||||
buildenv = !ccache
|
||||
buildenv = check
|
||||
buildenv = !sign
|
||||
options = strip
|
||||
options = docs
|
||||
options = !libtool
|
||||
options = !staticlibs
|
||||
options = emptydirs
|
||||
options = zipman
|
||||
options = purge
|
||||
options = debug
|
||||
options = lto
|
||||
installed = aardvark-dns-1.17.1-1-x86_64
|
||||
installed = abseil-cpp-20260107.1-1-x86_64
|
||||
installed = accountsservice-26.13.3-1-x86_64
|
||||
installed = acl-2.3.2-2-x86_64
|
||||
installed = adwaita-cursors-50.0-1-any
|
||||
installed = adwaita-fonts-50.0-1-any
|
||||
installed = adwaita-icon-theme-50.0-1-any
|
||||
installed = adwaita-icon-theme-legacy-46.2-3-any
|
||||
installed = alsa-card-profiles-1:1.6.6-1-x86_64
|
||||
installed = alsa-lib-1.2.16-1-x86_64
|
||||
installed = alsa-plugins-1:1.2.12-5-x86_64
|
||||
installed = alsa-topology-conf-1.2.5.1-4-any
|
||||
installed = alsa-ucm-conf-1.2.16-2-any
|
||||
installed = aom-3.14.1-1-x86_64
|
||||
installed = appstream-1.1.2-1-x86_64
|
||||
installed = aquamarine-0.12.1-1-x86_64
|
||||
installed = arch-install-scripts-31-1-any
|
||||
installed = archiso-88-1-any
|
||||
installed = archlinux-keyring-20260420-1-any
|
||||
installed = argon2-20190702-6-x86_64
|
||||
installed = at-spi2-core-2.60.4-1-x86_64
|
||||
installed = atkmm-2.28.5-2-x86_64
|
||||
installed = attr-2.5.2-2-x86_64
|
||||
installed = audit-4.1.4-2-x86_64
|
||||
installed = autoconf-2.73-1-any
|
||||
installed = automake-1.18.1-1-any
|
||||
installed = avahi-1:0.9rc4-1-x86_64
|
||||
installed = base-3-3-any
|
||||
installed = base-devel-1-2-any
|
||||
installed = bash-5.3.15-1-x86_64
|
||||
installed = bemoji-0.4.0-1-any
|
||||
installed = binutils-2.46+r70+g155188ea10a7-1-x86_64
|
||||
installed = bison-3.8.2-8-x86_64
|
||||
installed = blas-3.12.1-2-x86_64
|
||||
installed = bluez-libs-5.86-6-x86_64
|
||||
installed = boost-libs-1.91.0-1-x86_64
|
||||
installed = brightnessctl-0.5.1-3-x86_64
|
||||
installed = brotli-1.2.0-1-x86_64
|
||||
installed = bubblewrap-0.11.2-1-x86_64
|
||||
installed = bzip2-1.0.8-6-x86_64
|
||||
installed = c-ares-1.34.6-1-x86_64
|
||||
installed = ca-certificates-20240618-1-any
|
||||
installed = ca-certificates-mozilla-3.124-1-x86_64
|
||||
installed = ca-certificates-utils-20240618-1-any
|
||||
installed = cabextract-1.11-2-x86_64
|
||||
installed = cairo-1.18.4-1-x86_64
|
||||
installed = cairomm-1.14.6-1-x86_64
|
||||
installed = cairomm-1.16-1.18.1-1-x86_64
|
||||
installed = catatonit-0.2.1-2-x86_64
|
||||
installed = cblas-3.12.1-2-x86_64
|
||||
installed = cliphist-1:0.7.0-2-x86_64
|
||||
installed = clucene-2.3.3.4-17-x86_64
|
||||
installed = cmake-4.3.3-1-x86_64
|
||||
installed = compiler-rt-22.1.6-1-x86_64
|
||||
installed = composefs-1.0.8-1-x86_64
|
||||
installed = conmon-1:2.2.1-1-x86_64
|
||||
installed = containers-common-1:0.67.1-3-any
|
||||
installed = coreutils-9.11-1-x86_64
|
||||
installed = cpio-2.15-3-x86_64
|
||||
installed = cppdap-1.58.0-3-x86_64
|
||||
installed = cracklib-2.10.3-1-x86_64
|
||||
installed = criu-4.2-3-x86_64
|
||||
installed = crun-1.28-1-x86_64
|
||||
installed = cryptsetup-2.8.6-1-x86_64
|
||||
installed = curl-8.20.0-7-x86_64
|
||||
installed = dav1d-1.5.3-1-x86_64
|
||||
installed = db5.3-5.3.28-7-x86_64
|
||||
installed = dbus-1.16.2-1-x86_64
|
||||
installed = dbus-broker-37-3-x86_64
|
||||
installed = dbus-broker-units-37-3-x86_64
|
||||
installed = dbus-units-37-3-x86_64
|
||||
installed = dconf-0.49.0-1-x86_64
|
||||
installed = debugedit-5.3-1-x86_64
|
||||
installed = default-cursors-3-1-any
|
||||
installed = desktop-file-utils-0.28-1-x86_64
|
||||
installed = device-mapper-2.03.41-1-x86_64
|
||||
installed = diffutils-3.12-2-x86_64
|
||||
installed = discord-1:1.0.142-1-x86_64
|
||||
installed = dkms-3.4.1-1-any
|
||||
installed = dos2unix-7.5.6-1-x86_64
|
||||
installed = dosfstools-4.2-5-x86_64
|
||||
installed = double-conversion-3.4.0-1-x86_64
|
||||
installed = duktape-2.7.0-7-x86_64
|
||||
installed = e2fsprogs-1.47.4-1-x86_64
|
||||
installed = efibootmgr-18-4-x86_64
|
||||
installed = efivar-39-2-x86_64
|
||||
installed = egl-gbm-1.1.3-1-x86_64
|
||||
installed = egl-wayland-4:1.1.21-1-x86_64
|
||||
installed = egl-wayland2-1.0.1-1-x86_64
|
||||
installed = egl-x11-1.0.5-1-x86_64
|
||||
installed = eglexternalplatform-1.2.1-1-any
|
||||
installed = electron41-41.7.2-1-x86_64
|
||||
installed = elfutils-0.195-1-x86_64
|
||||
installed = erofs-utils-1.9.1-1-x86_64
|
||||
installed = exo-4.20.0-2-x86_64
|
||||
installed = expat-2.8.1-1-x86_64
|
||||
installed = extra-cmake-modules-6.26.0-1-any
|
||||
installed = fakeroot-1:1.37.2-1-x86_64
|
||||
installed = fcft-3.3.3-1-x86_64
|
||||
installed = ffmpeg-2:8.1.1-2-x86_64
|
||||
installed = fftw-3.3.11-1-x86_64
|
||||
installed = file-5.48-1-x86_64
|
||||
installed = filesystem-2025.10.12-1-any
|
||||
installed = findutils-4.10.0-3-x86_64
|
||||
installed = firefox-151.0.4-1-x86_64
|
||||
installed = flac-1.5.0-1-x86_64
|
||||
installed = flatpak-1:1.18.0-1-x86_64
|
||||
installed = flex-2.6.4-6-x86_64
|
||||
installed = fmt-12.1.0-2-x86_64
|
||||
installed = fontconfig-2:2.18.1-1-x86_64
|
||||
installed = freerdp-2:3.26.0-1-x86_64
|
||||
installed = freetype2-2.14.3-1-x86_64
|
||||
installed = fribidi-1.0.16-2-x86_64
|
||||
installed = fuse-common-3.18.2-1-x86_64
|
||||
installed = fuse2-2.9.9-5-x86_64
|
||||
installed = fuse3-3.18.2-1-x86_64
|
||||
installed = fuzzel-1.14.1-1-x86_64
|
||||
installed = gawk-5.4.0-1-x86_64
|
||||
installed = gc-8.2.12-1-x86_64
|
||||
installed = gcc-16.1.1+r12+g301eb08fa2c5-1-x86_64
|
||||
installed = gcc-libs-16.1.1+r12+g301eb08fa2c5-1-x86_64
|
||||
installed = gcr-3.41.2-2-x86_64
|
||||
installed = gcr-4-4.4.0.1-1-x86_64
|
||||
installed = gdb-17.2-1-x86_64
|
||||
installed = gdb-common-17.2-1-x86_64
|
||||
installed = gdbm-1.26-2-x86_64
|
||||
installed = gdk-pixbuf2-2.44.6-2-x86_64
|
||||
installed = gettext-1.0-2-x86_64
|
||||
installed = giflib-6.1.3-1-x86_64
|
||||
installed = git-2.54.0-1-x86_64
|
||||
installed = glib-networking-1:2.80.1-1-x86_64
|
||||
installed = glib2-2.88.1-1-x86_64
|
||||
installed = glibc-2.43+r22+g8362e8ce10b2-2-x86_64
|
||||
installed = glibmm-2.66.8-2-x86_64
|
||||
installed = glibmm-2.68-2.88.0-2-x86_64
|
||||
installed = glslang-1:1.4.350.0-1-x86_64
|
||||
installed = glycin-2.1.1-1-x86_64
|
||||
installed = gmp-6.3.0-3-x86_64
|
||||
installed = gnome-themes-extra-1:3.28-1-any
|
||||
installed = gnulib-l10n-20241231-1-any
|
||||
installed = gnupg-2.4.9-1-x86_64
|
||||
installed = gnutls-3.8.13-2-x86_64
|
||||
installed = go-2:1.26.4-1-x86_64
|
||||
installed = gobject-introspection-1.86.0-2-x86_64
|
||||
installed = gobject-introspection-runtime-1.86.0-2-x86_64
|
||||
installed = gparted-1.8.1-2-x86_64
|
||||
installed = gperftools-2.18.1-1-x86_64
|
||||
installed = gpgme-2.1.0-1-x86_64
|
||||
installed = gpgmepp-2.1.0-1-x86_64
|
||||
installed = gpm-1.20.7.r38.ge82d1a6-6-x86_64
|
||||
installed = gpsd-3.27.5-1-x86_64
|
||||
installed = gptfdisk-1.0.10-2-x86_64
|
||||
installed = graphene-1.10.8-2-x86_64
|
||||
installed = graphite-1:1.3.15-1-x86_64
|
||||
installed = grep-3.12-2-x86_64
|
||||
installed = grim-1.5.0-2-x86_64
|
||||
installed = groff-1.24.1-1-x86_64
|
||||
installed = grub-2:2.14-1-x86_64
|
||||
installed = gsettings-desktop-schemas-50.1-1-any
|
||||
installed = gsettings-system-schemas-50.1-1-any
|
||||
installed = gsm-1.0.24-1-x86_64
|
||||
installed = gssdp-1.6.5-1-x86_64
|
||||
installed = gst-plugins-bad-libs-1.28.3-1-x86_64
|
||||
installed = gst-plugins-base-libs-1.28.3-1-x86_64
|
||||
installed = gstreamer-1.28.3-1-x86_64
|
||||
installed = gtest-1.17.0-2-x86_64
|
||||
installed = gtk-layer-shell-0.10.1-1-x86_64
|
||||
installed = gtk-update-icon-cache-1:4.22.4-1-x86_64
|
||||
installed = gtk3-1:3.24.52-1-x86_64
|
||||
installed = gtk4-1:4.22.4-1-x86_64
|
||||
installed = gtkmm-4.0-4.22.0-2-x86_64
|
||||
installed = gtkmm3-3.24.11-1-x86_64
|
||||
installed = guile-3.0.11-1-x86_64
|
||||
installed = gupnp-1:1.6.10-1-x86_64
|
||||
installed = gupnp-igd-1.6.0-2-x86_64
|
||||
installed = gzip-1.14-2-x86_64
|
||||
installed = harfbuzz-14.2.1-1-x86_64
|
||||
installed = harfbuzz-icu-14.2.1-1-x86_64
|
||||
installed = hicolor-icon-theme-0.18-1-any
|
||||
installed = hidapi-0.15.0-1-x86_64
|
||||
installed = highway-1.4.0-1-x86_64
|
||||
installed = hunspell-1.7.3-1-x86_64
|
||||
installed = hwdata-0.408-1-any
|
||||
installed = hwloc-2.13.0-1-x86_64
|
||||
installed = hyphen-2.8.9-1-x86_64
|
||||
installed = hyprcursor-0.1.13-6-x86_64
|
||||
installed = hyprgraphics-0.5.1-2-x86_64
|
||||
installed = hypridle-0.1.7-9-x86_64
|
||||
installed = hyprland-0.55.4-1-x86_64
|
||||
installed = hyprland-guiutils-0.2.1-6-x86_64
|
||||
installed = hyprland-qt-support-0.1.0-12-x86_64
|
||||
installed = hyprlang-0.6.8-4-x86_64
|
||||
installed = hyprlock-0.9.5-4-x86_64
|
||||
installed = hyprpaper-0.8.4-2-x86_64
|
||||
installed = hyprpicker-0.4.7-1-x86_64
|
||||
installed = hyprpolkitagent-0.1.3-7-x86_64
|
||||
installed = hyprshot-1.3.0-4-any
|
||||
installed = hyprtoolkit-0.5.4-2-x86_64
|
||||
installed = hyprutils-0.13.1-1-x86_64
|
||||
installed = hyprwayland-scanner-0.4.6-1-x86_64
|
||||
installed = hyprwire-0.3.1-2-x86_64
|
||||
installed = iana-etc-20260530-1-any
|
||||
installed = icu-78.3-1-x86_64
|
||||
installed = imagemagick-7.1.2.25-1-x86_64
|
||||
installed = iniparser-4.2.6-2-x86_64
|
||||
installed = iproute2-7.0.0-1-x86_64
|
||||
installed = iptables-1:1.8.13-1-x86_64
|
||||
installed = iputils-20250605-1-x86_64
|
||||
installed = iso-codes-4.20.1-1-any
|
||||
installed = jack2-1.9.22-2-x86_64
|
||||
installed = jansson-2.15.0-1-x86_64
|
||||
installed = jbigkit-2.1-8-x86_64
|
||||
installed = jq-1.8.1-3-x86_64
|
||||
installed = json-c-0.18-2-x86_64
|
||||
installed = json-glib-1.10.8-1-x86_64
|
||||
installed = jsoncpp-1.9.6-3-x86_64
|
||||
installed = kbd-2.10.0-1-x86_64
|
||||
installed = kcoreaddons-6.26.0-1-x86_64
|
||||
installed = keyutils-1.6.3-4-x86_64
|
||||
installed = ki18n-6.26.0-1-x86_64
|
||||
installed = kitty-0.47.1-1-x86_64
|
||||
installed = kitty-shell-integration-0.47.1-1-x86_64
|
||||
installed = kitty-terminfo-0.47.1-1-x86_64
|
||||
installed = kmod-34.2-1-x86_64
|
||||
installed = kpmcore-26.04.2-1-x86_64
|
||||
installed = krb5-1.22.2-1-x86_64
|
||||
installed = kwidgetsaddons-6.26.0-1-x86_64
|
||||
installed = l-smash-2.14.5-4-x86_64
|
||||
installed = lame-3.101.r6531-1-x86_64
|
||||
installed = lapack-3.12.1-2-x86_64
|
||||
installed = lcms2-2.19.1-1-x86_64
|
||||
installed = leancrypto-1.7.2-1-x86_64
|
||||
installed = lib32-alsa-lib-1.2.16-1-x86_64
|
||||
installed = lib32-alsa-plugins-1.2.12-1-x86_64
|
||||
installed = lib32-brotli-1.1.0-1-x86_64
|
||||
installed = lib32-bzip2-1.0.8-4-x86_64
|
||||
installed = lib32-curl-8.20.0-7-x86_64
|
||||
installed = lib32-dbus-1.16.2-1-x86_64
|
||||
installed = lib32-e2fsprogs-1.47.4-1-x86_64
|
||||
installed = lib32-expat-2.8.1-1-x86_64
|
||||
installed = lib32-fontconfig-2:2.18.1-1-x86_64
|
||||
installed = lib32-freetype2-2.14.3-1-x86_64
|
||||
installed = lib32-gcc-libs-16.1.1+r12+g301eb08fa2c5-1-x86_64
|
||||
installed = lib32-glib2-2.88.1-1-x86_64
|
||||
installed = lib32-glibc-2.43+r22+g8362e8ce10b2-2-x86_64
|
||||
installed = lib32-gmp-6.3.0-2-x86_64
|
||||
installed = lib32-gnutls-3.8.13-3-x86_64
|
||||
installed = lib32-icu-78.3-1-x86_64
|
||||
installed = lib32-json-c-0.18-2-x86_64
|
||||
installed = lib32-keyutils-1.6.3-4-x86_64
|
||||
installed = lib32-krb5-1.22.2-1-x86_64
|
||||
installed = lib32-libdrm-2.4.134-1-x86_64
|
||||
installed = lib32-libelf-0.195-1-x86_64
|
||||
installed = lib32-libffi-3.5.2-1-x86_64
|
||||
installed = lib32-libgcrypt-1.12.2-1-x86_64
|
||||
installed = lib32-libglvnd-1.7.0-1-x86_64
|
||||
installed = lib32-libgpg-error-1.61-1-x86_64
|
||||
installed = lib32-libidn2-2.3.8-1-x86_64
|
||||
installed = lib32-libldap-2.6.13-1-x86_64
|
||||
installed = lib32-libnghttp2-1.69.0-1-x86_64
|
||||
installed = lib32-libnghttp3-1.16.0-1-x86_64
|
||||
installed = lib32-libngtcp2-1.23.0-1-x86_64
|
||||
installed = lib32-libnm-1.56.1-1-x86_64
|
||||
installed = lib32-libpciaccess-0.19-1-x86_64
|
||||
installed = lib32-libpipewire-1:1.6.6-1-x86_64
|
||||
installed = lib32-libpng-1.6.58-1-x86_64
|
||||
installed = lib32-libpsl-0.21.5-1-x86_64
|
||||
installed = lib32-libssh2-1.11.1-1-x86_64
|
||||
installed = lib32-libtasn1-4.21.0-1-x86_64
|
||||
installed = lib32-libunistring-1.4.2-1-x86_64
|
||||
installed = lib32-libva-2.22.0-1-x86_64
|
||||
installed = lib32-libx11-1.8.13-1-x86_64
|
||||
installed = lib32-libxau-1.0.12-1-x86_64
|
||||
installed = lib32-libxcb-1.17.0-1-x86_64
|
||||
installed = lib32-libxcrypt-4.5.2-1-x86_64
|
||||
installed = lib32-libxcrypt-compat-4.5.2-1-x86_64
|
||||
installed = lib32-libxdmcp-1.1.5-1-x86_64
|
||||
installed = lib32-libxext-1.3.7-1-x86_64
|
||||
installed = lib32-libxfixes-6.0.1-2-x86_64
|
||||
installed = lib32-libxinerama-1.1.6-1-x86_64
|
||||
installed = lib32-libxml2-2.15.3-1-x86_64
|
||||
installed = lib32-libxshmfence-1.3.3-1-x86_64
|
||||
installed = lib32-libxss-1.2.5-1-x86_64
|
||||
installed = lib32-libxxf86vm-1.1.5-2-x86_64
|
||||
installed = lib32-llvm-libs-1:22.1.6-1-x86_64
|
||||
installed = lib32-lm_sensors-1:3.6.2-2-x86_64
|
||||
installed = lib32-mesa-1:26.1.2-1-x86_64
|
||||
installed = lib32-ncurses-6.6-2-x86_64
|
||||
installed = lib32-nettle-4.0-2-x86_64
|
||||
installed = lib32-nspr-4.39-1-x86_64
|
||||
installed = lib32-nss-3.124-1-x86_64
|
||||
installed = lib32-nvidia-utils-610.43.02-1-x86_64
|
||||
installed = lib32-openssl-1:3.6.3-1-x86_64
|
||||
installed = lib32-p11-kit-0.26.2-1-x86_64
|
||||
installed = lib32-pcre2-10.47-1-x86_64
|
||||
installed = lib32-pipewire-1:1.6.6-1-x86_64
|
||||
installed = lib32-spirv-tools-1:1.4.350.0-1-x86_64
|
||||
installed = lib32-sqlite-3.53.2-1-x86_64
|
||||
installed = lib32-systemd-260.2-1-x86_64
|
||||
installed = lib32-util-linux-2.42.1-1-x86_64
|
||||
installed = lib32-vulkan-icd-loader-1.4.350.0-1-x86_64
|
||||
installed = lib32-wayland-1.25.0-1-x86_64
|
||||
installed = lib32-xz-5.8.3-1-x86_64
|
||||
installed = lib32-zlib-1.3.2-1-x86_64
|
||||
installed = lib32-zstd-1.5.7-2-x86_64
|
||||
installed = libabw-0.1.4-1-x86_64
|
||||
installed = libadwaita-1:1.9.1-1-x86_64
|
||||
installed = libaio-0.3.113-4-x86_64
|
||||
installed = libappindicator-12.10.1-1-x86_64
|
||||
installed = libarchive-3.8.7-1-x86_64
|
||||
installed = libasan-16.1.1+r12+g301eb08fa2c5-1-x86_64
|
||||
installed = libass-0.17.4-2-x86_64
|
||||
installed = libassuan-3.0.0-1-x86_64
|
||||
installed = libasyncns-1:0.8+r3+g68cd5af-3-x86_64
|
||||
installed = libatomic-16.1.1+r12+g301eb08fa2c5-1-x86_64
|
||||
installed = libatomic_ops-7.8.2-2-x86_64
|
||||
installed = libavc1394-0.5.4-7-x86_64
|
||||
installed = libavif-1.4.2-1-x86_64
|
||||
installed = libb2-0.98.1-3-x86_64
|
||||
installed = libblake3-1.8.4-1-x86_64
|
||||
installed = libbluray-1.4.1-1-x86_64
|
||||
installed = libbpf-1.7.0-1-x86_64
|
||||
installed = libbs2b-3.1.0-10-x86_64
|
||||
installed = libbsd-0.12.2-2-x86_64
|
||||
installed = libburn-1.5.8-1-x86_64
|
||||
installed = libcanberra-1:0.30+r2+gc0620e4-6-x86_64
|
||||
installed = libcap-2.78-1-x86_64
|
||||
installed = libcap-ng-0.9.3-1-x86_64
|
||||
installed = libcbor-0.14.0-1-x86_64
|
||||
installed = libcdio-2.3.0-1-x86_64
|
||||
installed = libcdio-paranoia-10.2+2.0.2-2-x86_64
|
||||
installed = libcdr-0.1.9-1-x86_64
|
||||
installed = libcloudproviders-0.4.0-1-x86_64
|
||||
installed = libcmis-0.6.3-1-x86_64
|
||||
installed = libcolord-1.4.8-1-x86_64
|
||||
installed = libcups-2:2.4.19-1-x86_64
|
||||
installed = libdaemon-0.14-6-x86_64
|
||||
installed = libdatrie-0.2.14-1-x86_64
|
||||
installed = libdbusmenu-glib-18.10.20180917-1-x86_64
|
||||
installed = libdbusmenu-gtk3-18.10.20180917-1-x86_64
|
||||
installed = libdecor-0.2.5-1-x86_64
|
||||
installed = libdeflate-1.25-1-x86_64
|
||||
installed = libdisplay-info-0.3.0-1-x86_64
|
||||
installed = libdovi-3.3.2-1-x86_64
|
||||
installed = libdrm-2.4.134-1-x86_64
|
||||
installed = libdvdnav-7.0.0-1-x86_64
|
||||
installed = libdvdread-7.0.1-1-x86_64
|
||||
installed = libe-book-0.1.3-20-x86_64
|
||||
installed = libebur128-1.2.6-2-x86_64
|
||||
installed = libedit-20260512_3.1-1-x86_64
|
||||
installed = libei-1.6.0-1-x86_64
|
||||
installed = libelf-0.195-1-x86_64
|
||||
installed = libepoxy-1.5.10-3-x86_64
|
||||
installed = libepubgen-0.1.1-6-x86_64
|
||||
installed = libetonyek-0.1.13-2-x86_64
|
||||
installed = libevdev-1.13.6-1-x86_64
|
||||
installed = libevent-2.1.12-5-x86_64
|
||||
installed = libexif-0.6.26-1-x86_64
|
||||
installed = libexttextcat-3.4.8-1-x86_64
|
||||
installed = libfdk-aac-2.0.3-2-x86_64
|
||||
installed = libffi-3.5.2-1-x86_64
|
||||
installed = libfido2-1.17.0-1-x86_64
|
||||
installed = libfontenc-1.1.9-1-x86_64
|
||||
installed = libfreeaptx-0.2.2-1-x86_64
|
||||
installed = libfreehand-0.1.3-1-x86_64
|
||||
installed = libfyaml-0.9.6-2-x86_64
|
||||
installed = libgcc-16.1.1+r12+g301eb08fa2c5-1-x86_64
|
||||
installed = libgcrypt-1.12.2-1-x86_64
|
||||
installed = libgfortran-16.1.1+r12+g301eb08fa2c5-1-x86_64
|
||||
installed = libgirepository-1.86.0-2-x86_64
|
||||
installed = libgit2-1:1.9.4-1-x86_64
|
||||
installed = libglvnd-1.7.0-3-x86_64
|
||||
installed = libgomp-16.1.1+r12+g301eb08fa2c5-1-x86_64
|
||||
installed = libgpg-error-1.61-1-x86_64
|
||||
installed = libgtop-2.41.3-2-x86_64
|
||||
installed = libgudev-238-3-x86_64
|
||||
installed = libice-1.1.2-1-x86_64
|
||||
installed = libidn2-2.3.8-1-x86_64
|
||||
installed = libiec61883-1.2.0-9-x86_64
|
||||
installed = libimobiledevice-1.4.0-2-x86_64
|
||||
installed = libimobiledevice-glue-1.3.2-1-x86_64
|
||||
installed = libinih-62-2-x86_64
|
||||
installed = libinput-1.31.3-1-x86_64
|
||||
installed = libisl-0.27-1-x86_64
|
||||
installed = libisoburn-1.5.8.2-1-x86_64
|
||||
installed = libisofs-1.5.8.2-1-x86_64
|
||||
installed = libixion-0.20.0-7-x86_64
|
||||
installed = libjpeg-turbo-3.1.4.1-1-x86_64
|
||||
installed = libjxl-0.11.2-2-x86_64
|
||||
installed = libksba-1.8.0-1-x86_64
|
||||
installed = liblangtag-0.6.8-1-x86_64
|
||||
installed = liblc3-1.1.3-2-x86_64
|
||||
installed = libldac-2.0.2.3-3-x86_64
|
||||
installed = libldap-2.6.13-1-x86_64
|
||||
installed = liblqr-0.4.3-1-x86_64
|
||||
installed = liblsan-16.1.1+r12+g301eb08fa2c5-1-x86_64
|
||||
installed = libmakepkg-dropins-20-1-any
|
||||
installed = libmalcontent-0.14.0-4-x86_64
|
||||
installed = libmd-1.2.0-1-x86_64
|
||||
installed = libmm-glib-1.24.2-1-x86_64
|
||||
installed = libmnl-1.0.5-2-x86_64
|
||||
installed = libmodplug-0.8.9.0-7-x86_64
|
||||
installed = libmpc-1.4.1-1-x86_64
|
||||
installed = libmpdclient-2.23-1-x86_64
|
||||
installed = libmspub-0.1.5-1-x86_64
|
||||
installed = libmwaw-0.3.22-4-x86_64
|
||||
installed = libmysofa-1.3.4-1-x86_64
|
||||
installed = libndp-1.9-1-x86_64
|
||||
installed = libnet-2:1.3-2-x86_64
|
||||
installed = libnetfilter_conntrack-1.1.1-1-x86_64
|
||||
installed = libnewt-0.52.25-2-x86_64
|
||||
installed = libnfnetlink-1.0.2-2-x86_64
|
||||
installed = libnftnl-1.3.1-1-x86_64
|
||||
installed = libnghttp2-1.69.0-1-x86_64
|
||||
installed = libnghttp3-1.16.0-1-x86_64
|
||||
installed = libngtcp2-1.23.0-1-x86_64
|
||||
installed = libnice-0.1.23-1-x86_64
|
||||
installed = libnl-3.12.0-1-x86_64
|
||||
installed = libnm-1.56.1-1-x86_64
|
||||
installed = libnma-1.10.6-3-x86_64
|
||||
installed = libnma-common-1.10.6-3-x86_64
|
||||
installed = libnotify-0.8.8-1-x86_64
|
||||
installed = libnsl-2.0.1-2-x86_64
|
||||
installed = libnumbertext-1.0.11-3-x86_64
|
||||
installed = libobjc-16.1.1+r12+g301eb08fa2c5-1-x86_64
|
||||
installed = libodfgen-0.1.8-5-x86_64
|
||||
installed = libogg-1.3.6-1-x86_64
|
||||
installed = libopenmpt-0.8.7-1-x86_64
|
||||
installed = libopenrazer-0.4.0-1-x86_64
|
||||
installed = liborcus-0.21.0-6-x86_64
|
||||
installed = libp11-kit-0.26.2-1-x86_64
|
||||
installed = libpagemaker-0.0.4-5-x86_64
|
||||
installed = libpcap-1.10.6-1-x86_64
|
||||
installed = libpciaccess-0.19-1-x86_64
|
||||
installed = libpgm-5.3.128-4-x86_64
|
||||
installed = libpipewire-1:1.6.6-1-x86_64
|
||||
installed = libplacebo-7.360.1-2-x86_64
|
||||
installed = libplist-2.7.0-3-x86_64
|
||||
installed = libpng-1.6.58-1-x86_64
|
||||
installed = libproxy-0.5.12-1-x86_64
|
||||
installed = libpsl-0.21.5-2-x86_64
|
||||
installed = libpulse-17.0+r98+gb096704c0-1-x86_64
|
||||
installed = libpwquality-1.4.5-7-x86_64
|
||||
installed = libquadmath-16.1.1+r12+g301eb08fa2c5-1-x86_64
|
||||
installed = libqxp-0.0.3-1-x86_64
|
||||
installed = libraqm-0.10.5-1-x86_64
|
||||
installed = libraw1394-2.1.2-4-x86_64
|
||||
installed = libreoffice-fresh-26.2.4-1-x86_64
|
||||
installed = librevenge-0.0.5-4-x86_64
|
||||
installed = librsvg-2:2.62.3-1-x86_64
|
||||
installed = librsync-1:2.3.4-2-x86_64
|
||||
installed = libsamplerate-0.2.2-3-x86_64
|
||||
installed = libsasl-2.1.28-5-x86_64
|
||||
installed = libseccomp-2.6.0-1-x86_64
|
||||
installed = libsecret-0.21.7-1-x86_64
|
||||
installed = libsigc++-2.12.2-1-x86_64
|
||||
installed = libsigc++-3.0-3.8.1-1-x86_64
|
||||
installed = libsixel-1.10.5-1-x86_64
|
||||
installed = libsm-1.2.6-1-x86_64
|
||||
installed = libsndfile-1.2.2-4-x86_64
|
||||
installed = libsodium-1.0.22-1-x86_64
|
||||
installed = libsoup3-3.6.6-2-x86_64
|
||||
installed = libsoxr-0.1.3-4-x86_64
|
||||
installed = libssh-0.12.0-1-x86_64
|
||||
installed = libssh2-1.11.1-1-x86_64
|
||||
installed = libstaroffice-0.0.7-5-x86_64
|
||||
installed = libstdc++-16.1.1+r12+g301eb08fa2c5-1-x86_64
|
||||
installed = libstemmer-3.1.1-1-x86_64
|
||||
installed = libsysprof-capture-50.0-2-x86_64
|
||||
installed = libtasn1-4.21.0-1-x86_64
|
||||
installed = libtatsu-1.0.5-1-x86_64
|
||||
installed = libteam-1.32-3-x86_64
|
||||
installed = libthai-0.1.30-1-x86_64
|
||||
installed = libtheora-1.2.0-1-x86_64
|
||||
installed = libtiff-4.7.1-2-x86_64
|
||||
installed = libtirpc-1.3.7-1-x86_64
|
||||
installed = libtommath-1.3.0-2-x86_64
|
||||
installed = libtool-2.6.1-1-x86_64
|
||||
installed = libtsan-16.1.1+r12+g301eb08fa2c5-1-x86_64
|
||||
installed = libubsan-16.1.1+r12+g301eb08fa2c5-1-x86_64
|
||||
installed = libunibreak-7.0-1-x86_64
|
||||
installed = libunistring-1.4.2-1-x86_64
|
||||
installed = libunwind-1.8.2-1-x86_64
|
||||
installed = liburing-2.14-1-x86_64
|
||||
installed = libusb-1.0.30-1-x86_64
|
||||
installed = libusbmuxd-2.1.1-2-x86_64
|
||||
installed = libutf8proc-2.11.3-1-x86_64
|
||||
installed = libuv-1.52.1-1-x86_64
|
||||
installed = libva-2.23.0-1-x86_64
|
||||
installed = libva-nvidia-driver-0.0.17-1-x86_64
|
||||
installed = libvdpau-1.5-4-x86_64
|
||||
installed = libverto-0.3.2-6-x86_64
|
||||
installed = libvisio-0.1.11-1-x86_64
|
||||
installed = libvorbis-1.3.7-4-x86_64
|
||||
installed = libvpl-2.16.0-2-x86_64
|
||||
installed = libvpx-1.16.0-3-x86_64
|
||||
installed = libwacom-2.19.0-1-x86_64
|
||||
installed = libwebp-1.6.0-2-x86_64
|
||||
installed = libwireplumber-0.5.14-1-x86_64
|
||||
installed = libwpd-0.10.3-6-x86_64
|
||||
installed = libwps-0.4.14-4-x86_64
|
||||
installed = libx11-1.8.13-1-x86_64
|
||||
installed = libxau-1.0.12-1-x86_64
|
||||
installed = libxcb-1.17.0-1-x86_64
|
||||
installed = libxcomposite-0.4.7-1-x86_64
|
||||
installed = libxcrypt-4.5.2-1-x86_64
|
||||
installed = libxcrypt-compat-4.5.2-1-x86_64
|
||||
installed = libxcursor-1.2.3-1-x86_64
|
||||
installed = libxcvt-0.1.3-1-x86_64
|
||||
installed = libxdamage-1.1.7-1-x86_64
|
||||
installed = libxdmcp-1.1.5-2-x86_64
|
||||
installed = libxext-1.3.7-1-x86_64
|
||||
installed = libxfce4ui-4.20.2-1-x86_64
|
||||
installed = libxfce4util-4.20.1-1-x86_64
|
||||
installed = libxfixes-6.0.2-1-x86_64
|
||||
installed = libxfont2-2.0.7-1-x86_64
|
||||
installed = libxft-2.3.9-1-x86_64
|
||||
installed = libxi-1.8.3-1-x86_64
|
||||
installed = libxinerama-1.1.6-1-x86_64
|
||||
installed = libxkbcommon-1.13.2-1-x86_64
|
||||
installed = libxkbcommon-x11-1.13.2-1-x86_64
|
||||
installed = libxkbfile-1.2.0-1-x86_64
|
||||
installed = libxml2-2.15.3-1-x86_64
|
||||
installed = libxml2-legacy-2.13.9-2-x86_64
|
||||
installed = libxmlb-0.3.27-1-x86_64
|
||||
installed = libxmp-4.7.0-1-x86_64
|
||||
installed = libxmu-1.3.1-1-x86_64
|
||||
installed = libxpresent-1.0.2-1-x86_64
|
||||
installed = libxrandr-1.5.5-1-x86_64
|
||||
installed = libxrender-0.9.12-1-x86_64
|
||||
installed = libxshmfence-1.3.3-1-x86_64
|
||||
installed = libxslt-1.1.45-2-x86_64
|
||||
installed = libxss-1.2.5-1-x86_64
|
||||
installed = libxt-1.3.1-1-x86_64
|
||||
installed = libxtst-1.2.5-1-x86_64
|
||||
installed = libxv-1.0.13-1-x86_64
|
||||
installed = libxxf86vm-1.1.7-1-x86_64
|
||||
installed = libyaml-0.2.5-3-x86_64
|
||||
installed = libyuv-r2426+464c51a03-1-x86_64
|
||||
installed = libzip-1.11.4-1-x86_64
|
||||
installed = libzmf-0.0.2-20-x86_64
|
||||
installed = licenses-20240728-1-any
|
||||
installed = lilv-0.26.4-1-x86_64
|
||||
installed = linux-7.0.11.arch1-1-x86_64
|
||||
installed = linux-api-headers-7.0-1-x86_64
|
||||
installed = linux-firmware-20260519-1-any
|
||||
installed = linux-firmware-amdgpu-20260519-1-any
|
||||
installed = linux-firmware-atheros-20260519-1-any
|
||||
installed = linux-firmware-broadcom-20260519-1-any
|
||||
installed = linux-firmware-cirrus-20260519-1-any
|
||||
installed = linux-firmware-intel-20260519-1-any
|
||||
installed = linux-firmware-mediatek-20260519-1-any
|
||||
installed = linux-firmware-nvidia-20260519-1-any
|
||||
installed = linux-firmware-other-20260519-1-any
|
||||
installed = linux-firmware-radeon-20260519-1-any
|
||||
installed = linux-firmware-realtek-20260519-1-any
|
||||
installed = linux-firmware-whence-20260519-1-any
|
||||
installed = linux-headers-7.0.11.arch1-1-x86_64
|
||||
installed = lld-22.1.6-1-x86_64
|
||||
installed = llhttp-9.3.1-1-x86_64
|
||||
installed = llvm-libs-22.1.6-1-x86_64
|
||||
installed = lm_sensors-1:3.6.2-1-x86_64
|
||||
installed = lmdb-0.9.35-1-x86_64
|
||||
installed = lpsolve-5.5.2.14-1-x86_64
|
||||
installed = lsb-release-2.0.r55.a25a4fc-1-any
|
||||
installed = lsof-4.99.6-1-x86_64
|
||||
installed = lua-5.5.0-2-x86_64
|
||||
installed = lua54-5.4.8-6-x86_64
|
||||
installed = luajit-2.1.1780076327+b925b3e-1-x86_64
|
||||
installed = lug-helper-1:4.13-1-any
|
||||
installed = lv2-1.18.10-2-x86_64
|
||||
installed = lz4-1:1.10.0-2-x86_64
|
||||
installed = lzo-2.10-5-x86_64
|
||||
installed = m4-1.4.21-2-x86_64
|
||||
installed = mailcap-2.1.54-2-any
|
||||
installed = make-4.4.1-3-x86_64
|
||||
installed = mako-1.11.0-1-x86_64
|
||||
installed = md4c-0.5.3-1-x86_64
|
||||
installed = mesa-1:26.1.2-1-x86_64
|
||||
installed = meson-1.11.1-3-any
|
||||
installed = mingw-w64-binutils-2.46.0-1-x86_64
|
||||
installed = mingw-w64-crt-14.0.0-1-any
|
||||
installed = mingw-w64-gcc-16.1.0-1-x86_64
|
||||
installed = mingw-w64-headers-14.0.0-1-any
|
||||
installed = mingw-w64-winpthreads-14.0.0-1-any
|
||||
installed = minizip-1:1.3.2-3-x86_64
|
||||
installed = mkinitcpio-41-4-any
|
||||
installed = mkinitcpio-busybox-1.36.1-1-x86_64
|
||||
installed = mobile-broadband-provider-info-20251101-1-any
|
||||
installed = mpdecimal-4.0.1-3-x86_64
|
||||
installed = mpfr-4.2.2-1-x86_64
|
||||
installed = mpg123-1.33.5-1-x86_64
|
||||
installed = mpv-1:0.41.0-3-x86_64
|
||||
installed = mpvpaper-1.8-1-x86_64
|
||||
installed = mtdev-1.1.7-1-x86_64
|
||||
installed = mtools-1:4.0.49-1-x86_64
|
||||
installed = mujs-1.3.9-1-x86_64
|
||||
installed = muparser-2.3.5-2-x86_64
|
||||
installed = nano-9.0-1-x86_64
|
||||
installed = ncurses-6.6-2-x86_64
|
||||
installed = neon-0.37.1-1-x86_64
|
||||
installed = netavark-1.17.2-2-x86_64
|
||||
installed = nettle-4.0-1-x86_64
|
||||
installed = network-manager-applet-1.36.0-2-x86_64
|
||||
installed = networkmanager-1.56.1-1-x86_64
|
||||
installed = nftables-1:1.1.6-3-x86_64
|
||||
installed = ninja-1.13.2-3-x86_64
|
||||
installed = nm-connection-editor-1.36.0-2-x86_64
|
||||
installed = noto-fonts-1:2026.06.01-1-any
|
||||
installed = noto-fonts-cjk-20240730-1-any
|
||||
installed = noto-fonts-emoji-1:2.051-1-any
|
||||
installed = noto-fonts-extra-1:2026.06.01-1-any
|
||||
installed = npth-1.8-1-x86_64
|
||||
installed = nspr-4.39-1-x86_64
|
||||
installed = nss-3.124-1-x86_64
|
||||
installed = nvidia-open-610.43.02-2-x86_64
|
||||
installed = nvidia-utils-610.43.02-2-x86_64
|
||||
installed = ocl-icd-2.3.4-1-x86_64
|
||||
installed = onetbb-2023.0.0-1-x86_64
|
||||
installed = oniguruma-6.9.10-1-x86_64
|
||||
installed = openal-1.25.2-1-x86_64
|
||||
installed = opencore-amr-0.1.6-2-x86_64
|
||||
installed = openjpeg2-2.5.4-1-x86_64
|
||||
installed = openrazer-daemon-3.12.2-2-any
|
||||
installed = openrazer-driver-dkms-3.12.2-2-any
|
||||
installed = openssh-10.3p1-1-x86_64
|
||||
installed = openssl-3.6.3-1-x86_64
|
||||
installed = opus-1.6.1-1-x86_64
|
||||
installed = opusfile-0.12-4-x86_64
|
||||
installed = orc-0.4.42-1-x86_64
|
||||
installed = os-prober-1.84-1-x86_64
|
||||
installed = ostree-2025.7-3-x86_64
|
||||
installed = p11-kit-0.26.2-1-x86_64
|
||||
installed = pacman-7.1.0.r9.g54d9411-2-x86_64
|
||||
installed = pacman-mirrorlist-20260610-1-any
|
||||
installed = pahole-1:1.31-2-x86_64
|
||||
installed = pam-1.7.2-2-x86_64
|
||||
installed = pambase-20250719-1-any
|
||||
installed = pango-1:1.57.1-1-x86_64
|
||||
installed = pangomm-2.46.4-3-x86_64
|
||||
installed = pangomm-2.48-2.56.1-2-x86_64
|
||||
installed = papirus-icon-theme-20250501-1-any
|
||||
installed = parted-3.7-1-x86_64
|
||||
installed = paru-2.1.0-2-x86_64
|
||||
installed = paru-debug-2.1.0-2-x86_64
|
||||
installed = passt-2026_05_26.038c51e-1-x86_64
|
||||
installed = patch-2.8-1-x86_64
|
||||
installed = pavucontrol-1:6.2-1-x86_64
|
||||
installed = pciutils-3.15.0-1-x86_64
|
||||
installed = pcre-8.45-4-x86_64
|
||||
installed = pcre2-10.47-1-x86_64
|
||||
installed = pcsclite-2.5.1-1-x86_64
|
||||
installed = perl-5.42.2-1-x86_64
|
||||
installed = perl-error-0.17030-3-any
|
||||
installed = perl-mailtools-2.22-3-any
|
||||
installed = perl-timedate-2.35-1-any
|
||||
installed = pinentry-1.3.2-2-x86_64
|
||||
installed = pipewire-1:1.6.6-1-x86_64
|
||||
installed = pipewire-audio-1:1.6.6-1-x86_64
|
||||
installed = pipewire-pulse-1:1.6.6-1-x86_64
|
||||
installed = pixman-0.46.4-1-x86_64
|
||||
installed = pkgconf-2.5.1-1-x86_64
|
||||
installed = playerctl-2.4.1-5-x86_64
|
||||
installed = podman-5.8.3-1-x86_64
|
||||
installed = podman-compose-1.6.0-1-any
|
||||
installed = podman-desktop-1.27.2-2-x86_64
|
||||
installed = polkit-127-3-x86_64
|
||||
installed = polkit-qt6-0.201.1-1-x86_64
|
||||
installed = poppler-26.05.0-1-x86_64
|
||||
installed = popt-1.19-2-x86_64
|
||||
installed = portaudio-1:19.7.0-4-x86_64
|
||||
installed = portmidi-1:2.0.8-1-x86_64
|
||||
installed = pps-tools-1.0.3-2-x86_64
|
||||
installed = procps-ng-4.0.6-1-x86_64
|
||||
installed = protobuf-35.0-1-x86_64
|
||||
installed = protobuf-c-1.5.2-10-x86_64
|
||||
installed = psmisc-23.7-2-x86_64
|
||||
installed = pugixml-1.15-3-x86_64
|
||||
installed = python-3.14.5-1-x86_64
|
||||
installed = python-attrs-26.1.0-1-any
|
||||
installed = python-autocommand-2.2.2-9-any
|
||||
installed = python-cffi-2.0.0-2-x86_64
|
||||
installed = python-click-8.3.3-1-any
|
||||
installed = python-cryptography-48.0.1-1-x86_64
|
||||
installed = python-daemonize-2.5.0-10-any
|
||||
installed = python-dbus-1.4.0-2-x86_64
|
||||
installed = python-dotenv-1.2.2-1-any
|
||||
installed = python-filelock-3.29.0-1-any
|
||||
installed = python-gobject-3.56.3-1-x86_64
|
||||
installed = python-jaraco.collections-5.1.0-3-any
|
||||
installed = python-jaraco.context-6.1.2-1-any
|
||||
installed = python-jaraco.functools-4.1.0-3-any
|
||||
installed = python-jaraco.text-4.0.0-4-any
|
||||
installed = python-mako-1.3.11-1-any
|
||||
installed = python-markdown-3.10.2-1-any
|
||||
installed = python-markupsafe-3.0.3-1-x86_64
|
||||
installed = python-more-itertools-11.1.0-1-any
|
||||
installed = python-numpy-2.4.6-1-x86_64
|
||||
installed = python-openrazer-3.12.2-2-any
|
||||
installed = python-packaging-26.2-1-any
|
||||
installed = python-pip-26.1.2-1-any
|
||||
installed = python-pkg_resources-81.0.0-1-any
|
||||
installed = python-platformdirs-4.10.0-1-any
|
||||
installed = python-protobuf-35.0-1-x86_64
|
||||
installed = python-pycparser-3.00-1-any
|
||||
installed = python-pygame-2.6.1-5-x86_64
|
||||
installed = python-pyudev-0.24.4-1-any
|
||||
installed = python-setproctitle-1.3.7-2-x86_64
|
||||
installed = python-setuptools-1:82.0.1-1-any
|
||||
installed = python-tqdm-4.68.1-1-any
|
||||
installed = python-typing_extensions-4.15.0-3-any
|
||||
installed = python-wheel-0.47.0-1-any
|
||||
installed = python-yaml-6.0.3-2-x86_64
|
||||
installed = qt5-base-5.15.19+kde+r96-1-x86_64
|
||||
installed = qt5-declarative-5.15.19+kde+r23-1-x86_64
|
||||
installed = qt5-graphicaleffects-5.15.19-1-x86_64
|
||||
installed = qt5-quickcontrols2-5.15.19+kde+r5-1-x86_64
|
||||
installed = qt5-svg-5.15.19+kde+r5-1-x86_64
|
||||
installed = qt5-translations-5.15.19-1-any
|
||||
installed = qt5-wayland-5.15.19+kde+r55-1-x86_64
|
||||
installed = qt6-5compat-6.11.1-1-x86_64
|
||||
installed = qt6-base-6.11.1-1-x86_64
|
||||
installed = qt6-declarative-6.11.1-3-x86_64
|
||||
installed = qt6-shadertools-6.11.1-1-x86_64
|
||||
installed = qt6-svg-6.11.1-1-x86_64
|
||||
installed = qt6-tools-6.11.1-1-x86_64
|
||||
installed = qt6-translations-6.11.1-1-any
|
||||
installed = qt6-wayland-6.11.1-1-x86_64
|
||||
installed = raptor-2.0.16-9-x86_64
|
||||
installed = rasqal-1:0.9.33-9-x86_64
|
||||
installed = rav1e-0.8.1-2-x86_64
|
||||
installed = razergenie-1.3.0-1-x86_64
|
||||
installed = re2-2:2025.11.05-4-x86_64
|
||||
installed = readline-8.3.003-1-x86_64
|
||||
installed = redland-1:1.0.17-10-x86_64
|
||||
installed = reflector-2023-5-any
|
||||
installed = resvg-0.47.0-2-x86_64
|
||||
installed = rhash-1.4.6-1-x86_64
|
||||
installed = rsync-3.4.4-1-x86_64
|
||||
installed = rtkit-0.14-1-x86_64
|
||||
installed = rubberband-4.0.0-2-x86_64
|
||||
installed = rustup-1.29.0-2-x86_64
|
||||
installed = sbc-2.2-1-x86_64
|
||||
installed = scdoc-1.11.4-1-x86_64
|
||||
installed = sdbus-cpp-2.3.1-1-x86_64
|
||||
installed = sddm-0.21.0-7-x86_64
|
||||
installed = sddm-catppuccin-git-r42.10831de-1-any
|
||||
installed = sdl2-compat-2.32.70-1-x86_64
|
||||
installed = sdl2_image-2.8.12-1-x86_64
|
||||
installed = sdl2_mixer-2.8.2-1-x86_64
|
||||
installed = sdl2_ttf-2.24.0-2-x86_64
|
||||
installed = sdl3-3.4.10-1-x86_64
|
||||
installed = sdl3_ttf-3.2.2-3-x86_64
|
||||
installed = seatd-0.9.3-1-x86_64
|
||||
installed = sed-4.10-1-x86_64
|
||||
installed = serd-0.32.10-1-x86_64
|
||||
installed = shaderc-2026.2-1-x86_64
|
||||
installed = shadow-4.18.0-1-x86_64
|
||||
installed = shared-mime-info-2.4-3-x86_64
|
||||
installed = slang-2.3.3-4-x86_64
|
||||
installed = slurp-1.5.0-2-x86_64
|
||||
installed = smartmontools-7.5-1-x86_64
|
||||
installed = snappy-1.2.2-3-x86_64
|
||||
installed = sndio-1.10.0-1-x86_64
|
||||
installed = sord-0.16.22-1-x86_64
|
||||
installed = sound-theme-freedesktop-0.8-6-any
|
||||
installed = source-highlight-3.1.9-18-x86_64
|
||||
installed = spandsp-0.0.6-7-x86_64
|
||||
installed = spdlog-1.17.0-2-x86_64
|
||||
installed = speex-1.2.1-2-x86_64
|
||||
installed = speexdsp-1.2.1-2-x86_64
|
||||
installed = spirv-tools-1:1.4.350.0-1-x86_64
|
||||
installed = sqlite-3.53.2-1-x86_64
|
||||
installed = squashfs-tools-4.7.5-1-x86_64
|
||||
installed = sratom-0.6.22-1-x86_64
|
||||
installed = srt-1.5.5-1-x86_64
|
||||
installed = startup-notification-0.12-9-x86_64
|
||||
installed = steam-1.0.0.85-7-x86_64
|
||||
installed = steam-devices-1.0.0.85-7-x86_64
|
||||
installed = sudo-1.9.17.p2-2-x86_64
|
||||
installed = svt-av1-4.1.0-1-x86_64
|
||||
installed = systemd-260.2-2-x86_64
|
||||
installed = systemd-libs-260.2-2-x86_64
|
||||
installed = systemd-sysvcompat-260.2-2-x86_64
|
||||
installed = tar-1.35-2-x86_64
|
||||
installed = tcl-8.6.16-1-x86_64
|
||||
installed = tdb-1.4.15-1-x86_64
|
||||
installed = texinfo-7.3-1-x86_64
|
||||
installed = thunar-4.20.8-3-x86_64
|
||||
installed = tinysparql-3.11.1-1-x86_64
|
||||
installed = tk-8.6.16-1-x86_64
|
||||
installed = tomlplusplus-3.4.0-2-x86_64
|
||||
installed = tpm2-tss-4.1.3-1-x86_64
|
||||
installed = tslib-1.24-1-x86_64
|
||||
installed = ttf-jetbrains-mono-nerd-3.4.0-2-any
|
||||
installed = tzdata-2026b-1-x86_64
|
||||
installed = uchardet-0.0.8-4-x86_64
|
||||
installed = uefitool-debug-1:0.28.0-3-x86_64
|
||||
installed = unzip-6.0-23-x86_64
|
||||
installed = upower-1.91.2-1-x86_64
|
||||
installed = usbutils-019-1-x86_64
|
||||
installed = util-linux-2.42.1-1-x86_64
|
||||
installed = util-linux-libs-2.42.1-1-x86_64
|
||||
installed = v4l-utils-1.32.0-2-x86_64
|
||||
installed = vapoursynth-76-1-x86_64
|
||||
installed = vid.stab-1.1.1-2-x86_64
|
||||
installed = vim-9.2.0623-1-x86_64
|
||||
installed = vim-runtime-9.2.0623-1-x86_64
|
||||
installed = vmaf-3.1.0-1-x86_64
|
||||
installed = vmware-keymaps-1.0-3-any
|
||||
installed = vmware-workstation-26H1-3-x86_64
|
||||
installed = vscodium-bin-1.121.03429-1-x86_64
|
||||
installed = vulkan-icd-loader-1.4.350.0-1-x86_64
|
||||
installed = vulkan-tools-1.4.350.0-1-x86_64
|
||||
installed = waybar-0.15.0-2-x86_64
|
||||
installed = wayland-1.25.0-1-x86_64
|
||||
installed = wayland-protocols-1.49-1-any
|
||||
installed = webrtc-audio-processing-1-1.3-5-x86_64
|
||||
installed = which-2.25-1-x86_64
|
||||
installed = winboat-bin-0.9.0-1-x86_64
|
||||
installed = wine-staging-11.10-1-x86_64
|
||||
installed = wireplumber-0.5.14-1-x86_64
|
||||
installed = wl-clipboard-1:2.3.0-1-x86_64
|
||||
installed = wlogout-1.2.2-0-x86_64
|
||||
installed = woff2-font-awesome-7.2.0-1-any
|
||||
installed = wpa_supplicant-2:2.11-5-x86_64
|
||||
installed = x264-3:0.165.r3222.b35605a-2-x86_64
|
||||
installed = x265-4.1-1-x86_64
|
||||
installed = xautomation-1.09-6-x86_64
|
||||
installed = xcb-proto-1.17.0-4-any
|
||||
installed = xcb-util-0.4.1-2-x86_64
|
||||
installed = xcb-util-cursor-0.1.6-1-x86_64
|
||||
installed = xcb-util-errors-1.0.1-2-x86_64
|
||||
installed = xcb-util-image-0.4.1-3-x86_64
|
||||
installed = xcb-util-keysyms-0.4.1-5-x86_64
|
||||
installed = xcb-util-renderutil-0.3.10-2-x86_64
|
||||
installed = xcb-util-wm-0.4.2-2-x86_64
|
||||
installed = xdg-dbus-proxy-0.1.7-1-x86_64
|
||||
installed = xdg-desktop-portal-1.22.0-1-x86_64
|
||||
installed = xdg-desktop-portal-gtk-1.15.3-1-x86_64
|
||||
installed = xdg-desktop-portal-hyprland-1.3.12-2-x86_64
|
||||
installed = xdg-user-dirs-0.20-1-x86_64
|
||||
installed = xdg-utils-1.2.1-2-any
|
||||
installed = xf86-input-libinput-1.5.0-1-x86_64
|
||||
installed = xfconf-4.20.0-2-x86_64
|
||||
installed = xkeyboard-config-2.47-1-any
|
||||
installed = xmlsec-1.3.11-1-x86_64
|
||||
installed = xorg-fonts-encodings-1.1.0-2-any
|
||||
installed = xorg-server-21.1.23-1-x86_64
|
||||
installed = xorg-server-common-21.1.23-1-x86_64
|
||||
installed = xorg-setxkbmap-1.3.5-1-x86_64
|
||||
installed = xorg-xauth-1.1.5-1-x86_64
|
||||
installed = xorg-xkbcomp-1.5.0-1-x86_64
|
||||
installed = xorg-xprop-1.2.8-1-x86_64
|
||||
installed = xorg-xrandr-1.5.4-1-x86_64
|
||||
installed = xorg-xwayland-24.1.12-1-x86_64
|
||||
installed = xorgproto-2025.1-1-any
|
||||
installed = xvidcore-1.3.7-3-x86_64
|
||||
installed = xxhash-0.8.3-1-x86_64
|
||||
installed = xz-5.8.3-1-x86_64
|
||||
installed = yaml-cpp-0.9.0-1-x86_64
|
||||
installed = yay-12.6.0-1-x86_64
|
||||
installed = yay-debug-12.6.0-1-x86_64
|
||||
installed = zenity-4.2.2-1-x86_64
|
||||
installed = zeromq-4.3.5-3-x86_64
|
||||
installed = zimg-3.0.6-1-x86_64
|
||||
installed = zint-2.16.0-2-x86_64
|
||||
installed = zix-0.8.0-1-x86_64
|
||||
installed = zlib-1:1.3.2-3-x86_64
|
||||
installed = zlib-ng-2.3.3-1-x86_64
|
||||
installed = zstd-1.5.7-3-x86_64
|
||||
installed = zxing-cpp-3.0.2-1-x86_64
|
||||
Binary file not shown.
@@ -0,0 +1,16 @@
|
||||
# Generated by makepkg 7.1.0
|
||||
# using fakeroot version 1.37.2
|
||||
pkgname = python-meh
|
||||
pkgbase = python-meh
|
||||
xdata = pkgtype=pkg
|
||||
pkgver = 0.43-1
|
||||
pkgdesc = Python exception handling library (dépendance Anaconda)
|
||||
url = https://github.com/rhinstaller/python-meh
|
||||
builddate = 1781307281
|
||||
packager = Unknown Packager
|
||||
size = 170289
|
||||
arch = any
|
||||
license = GPL-2.0-or-later
|
||||
depend = python
|
||||
depend = python-gobject
|
||||
depend = python-dbus
|
||||
@@ -0,0 +1,139 @@
|
||||
#
|
||||
# __init__.py - Basic stuff for exception handling
|
||||
#
|
||||
# Copyright (C) 2009 Red Hat, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Author(s): Chris Lumens <clumens@redhat.com>
|
||||
#
|
||||
|
||||
from collections import namedtuple
|
||||
|
||||
# These constants represent the return values of buttons on the initial
|
||||
# exception handling dialog - the dialog that first pops up when an
|
||||
# exception is hit.
|
||||
MAIN_RESPONSE_DEBUG = 0
|
||||
MAIN_RESPONSE_SAVE = 1
|
||||
MAIN_RESPONSE_QUIT = 2
|
||||
MAIN_RESPONSE_SHELL = 3
|
||||
MAIN_RESPONSE_NONE = 4
|
||||
|
||||
class ConfigError(Exception):
|
||||
"""Exception class for the configuration related errors."""
|
||||
|
||||
pass
|
||||
|
||||
class Config(object):
|
||||
"""Hold configuration info useful throughout the exception handling
|
||||
classes. This prevents having to pass a bunch of arguments to a
|
||||
bunch of different functions. A Config instance must be created
|
||||
before creating an ExceptionHandler instance.
|
||||
"""
|
||||
def __init__(self, *args, **kwargs):
|
||||
"""Create a new Config instance. Arguments may be passed in to
|
||||
set any of the configuration values. Unknown arguments will
|
||||
be ignored. Instance attributes:
|
||||
|
||||
attrSkipList -- A list of strings. When handling a traceback,
|
||||
any attributes found with the same name as an
|
||||
element of this list will not be written to
|
||||
the dump. This is to prevent writing potentially
|
||||
sensitive information like passwords. The names
|
||||
must be given without the leading name of the
|
||||
object passed to handler.install(). For instance,
|
||||
if handler.install() gets an Anaconda instance
|
||||
with the name "anaconda" and you want to skip
|
||||
anaconda.id.rootPassword, "id.rootPassword" should
|
||||
be listed in attrSkipList.
|
||||
fileList -- A list of files to find on the system and add
|
||||
to the traceback dump.
|
||||
localSkipList -- A list of strings. When handling a traceback,
|
||||
any local variables found with their name containing
|
||||
an element of this list will not be written to
|
||||
the dump. This is subtely different from
|
||||
attrSkipList.
|
||||
callbackDict -- A dictionary having item names as keys and pairs
|
||||
(function, attchmnt_only) as values.
|
||||
@see register_callback
|
||||
programName -- The name of the erroring program.
|
||||
programVersion -- The version number of the erroring program.
|
||||
Both programName and programVersion are used
|
||||
throughout the exception handler, so must be
|
||||
set.
|
||||
programArch -- The architecture of the erroring program.
|
||||
"""
|
||||
self.attrSkipList = []
|
||||
self.fileList = []
|
||||
self.localSkipList = []
|
||||
self.callbackDict = dict()
|
||||
self.programName = None
|
||||
self.programVersion = None
|
||||
self.programArch = None
|
||||
|
||||
# Override the defaults set above with whatever's passed in as an
|
||||
# argument. Unknown arguments get thrown away.
|
||||
for (key, val) in kwargs.items():
|
||||
if key in self.__dict__:
|
||||
self.__dict__[key] = val
|
||||
|
||||
# Make sure required things are set.
|
||||
if not self.programName:
|
||||
raise ValueError("programName must be set.")
|
||||
|
||||
if not self.programVersion:
|
||||
raise ValueError("programVersion must be set.")
|
||||
|
||||
def register_callback(self, item_name, callback, attchmnt_only=False,
|
||||
override=False):
|
||||
"""
|
||||
Register new callback that will be called when data about the
|
||||
crash is collected. The returned value will be included as the
|
||||
'item_name' item.
|
||||
|
||||
:param item_name: name of the item storing the value returned by the
|
||||
'callback' function
|
||||
:type item_name: string
|
||||
:param callback: a function to be called
|
||||
:type callback: a function of type: () -> string
|
||||
:param attchmnt_only: whether the returned valued should be included only
|
||||
as an attachment or also in the main '*-tb' file
|
||||
(defaults to False)
|
||||
:type attchmnt_only: bool
|
||||
:param override: whether to override the previously registered callback
|
||||
with the same item name or not (may raise exception)
|
||||
:type override: bool
|
||||
|
||||
:raise ConfigError: if callback with the 'item_name' has already been
|
||||
registered and 'override' is not set to True
|
||||
:return: None
|
||||
|
||||
"""
|
||||
|
||||
if item_name not in self.callbackDict or override:
|
||||
self.callbackDict[item_name] = (callback, attchmnt_only)
|
||||
else:
|
||||
msg = "Callback with name '%s' already registered" % item_name
|
||||
raise ConfigError(msg)
|
||||
|
||||
# type, value and stack are items provided by Python for the exception handler
|
||||
ExceptionInfo = namedtuple("ExceptionInfo", ["type", "value", "stack"])
|
||||
|
||||
# ExceptionInfo instance plus the object that should be dumped
|
||||
DumpInfo = namedtuple("DumpInfo", ["exc_info", "object"])
|
||||
|
||||
# information about a package (as provided e.g. by rpm)
|
||||
PackageInfo = namedtuple("PackageInfo", ["name", "version", "release", "epoch",
|
||||
"arch"])
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user