spk annotate spk-convert @ rev 110
Add spk-convert (Still needs a few functions)
author | Christian Mesh <meshca@clarkson.edu> |
---|---|
date | Sat Jun 09 09:34:42 2012 -0500 (2012-06-09) |
parents | |
children | dae62126a6a4 |
rev | line source |
---|---|
meshca@110 | 1 #!/bin/sh |
meshca@110 | 2 # |
meshca@110 | 3 # Spk-convert - Convert other distrobution's packages to tazpkg form. Read the README before adding or |
meshca@110 | 4 # modifing any code in spk! |
meshca@110 | 5 # |
meshca@110 | 6 # Copyright (C) SliTaz GNU/Linux - BSD License |
meshca@110 | 7 # Author: See AUTHORS files |
meshca@110 | 8 # |
meshca@110 | 9 . /usr/lib/slitaz/libspk.sh |
meshca@110 | 10 |
meshca@110 | 11 # |
meshca@110 | 12 # Functions |
meshca@110 | 13 # |
meshca@110 | 14 |
meshca@110 | 15 # Help and usage |
meshca@110 | 16 usage() { |
meshca@110 | 17 name=$(basename $0) |
meshca@110 | 18 cat << EOT |
meshca@110 | 19 |
meshca@110 | 20 $(boldify $(gettext "Usage:")) $name [packages|--options] |
meshca@110 | 21 |
meshca@110 | 22 $(gettext "Convert SliTaz Packages") |
meshca@110 | 23 |
meshca@110 | 24 $(boldify $(gettext "Options:")) |
meshca@110 | 25 --install $(gettext "Install package after conversion") |
meshca@110 | 26 --root= $(gettext "Set the root file system path") |
meshca@110 | 27 --debug $(gettext "Display some useful debug information") |
meshca@110 | 28 |
meshca@110 | 29 $(boldify $(gettext "Examples:")) |
meshca@110 | 30 $name package1.rpm package2.tgz packageN.ipk |
meshca@110 | 31 |
meshca@110 | 32 EOT |
meshca@110 | 33 exit 0 |
meshca@110 | 34 } |
meshca@110 | 35 |
meshca@110 | 36 # TODO find_depends show_unresolved_lib |
meshca@110 | 37 # Move tazpkg pack to shared lib? |
meshca@110 | 38 |
meshca@110 | 39 # generate a receipt based on standard receipt vars |
meshca@110 | 40 # Usage: generate_receipt $receipt $base_package |
meshca@110 | 41 generate_receipt() { |
meshca@110 | 42 local receipt=$1 |
meshca@110 | 43 local base_package=$2 |
meshca@110 | 44 cat > $receipt <<EOT |
meshca@110 | 45 # SliTaz package receipt. |
meshca@110 | 46 # generated by tazpkg from package $(basename $base_package) |
meshca@110 | 47 PACKAGE="$PACKAGE" |
meshca@110 | 48 VERSION="$VERSION" |
meshca@110 | 49 CATEGORY="misc" |
meshca@110 | 50 SHORT_DESC="$SHORT_DESC" |
meshca@110 | 51 WEB_SITE="$WEB_SITE" |
meshca@110 | 52 MAINTAINER="$MAINTAINER" |
meshca@110 | 53 DEPENDS="$(find_depends)" |
meshca@110 | 54 CONFIG_FILES="$CONFIG_FILES" |
meshca@110 | 55 EOT |
meshca@110 | 56 |
meshca@110 | 57 } |
meshca@110 | 58 |
meshca@110 | 59 # convert a .ipk package to .tazpkg |
meshca@110 | 60 # Usage: convert_ipk $package_file |
meshca@110 | 61 convert_ipk() { |
meshca@110 | 62 local package_file=$1 |
meshca@110 | 63 |
meshca@110 | 64 mkdir -p $tmp |
meshca@110 | 65 tar xOzf $package_file ./control.tar.gz | tar xzf - -C $tmp |
meshca@110 | 66 |
meshca@110 | 67 local control="$tmp/control" |
meshca@110 | 68 |
meshca@110 | 69 # filter ipk control file for variable |
meshca@110 | 70 # Usage: filter_vars $search_var |
meshca@110 | 71 filter_vars() { |
meshca@110 | 72 local var=$1 |
meshca@110 | 73 echo "$(grep ^$var $control | sed 's/.*: //')" |
meshca@110 | 74 } |
meshca@110 | 75 |
meshca@110 | 76 # Load up receipt template variables |
meshca@110 | 77 PACKAGE=$(filter_vars "Package") |
meshca@110 | 78 VERSION=$(filter_vars "Version") |
meshca@110 | 79 MAINTAINER=$(filter_vars "Maintainer") |
meshca@110 | 80 SHORT_DESC=$(filter_vars "Description") |
meshca@110 | 81 WEB_SITE="http://openwrt.org/" |
meshca@110 | 82 |
meshca@110 | 83 target=$(filter_vars "Architecture") |
meshca@110 | 84 case "$target" in |
meshca@110 | 85 i386|all) |
meshca@110 | 86 local file="$PACKAGE-$VERSION" |
meshca@110 | 87 local receipt="$tmp/$file/receipt" |
meshca@110 | 88 local fs="$tmp/$file/fs" |
meshca@110 | 89 |
meshca@110 | 90 mkdir -p $fs |
meshca@110 | 91 tar xOzf $package_file ./data.tar.gz | tar xzf - -C $fs |
meshca@110 | 92 |
meshca@110 | 93 unset CONFIG_FILES |
meshca@110 | 94 [ -s $tmp/conffiles ] && $CONFIG_FILE=$(cat $tmp/conffiles) |
meshca@110 | 95 |
meshca@110 | 96 generate_receipt $receipt $package_file |
meshca@110 | 97 |
meshca@110 | 98 show_unresolved_lib $receipt |
meshca@110 | 99 |
meshca@110 | 100 # Writes a ipk script to receipt function |
meshca@110 | 101 # Usage: transpose_func $function_name $script |
meshca@110 | 102 transpose_func() { |
meshca@110 | 103 local func=$1 |
meshca@110 | 104 local script=$2 |
meshca@110 | 105 if [ -s $script ]; then |
meshca@110 | 106 cat >> $receipt << EOT |
meshca@110 | 107 $func() |
meshca@110 | 108 { |
meshca@110 | 109 $(cat $script) |
meshca@110 | 110 } |
meshca@110 | 111 EOT |
meshca@110 | 112 } |
meshca@110 | 113 |
meshca@110 | 114 # read functions into receipt |
meshca@110 | 115 transpose_func pre_install $tmp/preinst |
meshca@110 | 116 transpose_func post_install $tmp/postinst |
meshca@110 | 117 transpose_func pre_remove $tmp/prerm |
meshca@110 | 118 transpose_func post_remove $tmp/postrm |
meshca@110 | 119 |
meshca@110 | 120 [ -z "$SHORT_DESC" ] || echo $SHORT_DESC > $file/description.txt |
meshca@110 | 121 |
meshca@110 | 122 cd $tmp |
meshca@110 | 123 tazpkg pack $file |
meshca@110 | 124 cd - > /dev/null |
meshca@110 | 125 |
meshca@110 | 126 mv $tmp/$file.tazpkg . |
meshca@110 | 127 ;; |
meshca@110 | 128 *) |
meshca@110 | 129 gettext "Invalid target: $target (expected i386)"; newline |
meshca@110 | 130 ;; |
meshca@110 | 131 esac |
meshca@110 | 132 unset_receipt |
meshca@110 | 133 rm -rf $tmp |
meshca@110 | 134 } |
meshca@110 | 135 |
meshca@110 | 136 # convert a .pkg.tar.gz/.apk package to .tazpkg |
meshca@110 | 137 # Usage: convert_arch $package_file |
meshca@110 | 138 convert_arch() { |
meshca@110 | 139 local package_file=$1 |
meshca@110 | 140 |
meshca@110 | 141 # Extract |
meshca@110 | 142 local fs="$tmp/fs" |
meshca@110 | 143 mkdir -p $fs |
meshca@110 | 144 tar xzf $package_file -C $fs |
meshca@110 | 145 |
meshca@110 | 146 local PKGINFO="$fs/.PKGINFO" |
meshca@110 | 147 if [ -f $PKGINFO ]; then |
meshca@110 | 148 |
meshca@110 | 149 # filter .PKGINFO file for variable |
meshca@110 | 150 # Usage: filter_vars $search_var |
meshca@110 | 151 filter_vars() { |
meshca@110 | 152 local var=$1 |
meshca@110 | 153 echo $(grep ^$var $PKGINFO | sed 's/.*= //') |
meshca@110 | 154 } |
meshca@110 | 155 |
meshca@110 | 156 PACKAGE=$(filter_vars "pkgname") |
meshca@110 | 157 VERSION=$(filter_vars "pkgver") |
meshca@110 | 158 SHORT_DESC=$(filter_vars "pkgdesc") |
meshca@110 | 159 WEB_SITE=$(filter_vars "url") |
meshca@110 | 160 MAINTAINER=$(filter_vars "packager") |
meshca@110 | 161 |
meshca@110 | 162 local file="$tmp/$package-$version" |
meshca@110 | 163 local receipt="$file/receipt" |
meshca@110 | 164 |
meshca@110 | 165 generate_receipt $receipt $package_file |
meshca@110 | 166 |
meshca@110 | 167 mkdir $file |
meshca@110 | 168 mv $fs $file |
meshca@110 | 169 |
meshca@110 | 170 show_unresolved_lib $tmp/$file/receipt |
meshca@110 | 171 rm -f $file/fs/.[A-Z]* |
meshca@110 | 172 |
meshca@110 | 173 cd $tmp |
meshca@110 | 174 tazpkg pack $file |
meshca@110 | 175 cd - > /dev/null |
meshca@110 | 176 |
meshca@110 | 177 mv $file.tazpkg . |
meshca@110 | 178 else |
meshca@110 | 179 eval_gettext "\$package_file does not look like an Archlinux/Alpine package !"; newline |
meshca@110 | 180 fi |
meshca@110 | 181 unset_receipt |
meshca@110 | 182 rm -rf $tmp |
meshca@110 | 183 } |
meshca@110 | 184 |
meshca@110 | 185 # convert a .tgz package to .tazpkg |
meshca@110 | 186 # Usage: convert_tgz $package_file |
meshca@110 | 187 convert_tgz() { |
meshca@110 | 188 local package_file=$1 |
meshca@110 | 189 local package=$(basename $package_file) |
meshca@110 | 190 |
meshca@110 | 191 # Set package to current args |
meshca@110 | 192 IFS='-' |
meshca@110 | 193 set -- $package |
meshca@110 | 194 unset IFS |
meshca@110 | 195 |
meshca@110 | 196 local PACKAGE=$1 |
meshca@110 | 197 local VERSION=$2 |
meshca@110 | 198 local file="$tmp/$PACKAGE-$VERSION" |
meshca@110 | 199 local receipt="$file/receipt" |
meshca@110 | 200 local fs="$file/fs" |
meshca@110 | 201 |
meshca@110 | 202 # Extract package |
meshca@110 | 203 mkdir -p $fs |
meshca@110 | 204 tar xzf $package_file -C $fs |
meshca@110 | 205 |
meshca@110 | 206 if [ -d $fs/install ]; then |
meshca@110 | 207 # Set other receipt vars |
meshca@110 | 208 SHORT_DESC=$(grep ^$PACKAGE $fs/install/slack-desc | \ |
meshca@110 | 209 head -1 | sed 's/.*(\(.*\)).*/\1/') |
meshca@110 | 210 WEB_SITE="http://www.slackware.com/packages/" |
meshca@110 | 211 MAINTAINER="nobody@slitaz.org" |
meshca@110 | 212 |
meshca@110 | 213 generate_receipt $receipt $package_file |
meshca@110 | 214 |
meshca@110 | 215 show_unresolved_lib $receipt |
meshca@110 | 216 |
meshca@110 | 217 # post_install function from doinst.sh |
meshca@110 | 218 if [ -f $fs/install/doinst.sh ]; then |
meshca@110 | 219 cat >> $receipt <<EOM |
meshca@110 | 220 |
meshca@110 | 221 post_install() |
meshca@110 | 222 { |
meshca@110 | 223 chroot \$1/ sh - << EOT |
meshca@110 | 224 cd / |
meshca@110 | 225 $(cat $fs/install/doinst.sh | sed -e 's/\\/\\\\/g' | sed -e 's/\$/\\$/g') |
meshca@110 | 226 EOT |
meshca@110 | 227 } |
meshca@110 | 228 EOM |
meshca@110 | 229 # Get full description |
meshca@110 | 230 if [ ! -z "$SHORT_DESC" ]; then |
meshca@110 | 231 grep ^$PACKAGE $fs/install/slack-desc | \ |
meshca@110 | 232 sed "s/^$PACKAGE://" > $file/description.txt |
meshca@110 | 233 fi |
meshca@110 | 234 |
meshca@110 | 235 rm -rf $fs/install |
meshca@110 | 236 |
meshca@110 | 237 cd $tmp |
meshca@110 | 238 tazpkg pack $file |
meshca@110 | 239 cd - /dev/null |
meshca@110 | 240 |
meshca@110 | 241 mv $file.tazpkg . |
meshca@110 | 242 else |
meshca@110 | 243 eval_gettext "\$package_file does not look like a Slackware package !"; newline |
meshca@110 | 244 fi |
meshca@110 | 245 rm -rf $tmp |
meshca@110 | 246 } |
meshca@110 | 247 |
meshca@110 | 248 # convert a .deb package to .tazpkg |
meshca@110 | 249 # Usage: convert_deb $package_file |
meshca@110 | 250 convert_deb() { |
meshca@110 | 251 local $package_file=$1 |
meshca@110 | 252 |
meshca@110 | 253 # Extract deb control |
meshca@110 | 254 mkdir -p $tmp |
meshca@110 | 255 dpkg-deb -e $package_file $tmp |
meshca@110 | 256 |
meshca@110 | 257 |
meshca@110 | 258 # filter control file for variable |
meshca@110 | 259 # Usage: filter_vars $search_var |
meshca@110 | 260 filter_vars() { |
meshca@110 | 261 local var=$1 |
meshca@110 | 262 local result=$(grep '^ *$var:' $tmp/control) |
meshca@110 | 263 echo ${result##*:} |
meshca@110 | 264 } |
meshca@110 | 265 |
meshca@110 | 266 PACKAGE=$(filter_vars "Package") |
meshca@110 | 267 VERSION=$(filter_vars "Version") |
meshca@110 | 268 SHORT_DESC=$(filter_vars "Description") |
meshca@110 | 269 WEB_SITE="http://packages.debian.org/search?keywords=$PACKAGE" |
meshca@110 | 270 MAINTAINER="nobody@slitaz.org" |
meshca@110 | 271 target="$(grep ^Architecture $tmp/control | sed 's/.*: //')" |
meshca@110 | 272 |
meshca@110 | 273 case "$target" in |
meshca@110 | 274 i386|all) |
meshca@110 | 275 local file="$tmp/$PACKAGE-$VERSION" |
meshca@110 | 276 local receipt="$file/receipt" |
meshca@110 | 277 local fs="$file/fs" |
meshca@110 | 278 |
meshca@110 | 279 # Extract deb contents |
meshca@110 | 280 mkdir -p $fs |
meshca@110 | 281 dpkg-deb -x $package_file $fs |
meshca@110 | 282 |
meshca@110 | 283 generate_receipt $receipt $package_file |
meshca@110 | 284 |
meshca@110 | 285 cd $TMP_DIR |
meshca@110 | 286 |
meshca@110 | 287 if [ -s $tmp/conffiles ]; then |
meshca@110 | 288 cat >> $receipt <<EOT |
meshca@110 | 289 CONFIG_FILES="$(cat $tmp/conffiles)" |
meshca@110 | 290 EOT |
meshca@110 | 291 fi |
meshca@110 | 292 |
meshca@110 | 293 show_unresolved_lib $file/receipt |
meshca@110 | 294 |
meshca@110 | 295 # Description.txt |
meshca@110 | 296 [ -z "$SHORT_DESC" ] || echo "$SHORT_DESC" > $file/Description.txt |
meshca@110 | 297 |
meshca@110 | 298 cd $tmp |
meshca@110 | 299 tazpkg pack $file |
meshca@110 | 300 cd - > /dev/null |
meshca@110 | 301 |
meshca@110 | 302 mv $file.tazpkg . |
meshca@110 | 303 ;; |
meshca@110 | 304 *) |
meshca@110 | 305 gettext "Invalid target: $target (expected i386 or all)"; newline |
meshca@110 | 306 ;; |
meshca@110 | 307 esac |
meshca@110 | 308 rm -rf $tmp |
meshca@110 | 309 } |
meshca@110 | 310 |
meshca@110 | 311 # convert a .rpm package to .tazpkg |
meshca@110 | 312 # Usage: convert_rpm $package_file |
meshca@110 | 313 convert_rpm() { |
meshca@110 | 314 local package_file=$1 |
meshca@110 | 315 |
meshca@110 | 316 # Move package_file to tmp |
meshca@110 | 317 mkdir -p $tmp |
meshca@110 | 318 cp $package_file $tmp |
meshca@110 | 319 package_file=$TMP_DIR/$(basename $package_file) |
meshca@110 | 320 |
meshca@110 | 321 # filter package_file for variable |
meshca@110 | 322 # Usage: filter_vars $search_var |
meshca@110 | 323 filter_vars() { |
meshca@110 | 324 local var=$1 |
meshca@110 | 325 echo $(rpm -qip $package_file | grep "^$var*" | awk '{print $3}') |
meshca@110 | 326 } |
meshca@110 | 327 |
meshca@110 | 328 PACKAGE=$(filter_vars "Name") |
meshca@110 | 329 VERSION=$(filter_vars "Version") |
meshca@110 | 330 SHORT_DESC=$(filter_vars "Summary") |
meshca@110 | 331 WEB_SITE=$(filter_vars "URL") |
meshca@110 | 332 if [ -z "$URL" ]; then |
meshca@110 | 333 WEB_SITE="http://rpmfind.net/linux/rpm2html/search.php?query=$PACKAGE" |
meshca@110 | 334 fi |
meshca@110 | 335 CATEGORY="misc"; |
meshca@110 | 336 MAINTAINER="nobody@slitaz.org"; |
meshca@110 | 337 |
meshca@110 | 338 |
meshca@110 | 339 local file="$tmp/$PACKAGE-$VERSION" |
meshca@110 | 340 local receipt="$file/receipt" |
meshca@110 | 341 local fs="$file/fs" |
meshca@110 | 342 |
meshca@110 | 343 mkdir -p $fs |
meshca@110 | 344 |
meshca@110 | 345 generate_receipt $receipt $package_file |
meshca@110 | 346 |
meshca@110 | 347 rpm -qip $PACKAGE_FILE | \ |
meshca@110 | 348 grep "^Description*" -A 100 | \ |
meshca@110 | 349 grep -v "^Description*" > \ |
meshca@110 | 350 $file/description.txt |
meshca@110 | 351 |
meshca@110 | 352 cd $fs |
meshca@110 | 353 rpm2cpio $PACKAGE_FILE | cpio -idm --quiet |
meshca@110 | 354 cd - > /dev/null |
meshca@110 | 355 |
meshca@110 | 356 show_unresolved_lib $receipt |
meshca@110 | 357 |
meshca@110 | 358 cd $tmp |
meshca@110 | 359 tazpkg pack $file |
meshca@110 | 360 cd - |
meshca@110 | 361 |
meshca@110 | 362 mv $file.tazpkg . |
meshca@110 | 363 |
meshca@110 | 364 unset_receipt |
meshca@110 | 365 rm -rf $TMP_DIR |
meshca@110 | 366 } |
meshca@110 | 367 |
meshca@110 | 368 |
meshca@110 | 369 # |
meshca@110 | 370 # Commands and exit |
meshca@110 | 371 # |
meshca@110 | 372 |
meshca@110 | 373 case "$1" in |
meshca@110 | 374 ""|*usage|*help) usage ;; |
meshca@110 | 375 esac |
meshca@110 | 376 |
meshca@110 | 377 # |
meshca@110 | 378 # Handle packages: package package.tazpkg ... packageN packageN.tazpkg |
meshca@110 | 379 # |
meshca@110 | 380 |
meshca@110 | 381 check_root |
meshca@110 | 382 |
meshca@110 | 383 for pkg in $@ |
meshca@110 | 384 do |
meshca@110 | 385 if [ "$(dd if=$pkg bs=8 count=1 skip=1 2> /dev/null)" == "debian-b" ]; |
meshca@110 | 386 then |
meshca@110 | 387 convert_deb $pkg |
meshca@110 | 388 else |
meshca@110 | 389 case "$pkg" in |
meshca@110 | 390 *.deb|*.udeb) |
meshca@110 | 391 convert_deb $pkg;; |
meshca@110 | 392 *.rpm) |
meshca@110 | 393 convert_rpm $pkg;; |
meshca@110 | 394 *.tgz) |
meshca@110 | 395 convert_tgz $pkg;; |
meshca@110 | 396 *.apk|*.pkg.tar.gz) |
meshca@110 | 397 convert_arch $pkg;; |
meshca@110 | 398 *.ipk|*.opk) |
meshca@110 | 399 convert_ipk $pkg;; |
meshca@110 | 400 *) |
meshca@110 | 401 gettext "Unsupported format"; newline;; |
meshca@110 | 402 esac |
meshca@110 | 403 fi |
meshca@110 | 404 done |
meshca@110 | 405 |
meshca@110 | 406 exit 0 |