erplibre/script/install/install_arch_linux.sh

148 lines
6.5 KiB
Bash
Raw Normal View History

2025-04-08 23:54:22 -04:00
#!/usr/bin/env bash
# © 2021-2026 TechnoLibre (http://www.technolibre.ca)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
#
# Dépendances système ERPLibre pour Arch Linux (pacman). Réécrit pour les
# images cloud Arch : l'ancien script utilisait « yay » (helper AUR ABSENT
# d'une image cloud et qui refuse de tourner en root) et n'installait jamais
# « base-devel » -> pas de compilateur C -> échec de la compilation de Python
# par pyenv. On passe tout par pacman (dépôts officiels) ; l'AUR (wkhtmltopdf)
# est best-effort et ne bloque pas.
2025-04-08 23:54:22 -04:00
. ./env_var.sh
2025-11-06 01:11:28 -05:00
EL_USER=${USER}
2025-04-08 23:54:22 -04:00
# pacman résilient : --needed saute ce qui est déjà là, --noconfirm en non
# interactif.
PAC="sudo pacman -S --needed --noconfirm"
[ADD] arch: Canadian pacman mirrors first Measured from Montréal on extra.db: mirror.quantum5.ca 2.0 s, mirror.xenyth.net 7.1 s, against 8.0 s for geo.mirror.pkgbuild.com. The official "geographic" mirror is therefore not the best one here, and reflector, which sorts by throughput from inside the VM, had not picked them. Both are PREPENDED, never substituted: whatever reflector chose stays below, as fallback. The write therefore comes after it, since "--save" overwrites the file. Guarded on x86_64, these mirrors serving that architecture only. Host side, the addition is idempotent. The desktop install went through neither step: it ran without the near mirrors and without the full update a rolling release demands, so it pulled from Europe and broke on partial upgrades. --- FR --- Mesuré depuis Montréal sur extra.db : mirror.quantum5.ca 2,0 s, mirror.xenyth.net 7,1 s, contre 8,0 s pour geo.mirror.pkgbuild.com. Le miroir « géographique » officiel n'est donc pas le meilleur ici, et reflector, qui trie par débit depuis la VM, ne les avait pas retenus. Les deux sont mis EN TÊTE, jamais substitués : ce que reflector a choisi reste dessous, en repli. L'écriture vient donc après lui, puisque « --save » écrase le fichier. Gardé sur x86_64, ces miroirs ne servant que cette architecture. Côté hôte, l'ajout est idempotent. L'installation du bureau ne passait par aucune des deux étapes : elle s'exécutait sans les miroirs proches et sans la mise à jour complète qu'exige une rolling release, tirant donc d'Europe et cassant sur des mises à jour partielles. Assisted-by: Claude Opus 5
2026-08-11 22:29:33 -04:00
# Miroirs canadiens EN TÊTE de la mirrorlist. Mesuré depuis Montreal sur
# extra.db : quantum5 2,0 s, xenyth 7,1 s, contre 8,0 s pour
# geo.mirror.pkgbuild.com — le miroir « geographique » officiel n'est donc pas
# le meilleur ici. Les deux ne servent que x86_64 (Arch Linux ARM a ses propres
# miroirs), d'où la garde. On les AJOUTE en tete sans effacer l'existant : les
# miroirs deja configures restent en repli.
if [ "$(uname -m)" = "x86_64" ] \
&& ! grep -q "mirror.quantum5.ca" /etc/pacman.d/mirrorlist 2> /dev/null; then
echo -e "\n---- Miroirs pacman canadiens ----"
printf 'Server = https://mirror.quantum5.ca/archlinux/$repo/os/$arch\nServer = https://mirror.xenyth.net/archlinux/$repo/os/$arch\n' \
| sudo tee /etc/pacman.d/mirrorlist.el > /dev/null
sudo sh -c 'cat /etc/pacman.d/mirrorlist >> /etc/pacman.d/mirrorlist.el \
&& mv /etc/pacman.d/mirrorlist.el /etc/pacman.d/mirrorlist'
fi
# Mise à jour COMPLÈTE obligatoire : Arch est en rolling release et NE SUPPORTE
# PAS les mises à jour partielles. Sur une image cloud dont la glibc est
# ancienne, un « pacman -S <paquet récent> » lie le binaire à une glibc plus
# récente que celle installée -> « /usr/bin/postgres: GLIBC_2.44 not found ».
# « -Syu » met à jour glibc (et tout le système) pour rester cohérent.
sudo pacman -Syu --noconfirm || true
2025-04-08 23:54:22 -04:00
#--------------------------------------------------
# Outils de compilation — CRITIQUE (build Python via pyenv, extensions Python)
# base-devel fournit gcc, make, patch, pkgconf, fakeroot, etc.
#--------------------------------------------------
echo -e "\n---- Groupe base-devel (compilateur C, make…) ----"
${PAC} base-devel
2025-04-08 23:54:22 -04:00
retVal=$?
if [[ $retVal -ne 0 ]]; then
echo "pacman base-devel installation error."
2025-04-08 23:54:22 -04:00
exit 1
fi
#--------------------------------------------------
# Dépendances de build pyenv (compilation de CPython) + outils de base
#--------------------------------------------------
echo -e "\n---- Dépendances pyenv (compilation Python) + outils ----"
# « less » est le PAGINATEUR, sans rapport avec le « less » npm posé plus bas
# (lessc, préprocesseur CSS). Il est dans core mais ni dans le groupe « base »
# ni une dépendance ferme de git, seulement optionnelle : sans lui, git appelle
# quand même son paginateur par défaut et log, diff, show, tag s'arrêtent sur
# « unable to execute pager 'less' ». Debian et Ubuntu l'obtiennent par les
# recommandations de leur paquet git, notion que pacman n'a pas.
${PAC} git wget curl less openssl zlib xz tk bzip2 readline sqlite libffi
2025-04-08 23:54:22 -04:00
retVal=$?
if [[ $retVal -ne 0 ]]; then
echo "pacman pyenv dependencies installation error."
2025-04-08 23:54:22 -04:00
exit 1
fi
#--------------------------------------------------
# PostgreSQL (+ PostGIS) — Arch n'initialise pas le cluster automatiquement
#--------------------------------------------------
echo -e "\n---- Install PostgreSQL Server ----"
${PAC} postgresql
2025-04-08 23:54:22 -04:00
retVal=$?
if [[ $retVal -ne 0 ]]; then
echo "pacman postgresql installation error."
2025-04-08 23:54:22 -04:00
exit 1
fi
# Initialisation du cluster (chemin Arch : /var/lib/postgres/data).
if [ ! -f /var/lib/postgres/data/PG_VERSION ]; then
echo -e "\n---- Initialisation du cluster PostgreSQL ----"
sudo -u postgres initdb --locale=C.UTF-8 --encoding=UTF8 \
-D /var/lib/postgres/data || true
fi
sudo systemctl enable --now postgresql 2>/dev/null || true
# PostGIS : optionnel (géospatial), ne bloque pas.
${PAC} postgis || echo "PostGIS non installé (optionnel)."
2025-04-08 23:54:22 -04:00
echo -e "\n---- Creating the ERPLibre PostgreSQL User ----"
sudo su - postgres -c "createuser -s ${EL_USER}" 2>/dev/null || true
#--------------------------------------------------
# Dépendances Odoo / ERPLibre (extensions Python, bindings)
#--------------------------------------------------
echo -e "\n---- Installing arch dependency ----"
# best-effort paquet par paquet : pacman refuse TOUTE la transaction si UN
# seul nom est inconnu (pas de --skip-unavailable). Ces deps ne sont pas
# critiques pour le build Python -> on ne bloque pas sur un nom absent.
for _pkg in libxslt libzip libldap libsasl cmake parallel swig portaudio \
cups xmlsec freetds libev mariadb-libs shfmt; do
${PAC} "${_pkg}" || echo " ${_pkg} : non installé (optionnel), on continue."
done
# libldap_r : Odoo/python-ldap cherche parfois libldap_r.so (supprimé des
# versions récentes d'OpenLDAP) -> lien vers libldap.so.
sudo ln -fs /usr/lib/libldap.so /usr/lib/libldap_r.so 2>/dev/null || true
#--------------------------------------------------
# Node.js + npm (rtlcss, less)
#--------------------------------------------------
echo -e "\n---- Installing nodeJS NPM and rtlcss ----"
${PAC} nodejs npm
2025-04-08 23:54:22 -04:00
retVal=$?
if [[ $retVal -ne 0 ]]; then
echo "pacman nodejs installation error."
2025-04-08 23:54:22 -04:00
exit 1
fi
sudo npm install -g rtlcss less || echo "npm rtlcss/less: erreur (optionnel)."
2025-04-08 23:54:22 -04:00
echo -e "\n---- Test tool ----"
npm install || echo "npm install (prettier/plugin-xml): erreur (optionnel)."
2025-04-08 23:54:22 -04:00
# Pour erplibre_devops.
${PAC} sshpass || echo "sshpass non installé (optionnel)."
#--------------------------------------------------
# nginx (optionnel)
#--------------------------------------------------
if [ "${EL_INSTALL_NGINX}" = "True" ]; then
echo -e "\n---- Installing nginx ----"
${PAC} nginx || echo "nginx: erreur (optionnel)."
fi
#--------------------------------------------------
# wkhtmltopdf (optionnel) — uniquement dans l'AUR sur Arch (pas de paquet
# officiel). Sur une image cloud sans helper AUR, on saute proprement.
#--------------------------------------------------
if [ "${EL_INSTALL_WKHTMLTOPDF}" = "True" ]; then
if ! command -v wkhtmltopdf >/dev/null 2>&1; then
echo "wkhtmltopdf : disponible seulement via l'AUR sur Arch, ignoré"
echo " (installez-le manuellement avec un helper AUR si nécessaire)."
else
echo -e "\n---- Already installed wkhtml ----"
fi
fi
echo -e "\n---- Arch Linux dependency installation done ----"