blob: 724d2d9e2f1372fae799aec6bf3ab431189f25fc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
#!/bin/sh
#// repacman.sh
#// (c) 2008 - gyo <gyo_at_archlinux_dot_fr>
#// license : GPL
#// description : utilitaire permettant de reconstruire le paquet d'origine d'un paquet installé à partir des informations contenus dans la base de données pacman
_prg_name="${0##*/}"
_prg_version='0.98'
# Récupération de certains paramètres de pacman.conf
eval $(sed -re '/^[[:space:]]#/d' -e '/(DBPath|CacheDir)/s:([^[:space:]]+)[[:space:]]*=[[:space:]]*([^[:space:]]+):\1="\2":p;d' /etc/pacman.conf)
PACMAN_DB_DIR=${DBPath:-'/var/lib/pacman/'}
PACMAN_CACHE_DIR=${CacheDir:-'/var/cache/pacman/pkg/'}
FILE_PREP_DIR="/tmp/${_prg_name}_$$"
CURRENT_DIR="`pwd`"
DEBUG=0
#------ function ------#
function f_generate_pkginfo {
[ -e $package_dir/desc ] || _f_missed_file desc 3
dateR=`date -R`
cat << EOF > .PKGINFO
# Generated by $_prg_name $_prg_version
# $dateR
EOF
function file_stream {
cat $package_dir/desc
[ -e $package_dir/depends ] && cat $package_dir/depends
sed -rne '/%BACKUP%/,$s/^([^[:space:]]+).*/\1/p' $package_dir/files
}
file_stream | while read; do
case $REPLY in
%NAME%) pkginfo_var='pkgname';;
%VERSION%) pkginfo_var='pkgver';;
%DESC%) pkginfo_var='pkgdesc';;
%GROUPS%) pkginfo_var='group';;
%URL%) pkginfo_var='url';;
%LICENSE%) pkginfo_var='license';;
%ARCH%) pkginfo_var='arch';;
%BUILDDATE%) pkginfo_var='builddate';;
%PACKAGER%) pkginfo_var='packager';;
%SIZE%) pkginfo_var='size';;
%REPLACES%) pkginfo_var='replace';;
%DEPENDS%) pkginfo_var='depend';;
%CONFLICTS%) pkginfo_var='conflict';;
%PROVIDES%) pkginfo_var='provide';;
%BACKUP%) pkginfo_var='backup';;
%*%) unset pkginfo_var;;
*)
if [ -n "$REPLY" -a -n "$pkginfo_var" ]; then
echo "$pkginfo_var = $REPLY" >> .PKGINFO
fi
;;
esac
done
}
function f_create_tar {
mkdir $FILE_PREP_DIR
cd $FILE_PREP_DIR
[ -e $package_dir/files ] || _f_missed_file files 2
sed -rne '/%FILES%/,/%BACKUP%/{/^(%FILES%|%BACKUP%| *)$/d;s:^:/:p}' $package_dir/files > .FILELIST
if [ -e $package_dir/install ]; then
cd $FILE_PREP_DIR
cp $package_dir/install .INSTALL
fi
if [ -e $package_dir/changelog ]; then
cd $FILE_PREP_DIR
cp $package_dir/changelog .CHANGELOG
fi
f_generate_pkginfo
bsdtar czvf $CURRENT_DIR/$pkgname_ver.pkg.tar.gz --exclude=. --exclude=.. --exclude=.FILELIST -n -T .FILELIST .*
}
function _f_missed_file {
echo "! Fichier \"$1\" manquant" >&2
exit $2
}
function f_help {
cat << EOF
[ $_prg_name $_prg_version ]
$_prg_name nom_du_paquet (ex: $_prg_name hal)
-h : affiche cette aide
EOF
}
#------ end function ------#
#------ MAIN ------#
if [ "`id -u`" != 0 -a `type -p fakeroot` ]; then
fakeroot -- $0 $@
exit $?
fi
if ((!$#)); then
echo "Erreur : pas assez d'arguments"
echo
f_help
exit 1
fi
if [ "$1" = '-h' ]; then f_help; exit 0; fi
pkgname="$1"
package_dir=`echo $PACMAN_DB_DIR/local/$pkgname-[0-9]*`
if [ ! -d $package_dir ]; then
echo "Le paquet \"$pkgname\" est inexistant dans la base !"
exit 1
fi
pkgname_ver=${package_dir##*/}
if [ -f $PACMAN_CACHE_DIR/$pkgname_ver.pkg.tar.gz ]; then
echo "Paquet \"$pkgname_ver.pkg.tar.gz\" déjà existant dans le répertoire de cache : $PACMAN_CACHE_DIR"
read -n 1 -p 'Continuer (o/N) ? '
case $REPLY in
o|O) ;;
*) echo -e '\nBye.'; exit 0;;
esac
echo
fi
echo "- Nom complet du paquet : $pkgname_ver"
if (($DEBUG)); then
echo $package_dir
fi
read -n 1 -p 'Continuer (O/n) ? '
case $REPLY in
n|N) echo -e '\nBye.'; exit 0;;
*) ;;
esac
pkgname_ver="${package_dir##*/}"
f_create_tar
if ((!$DEBUG)); then
rm -fr $FILE_PREP_DIR
fi
cd $CURRENT_DIR
echo "--> $CURRENT_DIR/$pkgname_ver.pkg.tar.gz créé !"
exit 0
#------ END MAIN ------#
|