[dwm] script d'installation pour compilation dans le home utilisateur (résolu)

Mise à jour / Création /debug de paquetages
bobo
Elfe
Messages : 593
Inscription : mar. 08 avr. 2014, 22:47

[dwm] script d'installation pour compilation dans le home utilisateur (résolu)

Message par bobo »

Voici une proposition de script bash d'installation de dwm, personnalisée selon l'utilisateur. Je l'ai réalisé en suite à la discussion suivante :
[dwm] PKGBUILD autorisant la config personnalisée (résolu)

Le script :
— crée un répertoire /home/$USER/.config/$PROGNAME
— y télécharge les sources
— intègre le nécessaire pour appliquer des patches
— vérifie que le binaire est bien installé dans /home/$USER/bin
— vérifie que /home/$USER/bin est bien dans le $PATH de l'utilisateur
— fait la promotion de la configuration via config.h et application de patches

Voici le code :

Code : Tout sélectionner

#!/bin/bash

### Soft settings
SOFT="dwm"
VERSION="6.1"

### Collection of OS dependent paths
X11INC=/usr/include/X11
X11LIB=/usr/lib/X11
FREETYPEINC=/usr/include/freetype2

####################################################################
## Initialization

if [ $USER == "root" ]; then
	echo "Current User == $USER"
	echo "This script should be run as simple user"
	exit 1
fi

## Creation of relevant directory tree
mkdir -p /home/$USER/bin
PROGNAME=$(basename $0)
CONFIGDIR=/home/$USER/.config/$PROGNAME
mkdir -p $CONFIGDIR/patchs/sources
cd $CONFIGDIR

####################################################################
## Download and compilation

## Download sources
if [ ! -f $SOFT-$VERSION.tar.gz ]; then
	wget http://git.suckless.org/$SOFT/snapshot/$SOFT-$VERSION.tar.gz
fi

## Untar des sources
rm -rf $SOFT-$VERSION
tar xvfz $SOFT-$VERSION.tar.gz

## Patching
cd $SOFT-*
for patch in `\ls $CONFIGDIR/patchs/*.diff`
do
	echo "===> $patch <==="
	patch -p1 -l < $patch
done

## Personal config
if [ -f $CONFIGDIR/config.h ]; then
	cp $CONFIGDIR/config.h config.h
fi

## Compilation
echo "====     MAKE     ===="
make X11INC=$X11INC X11LIB=$X11LIB FREETYPEINC=$FREETYPEINC
cp $SOFT /home/$USER/bin

####################################################################
## Final checks

echo "==== FINAL CHECKS ===="

## check presence of /home/$USER/bin/$SOFT
if [ ! -f /home/$USER/bin/$SOFT ]; then
	echo "ERROR: /home/$USER/bin/$SOFT cannot be found, please check compilation log"
else
	echo "OK: /home/$USER/bin/$SOFT exists"
fi

## check $PATH contains /home/$USER/bin 
case $(echo :$PATH: | grep -c /home/$USER/bin) in
	0)
		echo "WARNING: /home/$USER/bin not in \$PATH"
		;;
	1)
		echo "OK: /home/$USER/bin found in \$PATH"
		;;
	*)
		echo "WARNING : /home/$USER/bin found more than once in \$PATH, something probably dirty"
		echo "please run 'echo \$PATH' and check what's wrong"
		;;
esac

## check $SOFT path
if [ $(which $SOFT) == "/home/$USER/bin/$SOFT" ]; then
	echo "SUCCESS : $SOFT successfully installed at $(which $SOFT)"
else
	echo "FAIL : $SOFT not installed correctly
	 - check whether /home/$USER/bin is in your \$PATH
	 - check whether /home/$USER/bin/dwm exists"
	exit 1
fi

## check personal config.h for config advertisement
if [ ! -f $CONFIGDIR/config.h ]; then
	cp config.def.h ../config.h
	echo " 
== Note : personal config.h has been created : copy from $pwd/config.def.h
	Feel free to customize your config and re-run $PROGNAME
	To be edited $CONFIGDIR/config.h"
fi

## check patch usage for config advertisement
if [ $(\ls $CONFIGDIR/patchs | grep -e "\.diff$" | wc -l) == 0 ]; then
	echo "
== Note: patches could be added as .diff files in patchs to change $SOFT behavior
	Please find community patches at http://dwm.suckless.org/patches/
	Downloaded patches should be placed in $CONFIGDIR/patchs/sources
	Links to them should be found in $CONFIGDIR/patchs/*.diff
	(use 'ln -s' to create symbolic links)
	Order of .diff links names could influence the success of the patching steps
"
fi

## check current directory and advertise the configdir
if [ $(pwd | grep -e "^$CONFIGDIR" | wc -l) ]; then
	echo "
== Note: $SOFT configuration possible editing files in $CONFIGDIR
	- modify your $CONFIGDIR/config.h
	- add .diff patchs in $CONFIGDIR/patchs
	Please find community patches at http://dwm.suckless.org/patches/"
fi
Qu'en pensez-vous ?
Dernière modification par bobo le dim. 17 janv. 2016, 22:01, modifié 1 fois.
dwm — BÉPO — vim — “more is less !”
bobo
Elfe
Messages : 593
Inscription : mar. 08 avr. 2014, 22:47

Re: [dwm] script d'installation pour compilation dans le home utilisateur

Message par bobo »

Lorsqu'on aura regardé ça, et une fois qu'on aura résolu les soucis, je pourrais fournir le script dans un paquet AUR.


Édition :
Je suis peut-être un peu léger sur la programmation en bash : notamment tout ce qui est options, arguments… Il y a peut-être moyen de faire plus élégant que les enfilements de | pour les vérifications finales.

Les améliorations auxquelles je pense :
– une option -h|--help à ajouter
– il faudrait peut-être ajouter le n° de version pour faire du .config propre
– à l'heure actuelle tout tient dans le script, peut-être mettre les notes de fin dans des READMEs séparés dans /usr/share/doc
– à terme tenter une interface ncurses de configuration
– à terme, faire un dépôt git des patches supportés (j'ai dû modifié 2 des 5 patches que j'utilise pour que patch puisse faire son job), et faire en sorte qu'ils soient appliqués dans le bon ordre, sans que l'utilisateur ait à trop se faire chier

Il y a peut-être un truc à faire pour qu'il soit possible de lancer les sessions là-dessus avec un gestionnaire de connexion : gdm, lightdm, etc…
dwm — BÉPO — vim — “more is less !”
Avatar de l’utilisateur
HS-157
Hankyu
Messages : 46
Inscription : ven. 22 mai 2015, 06:52

Re: [dwm] script d'installation pour compilation dans le home utilisateur

Message par HS-157 »

bobo a écrit :— crée un répertoire /home/$USER/.config/$PROGNAME
Utilise la variable $HOME, plutôt que /home/$USER,
On sait jamais, peut-être la personne n'a pas mit son home dans /home
bobo
Elfe
Messages : 593
Inscription : mar. 08 avr. 2014, 22:47

Re: [dwm] script d'installation pour compilation dans le home utilisateur

Message par bobo »

Merci. Je me suis rendu compte de ça également.

Du coup j'ai bien avancé sur mon affaire. J'ai même publié ça sur framagit :
https://git.framasoft.org/bobo/dwm-custom

Voici les changements apportés à script depuis sa publication ici :
- usage généralisé de "grep -c"
- Check de .xinitrc
- Suppression de la vérification du $PATH
- /home/$USER changer en $HOME
- les cp remplacés par \cp, toutes les commandes backslashées pour éviter les aliases
- compilation dans /tmp
- meilleurs checks de l'installation du binaire
- read pour ajouter le config.h => s'assurer de la lecture de l'utilisateur
- changements des checks pour afficher les aides
- refonte de l'arborescence patches pour simplifier l'arborescence dossier
- ajout de la version dans l'arborescence .config
- README dans /usr/share/doc
trouver un moyen pour interpréter les variables
- ajout de la fonction doc_display => pour afficher des trucs et astuces de configuration
- ajout de la fonction check_error_code => pour afficher des trucs de résolution de problème
- Meilleur check de .xinitrc (notamment avec check_initrc)

J'ai aussi réussi à créer un .desktop qui permette de lancer le dwm customisé depuis le $HOME/bin/dwm. Merci le paquet xinit-xsession pour l'idée (et openbox aussi) !

À ce stade, j'ai un PKGBUILD viable ici : https://git.framasoft.org/bobo/dwm-cust ... r/PKGBUILD

Il n'y a plus qu'à publier sur AUR…
dwm — BÉPO — vim — “more is less !”
bobo
Elfe
Messages : 593
Inscription : mar. 08 avr. 2014, 22:47

Re: [dwm] script d'installation pour compilation dans le home utilisateur (résolu)

Message par bobo »

Ça y est c'est publié sur AUR :
https://aur.archlinux.org/packages/dwm-custom
dwm — BÉPO — vim — “more is less !”
Répondre