[LUG.ro] Bash Script para la administración de paquetes

David Cortarello lugro@lugro.org.ar
4 Jan 2003 03:32:44 -0000


Bueno, los otros días terminé mi distribución de linux y la creé con ciertos criterios, 100% GNU, 100% Consola.
La misma posee una instalación en modo cliente, y además una instalación en modo servidor (este último modo posee pocos paquetes ya que no he tenido tiempo de compilar más).
El problema en mi distro surgió a la hora de desinstalar un paquete, ya que tenía que buscar archivo por arcvhivo del paquete que quisiera desinstalar a mano y borrarlo, cosa que vi que se hacía muy (por no decir extramadamente) pesado.
Entonces me decidí por hacer un sistema para poder instalar y desinstalar paquetes de mi distribución (son tar.gz, que contienen binarios, pero se puede cambiar la extensión si así se desea). Empecé por hacer un sistema solo para instalarlos y listar los paquetes disponibles, pero visto que lo que yo quería originariamente era desinstalarlos el script se amplió.
En tal sentido, ahora mi script permite:

Instalar los paquetes necesarios para el modo server.
Instalar los paquetes necesarios para el modo cliente.
Instalar un paquete que decida el usuario.
Listar los paquetes instalados.
Listar los paquetes sin instalar (pero disponibles para hacerlo)
Desinstalar los paquetes del modo server.
Desinstalar los paquetes del modo cliente.
Desinstalar un paquete en especial.

Ahora les muestro el bash script:

--------------------------Code--------------------------------


#/bin/bash

src=/tmp/extras

echo -e "Package installer Wizzard\n"

case "$1" in

	list)
		case "$2" in
			install)
					echo -e "Listing Server packages"
					for pkg in "$src"/server/*.tar.gz
						do
							basename "$pkg" .tar.gz
						done
					echo
					echo -e "Listing Client packages"
					for pkg in "$src"/client/*.tar.gz
						do
							basename "$pkg" .tar.gz
						done
					echo
			;;
			installed)
					echo -e "Listing installed Server packages"
					for pkg in /var/install/server/*
						do 
							basename "$pkg"
						done
					echo
               echo -e "Listing installed Client packages"
               for pkg in /var/install/client/*
						do
                    basename "$pkg"
                  done
              	echo
        	;;


			*)
		      echo -e "Use:"
		      echo -e "     kwort list install (to list the avaliable packages not installed)"
		      echo -e "     kwort list installed (to list the installed packages)"
		      echo -e "     kwort list (to see this help)"
		      echo
			;;
		esac
	;;

	install)
		case "$2" in
			server)
		      echo -e "Installing server packages"
		      cp $src/server/*.tar.gz /
		      cd /
		      for pkg in /*.tar.gz
		         do
		            echo -e  "Installing "; 
                  pkg1="/var/install/server/${pkg/.tar*/}"
                  pkg2="${pkg/.tar*/}"
						echo -e "$pkg2"
		            tar -xvpzf "$pkg" > "$pkg1"
		            rm -- "$pkg"
						cat "$pkg1" | sed "s/.*\/$//" | grep -v "^$" > "$pkg1"
					done
			;;
			client)
 		      echo -e "Installing client packages"
		      cp $src/client/*.tar.gz /
		      cd /
		      for pkg in /*.tar.gz
		         do
                  echo -e  "Installing ";
                  pkg1="/var/install/client/${pkg/.tar*/}"
						pkg2="${pkg/.tar*/}"
						echo -e "$pkg2"
                  tar -xvpzf "$pkg" > "$pkg1"
                  rm -- "$pkg"
                  cat "$pkg1" | sed "s/.*\/$//" | grep -v "^$" > "$pkg1"
		         done
			;;
			*)
				if [ -e "$src/client/$2.tar.gz" ]
					then
						echo -e "Installing $2...";
						cp $src/client/$2.tar.gz /
						cd /
						tar -xvpzf "$2.tar.gz" > "/var/install/client/$2"
						rm -- "/$2.tar.gz"
						cat "/var/install/client/$2" | sed "s/.*\/$//" | grep -v "^$" > "/var/install/client/$2"
					elif [ -e "$src/server/$2.tar.gz" ]
	               then
	                  echo -e "Installing $2...";
	                  cp $src/server/$2.tar.gz /
	                  cd /
	                  tar -xvpzf "$2.tar.gz" > "/var/install/server/$2"
	                  rm -- "/$2.tar.gz"
	                  cat "/var/install/server/$2" | sed "s/.*\/$//" | grep -v "^$" > "/var/install/server/$2"
					else
						echo -e "There isn't binary for $2";
				fi
			;;
		esac
		;;
	uninstall)
			case "$2" in
				server)
					for pkg in `ls /var/install/server/`
						do
							for x in `cat /var/install/server/${pkg}`
								do 
									if [ -e "/$x" ]
										then
											rm -f "/$x"
											echo -e "Package $x uninstalled."
									fi
								done
							rm -f "/var/install/server/$pkg"
						done
					echo -e "All packages for server uninstalled" 
				;;
				client)
               for pkg in `ls /var/install/client/`
                  do
                     for x in `cat /var/install/client/${pkg}`
                        do
                           if [ -e "/$x" ]
                              then
                                 rm -f "/$x"
                                 echo -e "Package $x uninstalled."
                           fi
                        done
                     rm -f "/var/install/client/$pkg"
                  done
               echo -e "All packages for client uninstalled"
				;;
				*)
					if [ -e "/var/install/client/$2" ]
						then
							for x in `cat /var/install/client/${2}`
            	   	  do
              		    	  rm -f "/$x"
							  done
							rm -f "/var/install/client/${2}"
							echo -e "Package $2 uninstalled."
					elif [ -e "/var/install/server/$2" ]
						then
							for x in `cat /var/install/client/${2}`
        	      	     do
        	   	           rm -f "/$x"
        		           done
 		               rm -f "/var/install/client/${2}"
	                  echo -e "Package $2 uninstalled."
					else
						echo -e "$2 isn't installed."
					fi
				;;
			esac
		;;
	*)
		echo -e "Use:"
		echo -e "     kwort install \"package\" (to install a specific packages, see list)"
		echo -e "     kwort install server (to install all the packages for server)"
		echo -e "     kwort install client (to install all tha packages for client)"
		echo -e "     kwort list install (to list the avaliable packages not installed)"
		echo -e "     kwort list installed (to list the installed packages)"
		echo -e "     kwort list (to see the list help)"
		echo -e "     kwort uninstall server (to uninstall all the packages for server)"
      echo -e "     kwort uninstall client (to uninstall all the packages for client, obsolete)"
      echo -e "     kwort uninstall \"package\" (to uninstall a specific package)"
	;;

esac


-------------------------End of Code---------------------------

Linux Registered User #291604
Gnu Is Alive!