From 5e5c2d317d9afe7327a75a6c35099510e1f8bb9c Mon Sep 17 00:00:00 2001 From: tnut Date: Sun, 27 Mar 2011 15:49:30 +0200 Subject: pkg-get, remplacé par pkg-get-awk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base/pkg-get/pkg-get.awk | 829 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 829 insertions(+) create mode 100755 base/pkg-get/pkg-get.awk (limited to 'base/pkg-get/pkg-get.awk') diff --git a/base/pkg-get/pkg-get.awk b/base/pkg-get/pkg-get.awk new file mode 100755 index 000000000..d8e526a80 --- /dev/null +++ b/base/pkg-get/pkg-get.awk @@ -0,0 +1,829 @@ +#! /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.2" + DATE = "2011-03-11" + + # defauts + CONF = "/etc/pkg-get.conf" + VERSFILE = "/var/lib/pkg/nutyx-version" + DB = "/var/lib/pkg/db" + LOCKER = "/var/lib/pkg/pkg-get.locker" + PRE = "n" + POST = "n" + PKGDIR[0] = "/srv/NuTyX/release/" + load_NUTYX_VERSION() + "uname -p " | getline ENV; close("uname -p") + WEBDIR[0] = "http://nutyx.meticul.eu/" NUTYX_VERSION "/" ENV "/release/" + + # arguments + OPER=(ARGC>1) ? ARGV[1] : "" + PKG =(ARGC>2) ? ARGV[2] : "" + for (i=2; i0) { + print "ERREUR", rc + exit 1 + } + if (!("-im" in tb_OPT)) + verif_md5sum(tb_PKGDIR[a[1]], pak) + } + } +} + + +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() + if (!(PKG in tb_REPO)) { + print _"Paquet" " " _"indisponible" ": "PKG + exit 1 + } + load_DB() + for (i=1; i<=nPKG; i++) { + if (tb_PKG[i] in tb_DB) + print _"Le paquet" " " tb_PKG[i] " " _"est déjà installé" + else + install2_update2(tb_PKG[i], " ") + } +} + + +function install2_update2(Pkg, Oper, cmd, i, pak) +{ + if (!(Pkg in tb_REPO)) { + print "\033[1;31m" _"Paquet" " " Pkg " " _"indisponible" "\033[1;0m" + return + } + if (tb_REPO[Pkg] != "" ) { + pak=Pkg"#"tb_REPO[Pkg] ".pkg.tar.xz" + download(pak) + } + if ("-do" in tb_OPT) + return + print _"Installation de" " " Pkg + 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) + } + + tb_DB[Pkg]=tb_REPO[Pkg] + + 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) +{ + old_FS = FS; FS = "\t" + old_RS = RS; RS = "" + while (getline < DB) + print $1 + close(DB) + FS = old_FS + RS = old_RS +} + + +function listlocked() +{ + while (getline < LOCKER) + print $1 + close(LOCKER) +} + + +function load_DB( old_FS, old_RS, fl, pak) +{ + old_FS=FS; FS="\n" + old_RS=RS; RS="" + while (getline < DB) + tb_DB[$1]=$2 + close(DB) + FS=old_FS + RS=old_RS +} + + +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_NUTYX_VERSION( old_FS) +{ + old_FS = FS + FS = "-" + getline < VERSFILE + if ($1=="2010") NUTYX_VERSION = "attapu" + else if ($1=="2011") NUTYX_VERSION = "pakxe" + close(VERSFILE) + FS = old_FS +} + + +function load_RDEPS( a, FILE, i, j, n) +{ + for (j=0; j0) { + n=split($3, a, ",") + for (i=1; i<=n; i++) { + if (a[i] in tb_RDEPS) { + if (!index(tb_RDEPS[a[i]],$1)) + tb_RDEPS[a[i]] = tb_RDEPS[a[i]] "," $1 + } else { + tb_RDEPS[a[i]] = $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, rc) +{ + 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 -q -O "PKGDIR[j] pak[i] " " WEBDIR[j] pak[i] + if ("--dry" in tb_OPT) { + print "\033[1;34m" cmd "\033[1;0m" + } else { + rc=system(cmd) + if (rc>0) { + print "ERREUR", rc + exit 1 + } + } + } + } + } +} + + +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, pak) +{ + verif_if_root() + load_LOCKER() + load_REPO() + load_DB() + for (i=1; i<=nPKG; i++) { + pak = tb_PKG[i] + if (pak in tb_LOCK) + print pak ": " _"paquet verouillé !" + else + if (!(pak in tb_DB)) + print pak ": " _"pas de mise à jour d'un paquet non installé !" + else + if (tb_DB[pak]==tb_REPO[pak]) + print pak ": " _"paquet déjà à la dernière version" + else { + print _"paquet à mettre à jour:" " " pak + install2_update2(pak, "-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 verif_md5sum(dir, pk, cmd, md5, a, rep) +{ + cmd="md5sum " dir pk + cmd | getline + split($0,md5," ") + close(cmd) + split(pk,a,"#") + if (md5[1]!=tb_MD5[a[1]]) { + print "-------> " _"ERREUR" ": " _"md5sum erroné pour " a[1] + print _"requis" ": " tb_MD5[a[1]] + print _"trouvé" ": " md5[1] + print "Supprimer " dir pk " ?" + getline rep + if (rep=="y") { + cmd = "rm " dir pk + while ((cmd | getline) > 0) + print + close(cmd) + } + exit 1 + } +} + + +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 +} -- cgit v1.2.3-70-g09d2