#!/bin/bash # GPL License # Written by Anbreizh & yeKcim, slightly modified by jd # ################################################# # What is EasyDPKG? # A script providing a GUI to simplify dpkg -i usage (rpm/deb package installation) ################################################# # Authors : # - Anbreizh jbtheou@gmail.com # - yeKcim yeknan@yahoo.fr http://yeknan.free.fr # - jd jd@typhon.org http://rubyfr.org # # Licence : GNU GPL # # Dependencies: # - apt-get # - dpkg # - alien # - zenity # # History: # - not for the moment... # # New features to be added: # - Lock file for Synaptic # # Install: # Put this file on: ~/.gnome2/nautilus-scripts/ # Make the file executable: chmod u+x ~/.gnome2/nautilus-scripts/easydpkg2 # Variables config=`cat $HOME/.easydpkg2/conf` rpmpkglist=`ls $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS | grep "rpm"` debpkglist=`ls $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS | grep "deb"` version="2.03" ################################################# # TRANSLATIONS ###### Default: English ##### title="EasyDPKG "$version"" warning="Warning!" conversion="Conversion in progress..." install="Install in progress..." installok="Successfully installed package(s)!" installko="Install failed." alien="Alien" dpackg="Dpkg" doyouwantusealien="Do you want to install selected rpm packages (using Alien, which may failed)?" update="Update" updatepkg="Packages list updating..." updatepkgsummary=" installed - updating package list..." noselec="No file selected." userpasswd="Please enter your password." # First use conf with_dependencies="Install packages with their dependencies" create_repos="Create a local repository" without_dependencies="Install packages without their dependencies" simple_dpkg="Simple dpkg" do_memorize="Store my install preferences for the next time" memorize="Memorize" ######## Translations ######## case $LANG in # Français fr* ) title="EasyDPKG "$version"" warning="Attention" conversion="Conversion en cours..." install="Installation en cours..." installok="Installation réussie !" installko="L'installation a echouée !" alien="Alien" dpackg="Dpkg" doyouwantusealien="Voulez-vous installer les rpm choisis (avec Alien - cette méthode peut parfois poser problème) ?" update="Mise à jour" updatepkg="Mise à jour de la liste des paquets ....." updatepkgsummary=" installé. Mise à jour de la liste des paquets..." noselec="Aucun fichier sélectionné." userpasswd="Veuillez entrer votre mot de passe." # Première utilisation with_dependencies="Installer mes paquets avec la gestion des dépendances" create_repos="Créer un dépôt local" without_dependencies="Installer mes paquets sans la gestion des dépendances" simple_dpkg="Dpkg simple" do_memorize="Mémoriser mes choix d'installation pour les utilisations ultérieures" memorize="Mémoriser" esac ############################################## # FUNCTIONS / FONCTIONS # conversion: convert any selected RPM package # conversion : conversion de tout paquet RPM sélectionné function conversion { [ -d $HOME/.easydpkg2/temp ] || mkdir $HOME/.easydpkg2/temp cp -f $rpmpkglist $HOME/.easydpkg2/temp cd $HOME/.easydpkg2/temp if sudo alien -d *.* | zenity --progress --pulsate --auto-close --title "$alien" --text "$conversion" ; then zenity --info --title "$alien" --text "$installok" else zenity --error --title "$alien" --text "$installko" fi sudo rm -fR $HOME/.easydpkg2/temp } # debpackages: install any selected DEB package # debpackages : installe tout paquet DEB sélectionné function debpackages { if sudo dpkg -i $debpkglist | zenity --progress --pulsate --auto-close --title "$dpackg" --text "$conversion" ; then zenity --info --title "$dpackg" --text "$installok" else zenity --error --title "$dpackg" --text "$installko" fi } # analyze: determine selected package(s) name and types # analyze : détermine le nom et le type du (des) paquet(s) sélectionné(s) function analyze { if $rpmpkglist ; then if zenity --question --title "$alien" --text "$doyouwantusealien" ; then if test $rpmpkglist = $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS ; then conversion else conversion debpackages fi else debpackages fi fi } # localrepos: create a temporary repository to install any package and any dependency. # localrepos : crée un dépôt temporaire pour installer tout paquet et toute dépendance. function localrepos { [ -d $HOME/.easydpkg2/tmprepos ] || mkdir $HOME/.easydpkg2/tmprepos cp -f $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS $HOME/.easydpkg2/tmprepos cd $HOME/.easydpkg2/tmprepos # sort the selected packages tree and create a local available-packages list dpkg-scanpackages . /dev/null | gzip - > Packages.gz # add this local list in apt-get respositories list sudo cp -f /etc/apt/sources.list /etc/apt/sources.list_backup sudo chown $USER /etc/apt/sources.list echo "deb file://$HOME/.easydpkg2/tmprepos ./" > /etc/apt/sources.list sudo chown root /etc/apt/sources.list sudo apt-get update | zenity --progress --pulsate --auto-close --title "$update" --text "$updatepkg" dpkg-scanpackages ./ /dev/null > $HOME/.easydpkg2/easypackage_log.txt cat $HOME/.easydpkg2/easypackage_log.txt | grep "Package" > $HOME/.easydpkg2/easypackage_log2.txt processing=`sed "s/Package: //g" $HOME/.easydpkg2/easypackage_log2.txt` echo $processing sudo apt-get --assume-yes --force-yes install $processing | zenity --progress --pulsate --auto-close --title "$dpackg" --text "$install" sudo apt-get update | zenity --progress --pulsate --auto-close --title "$update" --text "$processing $updatepkgsummary" zenity --info --title "$title" --text "$installok" # Restore previous apt-get repositories list sudo cp -f /etc/apt/sources.list_backup /etc/apt/sources.list } # main: let the user tell which method EasyPackage must use to install selected package(s) # main : demande à l'utilisateur la méthode à utiliser pour installer le ou les paquets sélectionné(s) function main { # check whether at least one file has been selected # FIX: should check whether it is a deb/rpm package! if [ -n "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" ]; then foo=`gksudo -u root -k -m\ "entrez votre mot de passe afin de lancer le script en tant que root"\ /bin/echo "got r00t?"` # should it be the first time one uses the script or the config have been deleted, we need to set up EasyDPKG if test -e $HOME/.easydpkg2/conf ; then $config else # FIX: should use a set of combo box so the user must chose either install with *or* without dependencies choix=`zenity --list --checklist --width=550 --height=250 \ --title "Easy DPKG 2" \ --column="" --column $"Choix" --column $"Description" \ TRUE $"$create_repos" $"$with_dependencies" \ FALSE $"$simple_dpkg" $"$without_dependencies" \ TRUE $"$memorize" $"$do_memorize"` # FIX: wha gruik-way x_x redundant stuff here if echo "$choix" | grep $"$create_repos" ; then localrepos fi if echo "$choix" | grep $"$simple_dpkg" ; then analyze fi if echo "$choix" | grep $"$memorize" ; then if echo "$choix" | grep $"$create_repos" ; then echo localrepos > $HOME/.easydpkg2/conf fi if echo "$choix" | grep $"$simple_dpkg" ; then echo analyze > $HOME/.easydpkg2/conf fi fi fi else # No file has been selected... zenity --error --title="$warning" --text="$noselec" exit 1 fi } ################################################# # PROGRAMM / PROGRAMME [ -d $HOME/.easydpkg2/ ] || mkdir $HOME/.easydpkg2/ main