cookutils rev 857
Make "pkgdb" separate module.
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Sat Dec 31 04:35:47 2016 +0200 (2016-12-31) |
parents | c5610a3dfac9 |
children | b3238dd85981 |
files | Makefile cook cooks modules/pkgdb |
line diff
1.1 --- a/Makefile Mon Dec 26 11:41:49 2016 +0100 1.2 +++ b/Makefile Sat Dec 31 04:35:47 2016 +0200 1.3 @@ -1,10 +1,10 @@ 1.4 # Makefile for SliTaz Cooker. 1.5 # 1.6 1.7 -PREFIX?=/usr 1.8 -DESTDIR?= 1.9 -LINGUAS?=fr pt_BR ru zh_CN zh_TW 1.10 -VERSION:=$(shell grep ^VERSION cook | cut -d'=' -f2) 1.11 +PREFIX ?= /usr 1.12 +DESTDIR ?= 1.13 +LINGUAS ?= fr pt_BR ru zh_CN zh_TW 1.14 +VERSION := $(shell grep ^VERSION cook | cut -d'=' -f2) 1.15 1.16 all: 1.17 1.18 @@ -17,27 +17,30 @@ 1.19 install -m 0755 -d $(DESTDIR)/etc/slitaz 1.20 install -m 0755 -d $(DESTDIR)/etc/init.d 1.21 install -m 0755 -d $(DESTDIR)$(PREFIX)/bin 1.22 + install -m 0755 -d $(DESTDIR)$(PREFIX)/libexec/cookutils 1.23 install -m 0755 -d $(DESTDIR)/var/www/cgi-bin/cooker 1.24 install -m 0755 -d $(DESTDIR)$(PREFIX)/share/applications 1.25 install -m 0755 -d $(DESTDIR)$(PREFIX)/share/cook/cooktest 1.26 install -m 0755 -d $(DESTDIR)$(PREFIX)/share/doc/cookutils 1.27 - install -m 0755 cook $(DESTDIR)$(PREFIX)/bin 1.28 - install -m 0755 cooks $(DESTDIR)$(PREFIX)/bin 1.29 + install -m 0755 cook $(DESTDIR)$(PREFIX)/bin 1.30 + install -m 0755 cooks $(DESTDIR)$(PREFIX)/bin 1.31 install -m 0755 fix-desktop-file $(DESTDIR)$(PREFIX)/bin 1.32 - install -m 0755 cooker $(DESTDIR)$(PREFIX)/bin 1.33 - install -m 0755 cookiso $(DESTDIR)$(PREFIX)/bin 1.34 - install -m 0755 cooklinux $(DESTDIR)$(PREFIX)/bin 1.35 - install -m 0644 cook.conf $(DESTDIR)/etc/slitaz 1.36 - install -m 0644 cook.site $(DESTDIR)/etc/slitaz 1.37 - install -m 0644 web/* $(DESTDIR)/var/www/cgi-bin/cooker 1.38 - install -m 0644 data/*.desktop $(DESTDIR)$(PREFIX)/share/applications 1.39 - install -m 0644 data/cooklist $(DESTDIR)$(PREFIX)/share/cook 1.40 - install -m 0644 data/receipt $(DESTDIR)$(PREFIX)/share/cook 1.41 - install -m 0644 data/cooktest/* $(DESTDIR)$(PREFIX)/share/cook/cooktest 1.42 - install -m 0644 doc/* $(DESTDIR)$(PREFIX)/share/doc/cookutils 1.43 - install -m 0644 README $(DESTDIR)$(PREFIX)/share/doc/cookutils 1.44 - install -m 0755 init.d/cooker $(DESTDIR)/etc/init.d 1.45 + install -m 0755 cooker $(DESTDIR)$(PREFIX)/bin 1.46 + install -m 0755 cookiso $(DESTDIR)$(PREFIX)/bin 1.47 + install -m 0755 cooklinux $(DESTDIR)$(PREFIX)/bin 1.48 + install -m 0755 modules/pkgdb $(DESTDIR)$(PREFIX)/libexec/cookutils 1.49 + install -m 0644 cook.conf $(DESTDIR)/etc/slitaz 1.50 + install -m 0644 cook.site $(DESTDIR)/etc/slitaz 1.51 + install -m 0644 web/* $(DESTDIR)/var/www/cgi-bin/cooker 1.52 + install -m 0644 data/*.desktop $(DESTDIR)$(PREFIX)/share/applications 1.53 + install -m 0644 data/cooklist $(DESTDIR)$(PREFIX)/share/cook 1.54 + install -m 0644 data/receipt $(DESTDIR)$(PREFIX)/share/cook 1.55 + install -m 0644 data/cooktest/* $(DESTDIR)$(PREFIX)/share/cook/cooktest 1.56 + install -m 0644 doc/* $(DESTDIR)$(PREFIX)/share/doc/cookutils 1.57 + install -m 0644 README $(DESTDIR)$(PREFIX)/share/doc/cookutils 1.58 + install -m 0755 init.d/cooker $(DESTDIR)/etc/init.d 1.59 chmod 0755 $(DESTDIR)/var/www/cgi-bin/cooker/*.cgi 1.60 + find $(DESTDIR)$(PREFIX)/libexec/cookutils -type f -exec sed -i "s|@@PREFIX@@|$(PREFIX)|g" \{\} \; 1.61 1.62 uninstall-cook: 1.63 rm -rf \ 1.64 @@ -47,6 +50,7 @@ 1.65 $(DESTDIR)$(PREFIX)/bin/cooker \ 1.66 $(DESTDIR)$(PREFIX)/bin/cookiso \ 1.67 $(DESTDIR)$(PREFIX)/bin/cooklinux \ 1.68 + $(DESTDIR)$(PREFIX)/libexec/cookutils \ 1.69 $(DESTDIR)$(PREFIX)/share/cook \ 1.70 $(DESTDIR)/etc/slitaz/cook.* \ 1.71 $(DESTDIR)/var/www/cooker 1.72 @@ -66,8 +70,8 @@ 1.73 install -m 0755 -d $(DESTDIR)$(PREFIX)/bin 1.74 install -m 0755 -d $(DESTDIR)$(PREFIX)/share/cross 1.75 install -m 0755 -d $(DESTDIR)$(PREFIX)/share/doc/cookutils 1.76 - install -m 0755 cross $(DESTDIR)$(PREFIX)/bin 1.77 - install -m 0644 doc/cross.txt $(DESTDIR)$(PREFIX)/share/doc/cookutils 1.78 + install -m 0755 cross $(DESTDIR)$(PREFIX)/bin 1.79 + install -m 0644 doc/cross.txt $(DESTDIR)$(PREFIX)/share/doc/cookutils 1.80 install -m 0644 data/cross-*.conf $(DESTDIR)$(PREFIX)/share/cross 1.81 1.82 uninstall-cross: 1.83 @@ -83,7 +87,7 @@ 1.84 --copyright-holder="SliTaz Association" \ 1.85 --package-name="Cook" \ 1.86 --package-version="$(VERSION)" \ 1.87 - ./cook 1.88 + ./cook ./modules.pkgdb 1.89 1.90 msgmerge: 1.91 @for l in $(LINGUAS); do \
2.1 --- a/cook Mon Dec 26 11:41:49 2016 +0100 2.2 +++ b/cook Sat Dec 31 04:35:47 2016 +0200 2.3 @@ -1587,13 +1587,6 @@ 2.4 } 2.5 2.6 2.7 -# Return size of file in human readible format 2.8 -# Note, "du" in opposite returns size occupied by file on disk (4KB multiple in most cases) 2.9 -filesize() { 2.10 - busybox ls -lh "$1" | awk '{print $5 "B"}' 2.11 -} 2.12 - 2.13 - 2.14 # 2.15 # Receipt functions to ease packaging 2.16 # 2.17 @@ -1673,8 +1666,6 @@ 2.18 status 2.19 } 2.20 2.21 -dblog() { tee -a $LOGS/pkgdb.log; } 2.22 - 2.23 2.24 2.25 2.26 @@ -1980,242 +1971,10 @@ 2.27 ;; 2.28 2.29 pkgdb) 2.30 - # Create suitable packages list for TazPKG and only for built packages 2.31 - # as well as flavors files for TazLiTo. We dont need logs since we do it 2.32 + # Create suitable packages list for TazPkg and only for built packages 2.33 + # as well as flavors files for TazLiTo. We don't need logs since we do it 2.34 # manually to ensure everything is fine before syncing the mirror. 2.35 - 2.36 - rm $LOGS/pkgdb.log 2>/dev/null 2.37 - 2.38 - case "$2" in 2.39 - --flavors|--rmpkg) ;; 2.40 - *) 2.41 - [ -n "$2" ] && PKGS="$2" 2.42 - if [ ! -d "$PKGS" ]; then 2.43 - { newline; _ "Packages directory \"%s\" doesn't exist" "$PKGS"; newline; } | dblog 2.44 - exit 1 2.45 - fi ;; 2.46 - esac 2.47 - 2.48 - time=$(date +%s) 2.49 - flavors="$SLITAZ/flavors" 2.50 - live="$SLITAZ/live" 2.51 - 2.52 - echo 'cook:pkgdb' > $command 2.53 - _ 'Cook pkgdb: Creating all packages lists' | log 2.54 - newline; { _ 'Creating lists for "%s"' "$PKGS"; separator; } | dblog 2.55 - 2.56 - { _ 'Cook pkgdb started: %s' "$(date "$(_ '+%%F %%R')")"; newline; } | dblog 2.57 - 2.58 - cd $PKGS 2.59 - rm -f packages.* extra.list 2.60 - touch packages.equiv 2.61 - 2.62 - _n 'Creating file "%s"' 'packages.list' | dblog 2.63 - ls -1 *.tazpkg | sed s'/.tazpkg//' > $PKGS/packages.list 2.64 - echo " ($(filesize $PKGS/packages.list))" | dblog 2.65 - 2.66 - _n 'Creating file "%s"' 'packages.md5' | dblog 2.67 - md5sum *.tazpkg > $PKGS/packages.md5 2.68 - echo " ($(filesize $PKGS/packages.md5))" | dblog 2.69 - cp $PKGS/packages.md5 $PKGS/packages.toremove # list of duplicates 2.70 - 2.71 - md5sum packages.md5 | cut -d' ' -f1 > ID 2.72 - ( cat ./ID | tr $'\n' ' '; date -ur ./ID +%s ) > IDs # md5 and timestamp 2.73 - 2.74 - _n 'Creating file "%s"' 'descriptions.txt' | dblog 2.75 - rm $PKGS/descriptions.txt 2>/dev/null 2.76 - for i in $(ls $WOK | sort); do 2.77 - if [ -e "$WOK/$i/description.txt" ]; then 2.78 - echo "$i" >> descriptions.txt 2.79 - cat "$WOK/$i/description.txt" | sed 's|^$| |' >> descriptions.txt 2.80 - echo >> descriptions.txt 2.81 - fi 2.82 - done 2.83 - echo " ($(filesize $PKGS/descriptions.txt))" | dblog 2.84 - 2.85 - 2.86 - _ 'Creating lists from "%s"' "$WOK" | dblog 2.87 - cd $WOK 2.88 - for pkg in *; do 2.89 - unset_receipt 2.90 - . $pkg/receipt 2.91 - # PACKED_SIZE and UNPACKED_SIZE are only in built receipt 2.92 - [ -s $pkg/taz/*/receipt ] && . $pkg/taz/*/receipt 2.93 - 2.94 - if [ -f "$PKGS/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg" ] || \ 2.95 - [ -f "$PKGS/$PACKAGE-$VERSION$EXTRAVERSION-$ARCH.tazpkg" ]; then 2.96 - 2.97 - # packages.desc lets us search easily in DB 2.98 - cat >> $PKGS/packages.desc <<EOT 2.99 -$PACKAGE | $VERSION$EXTRAVERSION | $SHORT_DESC | $CATEGORY | $WEB_SITE 2.100 -EOT 2.101 - 2.102 - # packages.txt used by tazpkg and tazpkg-web also to provide 2.103 - # a human readable package list with version and description. 2.104 - cat >> $PKGS/packages.txt <<EOT 2.105 -$PACKAGE 2.106 -$VERSION$EXTRAVERSION 2.107 -$SHORT_DESC 2.108 -$PACKED_SIZE ($UNPACKED_SIZE installed) 2.109 - 2.110 -EOT 2.111 - 2.112 - # packages.info combines TazPkg separate files 2.113 - # and will substitute them all 2.114 - SIZES=$(echo $PACKED_SIZE $UNPACKED_SIZE | sed 's|\.0||g') 2.115 - DEPENDS=$(echo $DEPENDS) # remove newlines from some receipts 2.116 - MD5="$(fgrep " $PACKAGE-$VERSION$EXTRAVERSION.tazpkg" $PKGS/packages.md5 | awk '{print $1}')" 2.117 - cat >> $PKGS/packages.info <<EOT 2.118 -$PACKAGE $VERSION$EXTRAVERSION $CATEGORY $SHORT_DESC $WEB_SITE $TAGS $SIZES $DEPENDS $MD5 2.119 -EOT 2.120 - 2.121 - # packages.equiv is used by tazpkg install to check depends. 2.122 - for i in $PROVIDE; do 2.123 - DEST='' 2.124 - echo $i | fgrep -q : && DEST="${i#*:}:" 2.125 - if grep -qs ^${i%:*}= $PKGS/packages.equiv; then 2.126 - sed -i "s/^${i%:*}=/${i%:*}=$DEST$PACKAGE /" \ 2.127 - $PKGS/packages.equiv 2.128 - else 2.129 - echo "${i%:*}=$DEST$PACKAGE" >> $PKGS/packages.equiv 2.130 - fi 2.131 - done 2.132 - 2.133 - # files.list provides a list of all packages files. 2.134 - cat $pkg/taz/*/files.list | sed s/^/"$pkg: \0"/ >> \ 2.135 - $PKGS/files.list 2.136 - 2.137 - # list of duplicates 2.138 - sed -i "/ $PACKAGE-$VERSION$EXTRAVERSION.tazpkg/d" $PKGS/packages.toremove 2.139 - else 2.140 - # if receipt variable HOST_ARCH absent/empty or contains ARCH 2.141 - if [ -z "$HOST_ARCH" -o "${HOST_ARCH/$ARCH/}" != "$HOST_ARCH" ]; then 2.142 - _ ' - absent: %s (%s)' "$PACKAGE-$VERSION$EXTRAVERSION.tazpkg" "$ARCH" | dblog 2.143 - fi 2.144 - fi 2.145 - done 2.146 - 2.147 - # Display list size. 2.148 - _ 'Done: %s (%s)' 'packages.desc' "$(filesize $PKGS/packages.desc)" | dblog 2.149 - _ 'Done: %s (%s)' 'packages.txt' "$(filesize $PKGS/packages.txt)" | dblog 2.150 - _ 'Done: %s (%s)' 'packages.info' "$(filesize $PKGS/packages.info)" | dblog 2.151 - _ 'Done: %s (%s)' 'packages.equiv' "$(filesize $PKGS/packages.equiv)" | dblog 2.152 - 2.153 - cd $PKGS 2.154 - 2.155 - 2.156 - # Check package duplicates 2.157 - if [ -s "$PKGS/packages.toremove" ]; then 2.158 - newline | dblog 2.159 - _ 'Removing duplicates:' | dblog 2.160 - while read pkgsum pkgfile; do 2.161 - echo " - $pkgfile" | dblog 2.162 - sed -i "/${pkgfile%.tazpkg}/d" $PKGS/packages.list 2.163 - sed -i "/ $pkgfile/d" $PKGS/packages.md5 2.164 - [ -n "$rmpkg" ] && rm $PKGS/$pkgfile # remove packages only with --rmpkg 2.165 - done < $PKGS/packages.toremove 2.166 - newline | dblog 2.167 - fi 2.168 - rm $PKGS/packages.toremove 2.169 - 2.170 - 2.171 - # files.list.lzma 2.172 - _n 'Creating file "%s"' 'files.list.lzma' | dblog 2.173 - touch files.list 2.174 - # pkgs.slitaz.org strongly depends on list sorted by packages names 2.175 - lzma e files.list files.list.lzma 2.176 - echo " ($(filesize $PKGS/files.list.lzma))" | dblog 2.177 - 2.178 - # Pre-sorting filenames causes 10% smaller resulting lzma file 2.179 - _n 'Creating file "%s"' 'files-list.lzma' | dblog 2.180 - cat files.list | sort -k2 -o files.list.sorted 2.181 - lzma e files.list.sorted files-list.lzma 2.182 - rm -f files.list files.list.sorted 2.183 - echo " ($(filesize $PKGS/files-list.lzma))" | dblog 2.184 - 2.185 - [ -e files.list.md5 ] && rm files.list.md5 2.186 - md5sum files-list.lzma | cut -d' ' -f1 | tr -d $'\n' > files-list.md5 2.187 - 2.188 - # packages.info.lzma 2.189 - PI=packages.info 2.190 - _n 'Creating file "%s"' 'packages.info.lzma' | dblog 2.191 - touch $PI 2.192 - lzma e $PI $PI.lzma 2.193 - echo " ($(filesize $PKGS/packages.info.lzma))" | dblog 2.194 - 2.195 - # Make bundle to fast recharge 2.196 - _n 'Creating file "%s"' 'bundle.tar.lzma' | dblog 2.197 - [ -f bundle.tar.lzma ] && rm bundle.tar.lzma 2.198 - # Make sure to get "mirrors" file 2.199 - until [ -e 'mirrors' ]; do 2.200 - wget -q http://mirror1.slitaz.org/mirrors 2.201 - echo -n '.' | dblog; sleep 5 2.202 - done 2.203 - # Make sure to get "extra.list" file 2.204 - until [ -e 'extra.list' ]; do 2.205 - wget -q -O extra.list http://mirror1.slitaz.org/packages/get.list 2.206 - echo -n '.' | dblog; sleep 5 2.207 - done 2.208 - busybox tar -chaf bundle.tar.lzma \ 2.209 - mirrors extra.list files-list.md5 packages.info descriptions.txt \ 2.210 - packages.desc packages.md5 packages.txt packages.list packages.equiv 2.211 - rm ./mirrors 2.212 - echo " ($(filesize $PKGS/bundle.tar.lzma))" | dblog 2.213 - 2.214 - # Display some info. 2.215 - separator | dblog 2.216 - nb=$(ls $PKGS/*.tazpkg | wc -l) 2.217 - time=$(($(date +%s) - $time)) 2.218 - # L10n: 's' is for seconds (cooking time) 2.219 - { _ 'Packages: %s - Time: %ss' "$nb" "$time"; newline; } | dblog 2.220 - 2.221 - 2.222 - # Create all flavors files at once. Do we really need code to monitor 2.223 - # flavors changes? Lets just build them with packages lists before 2.224 - # syncing the mirror. 2.225 - [ "$2" != '--flavors' ] && exit 1 2.226 - 2.227 - if [ ! -d "$flavors" ]; then 2.228 - { _ 'Missing flavors folder "%s"' "$flavors"; newline; } | dblog 2.229 - exit 1 2.230 - fi 2.231 - 2.232 - [ ! -d "$live" ] && mkdir -p $live 2.233 - _ 'Creating flavors files in "%s"' "$live" | dblog 2.234 - _ 'Cook pkgdb: Creating all flavors' | log 2.235 - separator | dblog 2.236 - 2.237 - _ 'Recharging lists to use latest packages...' | dblog 2.238 - tazpkg recharge >/dev/null 2>/dev/null 2.239 - 2.240 - # We need a custom tazlito config to set working dir to /home/slitaz. 2.241 - if [ ! -f "$live/tazlito.conf" ]; then 2.242 - _ 'Creating configuration file "%s"' 'tazlito.conf' | dblog 2.243 - cp /etc/tazlito/tazlito.conf $live 2.244 - sed -i s@WORK_DIR=.*@WORK_DIR=\"/home/slitaz\"@ \ 2.245 - $live/tazlito.conf 2.246 - fi 2.247 - 2.248 - # Update Hg flavors repo and pack. 2.249 - if [ -d "$flavors/.hg" ]; then 2.250 - cd $flavors; hg pull -u 2.251 - fi 2.252 - 2.253 - cd $live 2.254 - _ 'Starting to generate flavors...' | dblog 2.255 - rm -f flavors.list *.flavor 2.256 - for i in $flavors/*; do 2.257 - fl=$(basename $i) 2.258 - _ 'Packing flavor "%s"' "$fl" | dblog 2.259 - tazlito pack-flavor $fl >/dev/null || exit 1 2.260 - tazlito show-flavor $fl --brief --noheader 2>/dev/null >> flavors.list 2.261 - done 2.262 - cp -f $live/*.flavor $live/flavors.list $PKGS 2.263 - separator | dblog 2.264 - { _ 'Total flavors size: %s' "$(du -sh $live | awk '{print $1}')"; newline; } | dblog 2.265 - rm -f $command 2.266 - separator | dblog 2.267 - _ 'Cook pkgdb end: %s' "$(date "$(_ '+%%F %%R')")" | dblog 2.268 + @@PREFIX@@/libexec/cookutils/pkgdb "$2" 2.269 ;; 2.270 2.271 *)
3.1 --- a/cooks Mon Dec 26 11:41:49 2016 +0100 3.2 +++ b/cooks Sat Dec 31 04:35:47 2016 +0200 3.3 @@ -1,6 +1,6 @@ 3.4 #!/bin/sh 3.5 # Cook specified package and then cook all the split packages 3.6 -# that build from the files of just built packages 3.7 +# that build from the files of just built package 3.8 3.9 case "$1" in 3.10 --help|-h) 3.11 @@ -9,7 +9,7 @@ 3.12 3.13 Cook the specified package and then cook all the packages defined in the 3.14 SPLIT variable in the package receipt. 3.15 -Note, *-dev packages are implicit and usually omitted. 3.16 +Note, *-dev packages are implicit and usually omitted in the SPLIT. 3.17 3.18 EOT 3.19 exit 0
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 4.2 +++ b/modules/pkgdb Sat Dec 31 04:35:47 2016 +0200 4.3 @@ -0,0 +1,272 @@ 4.4 +#!/bin/sh 4.5 +# 4.6 +# pkgdb - module of the SliTaz Cook 4.7 +# Copyright (C) SliTaz GNU/Linux - GNU GPL v3 4.8 +# 4.9 + 4.10 +. /usr/lib/slitaz/libcook.sh 4.11 + 4.12 +export output=raw 4.13 + 4.14 +echo "flavors='$flavors' rmpkg='$rmpkg' 1='$1' 2='$2'" 4.15 + 4.16 +# Internationalization. 4.17 + 4.18 +export TEXTDOMAIN='cook' 4.19 + 4.20 + 4.21 +# 4.22 +# Functions 4.23 +# 4.24 + 4.25 +dblog() { tee -a $LOGS/pkgdb.log; } 4.26 + 4.27 + 4.28 +# Return size of file in human readible format 4.29 +# Note, "du" in opposite returns size occupied by file on disk (4KB multiple in most cases) 4.30 + 4.31 +filesize() { busybox ls -lh "$1" | awk '{print $5 "B"}'; } 4.32 + 4.33 + 4.34 + 4.35 + 4.36 + 4.37 +# Create suitable packages list for TazPkg and only for built packages 4.38 +# as well as flavors files for TazLiTo. We don't need logs since we do it 4.39 +# manually to ensure everything is fine before syncing the mirror. 4.40 + 4.41 +rm $LOGS/pkgdb.log 2>/dev/null 4.42 + 4.43 +case "$1" in 4.44 + --flavors|--rmpkg) ;; 4.45 + *) 4.46 + [ -n "$1" ] && PKGS="$1" 4.47 + if [ ! -d "$PKGS" ]; then 4.48 + { newline; _ "Packages directory \"%s\" doesn't exist" "$PKGS"; newline; } | dblog 4.49 + exit 1 4.50 + fi ;; 4.51 +esac 4.52 + 4.53 +time=$(date +%s) 4.54 +flavors="$SLITAZ/flavors" 4.55 +live="$SLITAZ/live" 4.56 + 4.57 +echo 'cook:pkgdb' > $command 4.58 +_ 'Cook pkgdb: Creating all packages lists' | log 4.59 +newline; { _ 'Creating lists for "%s"' "$PKGS"; separator; } | dblog 4.60 + 4.61 +{ _ 'Cook pkgdb started: %s' "$(date "$(_ '+%%F %%R')")"; newline; } | dblog 4.62 + 4.63 +cd $PKGS 4.64 +rm -f packages.* extra.list 4.65 +touch packages.equiv 4.66 + 4.67 +_n 'Creating file "%s"' 'packages.list' | dblog 4.68 +ls -1 *.tazpkg | sed s'/.tazpkg//' > $PKGS/packages.list 4.69 +echo " ($(filesize $PKGS/packages.list))" | dblog 4.70 + 4.71 +_n 'Creating file "%s"' 'packages.md5' | dblog 4.72 +md5sum *.tazpkg > $PKGS/packages.md5 4.73 +echo " ($(filesize $PKGS/packages.md5))" | dblog 4.74 +cp $PKGS/packages.md5 $PKGS/packages.toremove # list of duplicates 4.75 + 4.76 +md5sum packages.md5 | cut -d' ' -f1 > ID 4.77 +( cat ./ID | tr $'\n' ' '; date -ur ./ID +%s ) > IDs # md5 and timestamp 4.78 + 4.79 +_n 'Creating file "%s"' 'descriptions.txt' | dblog 4.80 +rm $PKGS/descriptions.txt 2>/dev/null 4.81 +for i in $(ls $WOK | sort); do 4.82 + if [ -e "$WOK/$i/description.txt" ]; then 4.83 + echo "$i" >> descriptions.txt 4.84 + cat "$WOK/$i/description.txt" | sed 's|^$| |' >> descriptions.txt 4.85 + echo >> descriptions.txt 4.86 + fi 4.87 +done 4.88 +echo " ($(filesize $PKGS/descriptions.txt))" | dblog 4.89 + 4.90 + 4.91 +_ 'Creating lists from "%s"' "$WOK" | dblog 4.92 +cd $WOK 4.93 +for pkg in *; do 4.94 + unset_receipt 4.95 + . $pkg/receipt 4.96 + # PACKED_SIZE and UNPACKED_SIZE are only in built receipt 4.97 + [ -s $pkg/taz/*/receipt ] && . $pkg/taz/*/receipt 4.98 + 4.99 + if [ -f "$PKGS/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg" ] || \ 4.100 + [ -f "$PKGS/$PACKAGE-$VERSION$EXTRAVERSION-$ARCH.tazpkg" ]; then 4.101 + 4.102 + # packages.desc lets us search easily in DB 4.103 + cat >> $PKGS/packages.desc <<EOT 4.104 +$PACKAGE | $VERSION$EXTRAVERSION | $SHORT_DESC | $CATEGORY | $WEB_SITE 4.105 +EOT 4.106 + 4.107 + # packages.txt used by tazpkg and tazpkg-web also to provide 4.108 + # a human readable package list with version and description. 4.109 + cat >> $PKGS/packages.txt <<EOT 4.110 +$PACKAGE 4.111 +$VERSION$EXTRAVERSION 4.112 +$SHORT_DESC 4.113 +$PACKED_SIZE ($UNPACKED_SIZE installed) 4.114 + 4.115 +EOT 4.116 + 4.117 + # packages.info combines TazPkg separate files 4.118 + # and will substitute them all 4.119 + SIZES=$(echo $PACKED_SIZE $UNPACKED_SIZE | sed 's|\.0||g') 4.120 + DEPENDS=$(echo $DEPENDS) # remove newlines from some receipts 4.121 + MD5="$(fgrep " $PACKAGE-$VERSION$EXTRAVERSION.tazpkg" $PKGS/packages.md5 | awk '{print $1}')" 4.122 + cat >> $PKGS/packages.info <<EOT 4.123 +$PACKAGE $VERSION$EXTRAVERSION $CATEGORY $SHORT_DESC $WEB_SITE $TAGS $SIZES $DEPENDS $MD5 4.124 +EOT 4.125 + 4.126 + # packages.equiv is used by tazpkg install to check depends. 4.127 + for i in $PROVIDE; do 4.128 + DEST='' 4.129 + echo $i | fgrep -q : && DEST="${i#*:}:" 4.130 + if grep -qs ^${i%:*}= $PKGS/packages.equiv; then 4.131 + sed -i "s/^${i%:*}=/${i%:*}=$DEST$PACKAGE /" \ 4.132 + $PKGS/packages.equiv 4.133 + else 4.134 + echo "${i%:*}=$DEST$PACKAGE" >> $PKGS/packages.equiv 4.135 + fi 4.136 + done 4.137 + 4.138 + # files.list provides a list of all packages files. 4.139 + cat $pkg/taz/*/files.list | sed s/^/"$pkg: \0"/ >> \ 4.140 + $PKGS/files.list 4.141 + 4.142 + # list of duplicates 4.143 + sed -i "/ $PACKAGE-$VERSION$EXTRAVERSION.tazpkg/d" $PKGS/packages.toremove 4.144 + else 4.145 + # if receipt variable HOST_ARCH absent/empty or contains ARCH 4.146 + if [ -z "$HOST_ARCH" -o "${HOST_ARCH/$ARCH/}" != "$HOST_ARCH" ]; then 4.147 + _ ' - absent: %s (%s)' "$PACKAGE-$VERSION$EXTRAVERSION.tazpkg" "$ARCH" | dblog 4.148 + fi 4.149 + fi 4.150 +done 4.151 + 4.152 +# Display list size. 4.153 +_ 'Done: %s (%s)' 'packages.desc' "$(filesize $PKGS/packages.desc)" | dblog 4.154 +_ 'Done: %s (%s)' 'packages.txt' "$(filesize $PKGS/packages.txt)" | dblog 4.155 +_ 'Done: %s (%s)' 'packages.info' "$(filesize $PKGS/packages.info)" | dblog 4.156 +_ 'Done: %s (%s)' 'packages.equiv' "$(filesize $PKGS/packages.equiv)" | dblog 4.157 + 4.158 +cd $PKGS 4.159 + 4.160 + 4.161 +# Check package duplicates 4.162 +if [ -s "$PKGS/packages.toremove" ]; then 4.163 + newline | dblog 4.164 + _ 'Removing duplicates:' | dblog 4.165 + while read pkgsum pkgfile; do 4.166 + echo " - $pkgfile" | dblog 4.167 + sed -i "/${pkgfile%.tazpkg}/d" $PKGS/packages.list 4.168 + sed -i "/ $pkgfile/d" $PKGS/packages.md5 4.169 + [ -n "$rmpkg" ] && rm $PKGS/$pkgfile # remove packages only with --rmpkg 4.170 + done < $PKGS/packages.toremove 4.171 + newline | dblog 4.172 +fi 4.173 +rm $PKGS/packages.toremove 4.174 + 4.175 + 4.176 +# files.list.lzma 4.177 +_n 'Creating file "%s"' 'files.list.lzma' | dblog 4.178 +touch files.list 4.179 +# pkgs.slitaz.org strongly depends on list sorted by packages names 4.180 +lzma e files.list files.list.lzma 4.181 +echo " ($(filesize $PKGS/files.list.lzma))" | dblog 4.182 + 4.183 +# Pre-sorting filenames causes 10% smaller resulting lzma file 4.184 +_n 'Creating file "%s"' 'files-list.lzma' | dblog 4.185 +cat files.list | sort -k2 -o files.list.sorted 4.186 +lzma e files.list.sorted files-list.lzma 4.187 +rm -f files.list files.list.sorted 4.188 +echo " ($(filesize $PKGS/files-list.lzma))" | dblog 4.189 + 4.190 +[ -e files.list.md5 ] && rm files.list.md5 4.191 +md5sum files-list.lzma | cut -d' ' -f1 | tr -d $'\n' > files-list.md5 4.192 + 4.193 +# packages.info.lzma 4.194 +PI=packages.info 4.195 +_n 'Creating file "%s"' 'packages.info.lzma' | dblog 4.196 +touch $PI 4.197 +lzma e $PI $PI.lzma 4.198 +echo " ($(filesize $PKGS/packages.info.lzma))" | dblog 4.199 + 4.200 +# Make bundle to fast recharge 4.201 +_n 'Creating file "%s"' 'bundle.tar.lzma' | dblog 4.202 +[ -f bundle.tar.lzma ] && rm bundle.tar.lzma 4.203 +# Make sure to get "mirrors" file 4.204 +until [ -e 'mirrors' ]; do 4.205 + wget -q http://mirror1.slitaz.org/mirrors 4.206 + echo -n '.' | dblog; sleep 5 4.207 +done 4.208 +# Make sure to get "extra.list" file 4.209 +until [ -e 'extra.list' ]; do 4.210 + wget -q -O extra.list http://mirror1.slitaz.org/packages/get.list 4.211 + echo -n '.' | dblog; sleep 5 4.212 +done 4.213 +busybox tar -chaf bundle.tar.lzma \ 4.214 + mirrors extra.list files-list.md5 packages.info descriptions.txt \ 4.215 + packages.desc packages.md5 packages.txt packages.list packages.equiv 4.216 +rm ./mirrors 4.217 +echo " ($(filesize $PKGS/bundle.tar.lzma))" | dblog 4.218 + 4.219 +# Display some info. 4.220 +separator | dblog 4.221 +nb=$(ls $PKGS/*.tazpkg | wc -l) 4.222 +time=$(($(date +%s) - $time)) 4.223 +# L10n: 's' is for seconds (cooking time) 4.224 +{ _ 'Packages: %s - Time: %ss' "$nb" "$time"; newline; } | dblog 4.225 + 4.226 + 4.227 +# Create all flavors files at once. Do we really need code to monitor 4.228 +# flavors changes? Let's just build them with packages lists before 4.229 +# syncing the mirror. 4.230 +[ "$1" != '--flavors' ] && exit 1 4.231 + 4.232 +if [ ! -d "$flavors" ]; then 4.233 + { _ 'Missing flavors folder "%s"' "$flavors"; newline; } | dblog 4.234 + exit 1 4.235 +fi 4.236 + 4.237 +[ ! -d "$live" ] && mkdir -p $live 4.238 +_ 'Creating flavors files in "%s"' "$live" | dblog 4.239 +_ 'Cook pkgdb: Creating all flavors' | log 4.240 +separator | dblog 4.241 + 4.242 +_ 'Recharging lists to use latest packages...' | dblog 4.243 +tazpkg recharge >/dev/null 2>/dev/null 4.244 + 4.245 +# We need a custom tazlito config to set working dir to /home/slitaz. 4.246 +if [ ! -f "$live/tazlito.conf" ]; then 4.247 + _ 'Creating configuration file "%s"' 'tazlito.conf' | dblog 4.248 + cp /etc/tazlito/tazlito.conf $live 4.249 + sed -i s@WORK_DIR=.*@WORK_DIR=\"/home/slitaz\"@ \ 4.250 + $live/tazlito.conf 4.251 +fi 4.252 + 4.253 +# Update Hg flavors repo and pack. 4.254 +if [ -d "$flavors/.hg" ]; then 4.255 + cd $flavors; hg pull -u 4.256 +fi 4.257 + 4.258 +cd $live 4.259 +_ 'Starting to generate flavors...' | dblog 4.260 +rm -f flavors.list *.flavor 4.261 +for i in $flavors/*; do 4.262 + fl=$(basename $i) 4.263 + _ 'Packing flavor "%s"' "$fl" | dblog 4.264 + tazlito pack-flavor $fl >/dev/null || exit 1 4.265 + tazlito show-flavor $fl --brief --noheader 2>/dev/null >> flavors.list 4.266 +done 4.267 +cp -f $live/*.flavor $live/flavors.list $PKGS 4.268 +separator | dblog 4.269 +{ _ 'Total flavors size: %s' "$(du -sh $live | awk '{print $1}')"; newline; } | dblog 4.270 +rm -f $command 4.271 +separator | dblog 4.272 +_ 'Cook pkgdb end: %s' "$(date "$(_ '+%%F %%R')")" | dblog 4.273 + 4.274 + 4.275 +exit 0