#! /usr/bin/awk -f # _ _ _ # _ __ | | ____ _ __ _ ___| |_ __ ___ _| | __ # | '_ \| |/ / _` |___ / _` |/ _ \ __| / _` \ \ /\ / / |/ / # | |_) | < (_| |___| (_| | __/ |_ _ | (_| |\ V V /| < # | .__/|_|\_\__, | \__, |\___|\__| (_) \__,_| \_/\_/ |_|\_\ # |_| |___/ |___/ # # A binary package management utility function configs( a, i, k, n, old_FS) { n=split(ENVIRON["_"],a,"/") NPKG = a[n] VERSION = "0.3.1" DATE = "20110108" # defauts CONF = "/etc/pkg-get.conf" DB = "/var/lib/pkg/db" LOCKER = "/var/lib/pkg/pkg-get.locker" PRE = "n" POST = "n" PKGDIR[0] = "/srv/NuTyX/release/" WEBDIR[0] = "http://nutyx.meticul.eu/attapu/i686/release/" # arguments OPER=(ARGC>1) ? ARGV[1] : "" PKG =(ARGC>2) ? ARGV[2] : "" for (i=2; i0) print } } } function dsearch( old_FS, j, FILE) { old_FS = FS FS="[:#]" for (j=0; j0) { if (index($1,ARGV[2]) || index($5,ARGV[2])) print $1 } } close(FILE) FS = old_FS } function help() { version() print "\033[1;33m" _"Usage:" "\033[1;0m" print " " NPKG " current - " _"affiche la version installée de " print " " NPKG " dependent - " _"affiche la liste des paquets dépendants de " print " " NPKG " depends - " _"affiche la liste des dépendances de " print " " NPKG " depinst - " _"installe et ses(leurs) dépendances" print " " NPKG " diff - " _"affiche la liste des paquets obsolètes" print " " NPKG " dsearch - " _"cherche les paquets dont le nom/la description contient " print " " NPKG " help - " _"affiche cette aide" print " " NPKG " info - " _"affiche les informations concernant " print " " NPKG " isinst - " _"affiche si est installé" print " " NPKG " install - " _"installe " print " " NPKG " list - " _"affiche la liste des paquets disponibles dans les dépôts" print " " NPKG " listinst - " _"affiche la liste des paquets installés" print " " NPKG " listlocked - " _"affiche la liste des paquets verrouillés" print " " NPKG " lock - " _"verrouille (empêche la mise à jour)" print " " NPKG " path - " _"affiche le répertoire d'installtion de " print " " NPKG " quickdep - " _"affiche la liste abrégée des dépendances de " print " " NPKG " quickdiff - " _"affiche la liste abrégée des paquets obsolètes" print " " NPKG " readme - " _"affiche les informations README de si existantes" print " " NPKG " search - " _"cherche les paquets dont le nom contient " print " " NPKG " sync - " _"synchronise avec le dépôt" print " " NPKG " sysup - " _"met à jour les paquets obsolètes, télécharge si nécessaire" print " " NPKG " unlock - " _"déverrouille (permet la mise à jour)" print " " NPKG " update - " _"met à jour , télécharge si nécessaire" print " " NPKG " version - " _"affiche la version de ce script" print "\033[1;33m" _"Exemple:" "\033[1;0m" print " " NPKG " depends k3b" } function info( a, b, c, cmd, g, gline, n, rline, out) { load_REPO() cmd = "grep ^" PKG " " tb_PKGDIR[PKG] REPO cmd | getline rline if (rline) { close(cmd) split (rline, a, ":") split (a[1], b, "#") print _"Nom " " : " PKG cmd = "grep " PKG " " tb_PKGDIR[PKG] GRP " 2>&1" cmd | getline gline close(cmd) split (gline, g, ":") if (g[1]=="grep") print _"Groupe" " : " else print _"Groupe" " : " g[1] split(b[2], c, "-") print "Version" " : " c[1] sub(".pkg.tar.xz","",c[2]) print "Release" " : " c[2] print "Description" " : " a[4] print "URL" " : " tb_WEBDIR[PKG] a[1] print "Md5sum" " : " a[3] print _"Taille" " : " a[2] load_DEPS() print _"Dépend de " " : " tb_DEPS[PKG] out="" if (tb_PRE[PKG]=="yes") out = out "pre-install " if (tb_POST[PKG]=="yes") out = out "post-install " if (tb_READ[PKG]=="yes") out = out "readme" print _"Fichiers" " : " out } else print _"Paquet" " '" PKG "' " _"non trouvé" } function install( i) { verif_if_root() load_REPO() for (i=1; i<=nPKG; i++) { install2(tb_PKG[i], " ") } } function install2(Pkg, Oper, cmd, i, pak) { pak=Pkg"#"tb_REPO[Pkg] ".pkg.tar.xz" download(pak) if ("-do" in tb_OPT) return if (PRE=="y" && tb_PRE[Pkg]=="yes") { # pre-install cmd = "/bin/bash " tb_PKGDIR[Pkg] "/PKGINST " Pkg "_pre_install" if ("--dry" in tb_OPT) { print "\033[1;33m" cmd "\033[1;0m" } else { while ((cmd | getline) >0) print close(cmd) } } cmd = "pkgadd " AARGS " " Oper " " tb_PKGDIR[Pkg] pak # Oper==" " : insert ; Oper=="-u" : update if ("--dry" in tb_OPT) { print "\033[1;37m" cmd "\033[1;0m" } else { while ((cmd | getline) >0) print close(cmd) } if (POST=="y" && tb_POST[Pkg]=="yes") { # post-install cmd = "/bin/bash " tb_PKGDIR[Pkg] "/PKGINST " Pkg "_post_install" if ("--dry" in tb_OPT) { print "\033[1;33m" cmd "\033[1;0m" } else { while ((cmd | getline) >0) print close(cmd) } } } function isinst() { load_DB() if (PKG in tb_DB) print _"Le paquet" " " PKG " " _"est installé" else print _"Le paquet" " " PKG " " _"n'est pas installé" } function list( old_FS, FILE, j, prev) { old_FS = FS FS="#" for (j=0; j0) { if ($1 != prev) { print $1 prev = $1 } } close(FILE) } FS = old_FS } function listinst( old_FS, old_RS, fl) { # if (PROCINFO["version"]) { # gawk old_FS = FS; FS = "\t" old_RS = RS; RS = "" while (getline < DB) print $1 close(DB) FS = old_FS RS = old_RS # } else { # awka # while (getline < DB) { # if (fl==0) # print $1 # fl++ # if (NF==0) # fl=0 # } # close(DB) # } } function listlocked() { while (getline < LOCKER) print $1 close(LOCKER) } function load_DB( old_FS, old_RS, fl, pak) { # if (PROCINFO["version"]) { # gawk old_FS=FS; FS="\n" old_RS=RS; RS="" while (getline < DB) tb_DB[$1]=$2 close(DB) FS=old_FS RS=old_RS # } else { # awka # while (getline < DB) { # if (fl==1) # tb_DB[pak]=$1 # if (fl==0) # pak=$1 # fl++ # if (NF==0) # fl=0 # } # close(DB) # } } function load_DEPS( j, FILE) { for (j=0; j0) { if (!($1 in tb_DEPS)) { tb_DEPS[$1] = $3 tb_DEP_TRT[$1] = 0 tb_DEP_DIR[$1] = PKGDIR[j] } } close(FILE) } } function load_LOCKER() { while (getline < LOCKER) tb_LOCK[$1] = 1 close(LOCKER) } function load_RDEPS( a, FILE, i, j, n) { for (j=0; j0) { n=split($3, a, ",") for (i=1; i<=n; i++) { tb_RDEPS[a[i]] = (a[i] in tb_RDEPS) ? tb_RDEPS[a[i]] "," $1 : $1 } } close(FILE) } } function load_REPO( FILE, j, old_FS) { old_FS = FS FS="[:#]" for (j=0; j>LOCKER } close(LOCKER) } function path( a, cmd, j) { load_REPO() if (!PKG) print NPKG ": 'path' " _"demande un argument" else print tb_PKGDIR[PKG] } function printff() { print _"Désolé, fonction" " " OPER " " _"indisponible" "..." exit 1 } function quickdep() { load_DB() load_DEPS() load_REPO() quickdep2(PKG) printf ("%s\n",PKG) } function quickdep2(Pkg, a, i, n) { n=split(tb_DEPS[Pkg],a,",") for (i=1; i<=n; i++) { if (tb_DEP_TRT[a[i]]==0) { tb_DEP_TRT[a[i]]++ if (a[i] in tb_DEPS) quickdep2(a[i]) printf("%s ", a[i]) } } } function quickdiff(Dest, a, i, n, pak) { load_DB() load_LOCKER() load_REPO() for (pak in tb_DB) a[pak]=pak n=asort(a) delete tb_PKG nPKG=0 for (i=1;i<=n;i++) { pak=a[i] if ((pak in tb_REPO) && (!(pak in tb_LOCK)) && (tb_DB[pak]!=tb_REPO[pak])) { if (Dest=="tb") tb_PKG[++nPKG] = pak else printf("%s ", pak) } } printf("\n") } function quickhelp() { print "\033[1;33m" _"Usage" "\033[1;0m: " NPKG " command [package2 ... packageN] [options]" print "\033[1;33m" _"Quelques commandes" "\033[1;0m:" print " sync " _"synchronise avec le dépôt" print " depinst " _"installe package(s) et ses(leurs) dépendances" print " info " _"informations concernant le package" print " sysup " _"met à jour les paquets obsolètes" print " diff " _"affiche la liste des paquets obsolètes" print "\033[1;33m" _"Quelques options:" "\033[1;0m" print " -do " _"télécharge seulement" print " --install-scripts " _"utilise les scripts install" print " -r " _"utilise" " " _"pour" " pkgadd" print "\033[1;33m" _"Examples" "\033[1;0m:" print " " NPKG " install sqlite pysqlite" print " " NPKG " help" print _"Pour d'autres commandes et examples, voir la page de manuel" } function readme( fl, j, FILE) { for (j=0; j0) { if (fl==1) { if (index($0,"##### PKGREADME: ")) exit print $0 } if (index($0,"##### PKGREADME: "PKG)) fl=1 } close(FILE) } } function search( j, FILE, old_FS) { old_FS = FS FS="[:#]" for (j=0; j0) { if (index($1,ARGV[2])) print $1 } close(FILE) } FS = old_FS } function sync( cmd, i, j, pak) { verif_if_root() pak[1]="PKGREPO" pak[2]="PKGDEPS" pak[3]="PKGREAD" pak[4]="PKGINST" pak[5]="PKGGRP" for (j=0; j "") { for (i=1; i<=4; i++) { cmd="wget -O "PKGDIR[j] pak[i] " " WEBDIR[j] pak[i] if ("--dry" in tb_OPT) { print "\033[1;34m" cmd "\033[1;0m" } else { while ((cmd | getline) >0) print close(cmd) } } } } } function sysup( i) { quickdiff("tb") update() } function unlock( i, n, fl, tb_LCK) { verif_if_root() while (getline < LOCKER) { fl="y" for (i=1; i<=nPKG; i++) if ($1==tb_PKG[i]) fl = "n" if (fl=="y") tb_LCK[++n] = $1 } close(LOCKER) printf("") > LOCKER for (i=1; i<=n; i++) print tb_LCK[i] >> LOCKER close(LOCKER) } function update( i) { verif_if_root() load_LOCKER() load_REPO() for (i=1; i<=nPKG; i++) { if (!(tb_PKG[i] in tb_LOCK)) { print _"paquet à mettre à jour:" " " tb_PKG[i] install2(tb_PKG[i], "-u") } } } function verif_if_root( cmd) { if (!("--dry" in tb_OPT)) { cmd="whoami" cmd | getline if ($1 !="root") { print "\033[1;31m" _"Veuillez exécuter ce programme en tant que root !" "\033[1;0m" exit 1 } close(cmd) } } function version() { print NPKG " " VERSION " (" DATE ")" } function wrongparm() { version() print _"Paramètre" " '" OPER "' " _"erroné" exit 1 } #------------------------------------------------ # # M A I N # #------------------------------------------------ BEGIN { configs() if (OPER=="") quickhelp() else if (OPER=="current") current() else if (OPER=="dependent") dependent() else if (OPER=="depends") depends() else if (OPER=="depinst") rc=depinst() else if (OPER=="diff") diff() else if (OPER=="dsearch") dsearch() else if (OPER=="help") help() else if (OPER=="info") info() else if (OPER=="install") install() else if (OPER=="isinst") isinst() else if (OPER=="list") list() else if (OPER=="listinst") listinst() else if (OPER=="listlocked") listlocked() else if (OPER=="lock") lock() else if (OPER=="path") path() else if (OPER=="printf") printff() else if (OPER=="quickdep") quickdep() else if (OPER=="quickdiff") quickdiff() else if (OPER=="readme") readme() else if (OPER=="search") search() else if (OPER=="sync") sync() else if (OPER=="sysup") sysup() else if (OPER=="unlock") unlock() else if (OPER=="update") update() else if (OPER=="version") version() else wrongparm() exit }