slitaz-dev-tools annotate tazdev/tazdev @ rev 310

makegraphs: tune cpuinfo
author Pascal Bellard <pascal.bellard@slitaz.org>
date Fri Jan 15 08:08:28 2021 +0000 (2021-01-15)
parents 0b423b5392bc
children
rev   line source
pankso@1 1 #!/bin/sh
pankso@70 2 #
al@274 3 # Tazdev - SliTaz developers and build host tool. System-wide config file
al@274 4 # is located at /etc/slitaz/tazdev.conf. Please, keep the code clear and
al@274 5 # well commented. Also keep in mind: configuration variables are $UPPERCASE
al@274 6 # and variables initialized by tazdev itself are $lowercase.
pankso@1 7 #
al@274 8 # (c) 2014-2017 SliTaz GNU/Linux - GNU GPL v3
pankso@1 9 #
pankso@70 10 # AUTHORS
pankso@70 11 # Christophe Lincoln <pankso@slitaz.org>
pankso@70 12 # Pascal Bellard <bellard@slitaz.org>
pankso@208 13 # Eric Joseph-Alexandre <erjo@slitaz.org>
pankso@1 14 #
erjo@190 15
pankso@273 16 VERSION=2.1
erjo@190 17
pankso@174 18 . /lib/libtaz.sh
pankso@1 19
pankso@77 20 [ -f /etc/slitaz/tazdev.conf ] && . /etc/slitaz/tazdev.conf
pankso@273 21 [ -f ~/.config/slitaz/tazdev.conf ] && . ~/.config/slitaz/tazdev.conf
pankso@81 22 [ -f tazdev.conf ] && . ./tazdev.conf
pankso@77 23
al@274 24 [ -n "$SLITAZ_HOME" ] || die "No config file found"
al@274 25
al@274 26
al@274 27 # Remove all --parameters from cmdline
al@274 28 IFS=$'\n'
al@274 29 set -- $(echo "$*" | sed '/^--/d')
al@274 30 unset IFS
al@274 31
pankso@1 32
pankso@180 33 usage() {
al@274 34 cat <<EOT
pankso@183 35
al@274 36 $(boldify "Usage:") $(basename $0) <command> [<options>] [--options]
pankso@183 37
erjo@190 38 SliTaz developers and build host tool v$VERSION
pankso@183 39
pankso@174 40 $(boldify "Commands:")
al@274 41 usage Print this short usage and command list
al@274 42 help <tool> Give help on a SliTaz tool or library
al@274 43 -s stats Display statistics for your projects
al@274 44 -c chroot [<ver>|<rootfs>] Mount virtual FS and chroot into the build env
al@274 45 -gc gen-chroot [<ver>] Generate a chroot using packages from config
al@274 46 file
al@274 47 -uc umchroot [<rootfs>] Unmount chroot specified on cmdline
al@274 48 -cc clean-chroot [<ver>] Clean a chroot environment (skip root/ and
al@274 49 home/)
al@274 50 -p push [<user> [<ver>]] Upload new packages to the main mirror
al@274 51 -dp dry-push [<user> [<ver>]] Show what will be uploaded to the mirror
al@274 52 pull [<user> [<ver>]] Download new packages from the main mirror
al@274 53 dry-pull [<user> [<ver>]] Show what will be downloaded from the mirror
al@274 54 -ur up-repos Update all your SliTaz projects repos in one
al@274 55 command
al@274 56 -rp relpkg <pkg> [<version>] Archive and upload new package/project version
al@274 57 -sc setup-cgi Setup your CGI environment
pankso@183 58
pankso@183 59 $(boldify "Options:")
al@274 60 --rootfs= Path to the chroot to generate or clean
al@274 61 --arch= Specify the architecture type for cross-chroot, push/pull
paul@275 62 --clean or --forced Clean chroot before generating a new one
pankso@183 63
al@274 64 $(boldify "Examples:")
pankso@183 65 $(basename $0) gen-chroot undigest --clean
pankso@183 66 $(basename $0) -c --arch=arm
pankso@183 67
pankso@183 68 EOT
pankso@1 69 }
pankso@1 70
pankso@180 71 get_version() {
pankso@180 72 # Stable, undigest or custom.
al@274 73 version=${2:-cooking}
al@274 74 slitaz="$SLITAZ_HOME/$version"
al@274 75 if [ -n "$arch" ]; then
al@274 76 rootfs="$slitaz/$arch/chroot"
pankso@1 77 else
al@274 78 rootfs="$slitaz/chroot"
pankso@180 79 fi
pankso@1 80 }
pankso@1 81
pankso@180 82 check_mirror() {
al@274 83 [ -n "$2" ] && user="$2"
al@274 84 local repo="$3"
al@274 85 case $repo in
al@274 86 stable|backports|undigest)
al@274 87 remote="$MIRROR_PKGS/$repo/"
al@274 88 local="$SLITAZ_HOME/$repo/packages/"
al@274 89 ;;
al@274 90 rpi)
al@274 91 remote="$MIRROR_PKGS/cross/rpi/"
al@274 92 local="$SLITAZ_HOME/cooking/arm/packages/"
al@274 93 ;;
al@274 94 *)
al@274 95 remote="$MIRROR_PKGS/cooking/"
al@274 96 local="$SLITAZ_HOME/cooking/packages/"
al@274 97 ;;
al@274 98 esac
al@274 99
al@274 100 if [ -n "$arch" ]; then
al@274 101 remote="$remote$arch/"
al@274 102 local="$local$arch/"
pankso@189 103 fi
pankso@1 104 }
pankso@1 105
pascal@142 106 # Bind a directory into the chroot
pascal@142 107 bind_chroot_dir()
pascal@142 108 {
pascal@142 109 mkdir -p $1 $2
pascal@142 110 mount -o bind $1 $2
pascal@142 111 }
pascal@142 112
al@274 113 # Mount virtual Kernel file systems and chroot, but check that nobody
pankso@1 114 # else has done mounts
pankso@1 115 mount_chroot()
pankso@1 116 {
al@274 117 if [ ! -d "$rootfs/proc/1" ]; then
al@274 118 newline
al@274 119 action 'Mounting virtual filesystems...'
al@306 120 mount -n -t tmpfs none $rootfs/dev
al@306 121 mknod -m 622 $rootfs/dev/console c 5 1
al@306 122 mknod -m 666 $rootfs/dev/null c 1 3
al@306 123 mknod -m 666 $rootfs/dev/zero c 1 5
al@306 124 mknod -m 666 $rootfs/dev/ptmx c 5 2
al@306 125 mknod -m 666 $rootfs/dev/tty c 5 0
al@306 126 mknod -m 444 $rootfs/dev/random c 1 8
al@306 127 mknod -m 444 $rootfs/dev/urandom c 1 9
al@306 128 chown root:tty $rootfs/dev/console
al@306 129 chown root:tty $rootfs/dev/ptmx
al@306 130 chown root:tty $rootfs/dev/tty
al@306 131
al@306 132 ln -s /proc/self/fd $rootfs/dev/fd
al@306 133 ln -s /proc/self/fd/0 $rootfs/dev/stdin
al@306 134 ln -s /proc/self/fd/1 $rootfs/dev/stdout
al@306 135 ln -s /proc/self/fd/2 $rootfs/dev/stderr
al@306 136 ln -s /proc/kcore $rootfs/dev/core
al@306 137 mkdir $rootfs/dev/pts
al@306 138 mkdir $rootfs/dev/shm
al@306 139
al@306 140 mount -t devpts -o gid=4,mode=620 none $rootfs/dev/pts
al@306 141 mount -t tmpfs none $rootfs/dev/shm
al@306 142
al@306 143 mount -t proc proc $rootfs/proc
al@306 144 mount -t sysfs sysfs $rootfs/sys
pankso@1 145 status
pankso@1 146 fi
al@274 147 # Mount source, so they can be shared between cooking/stable/undigest.
al@274 148 # But do it only if it's a SliTaz development chroot.
al@274 149 fs="$rootfs/home/slitaz"
pankso@81 150 if [ -d "$slitaz" ]; then
pankso@174 151 bind_chroot_dir $SLITAZ_HOME/src $fs/src
al@274 152 # Now mount package dir, so they are in /home/slitaz/$version
al@274 153 # We may not mount cache wok or others: it has no point and if
paul@275 154 # one wants to use a shared wok, one can bind it manually.
al@274 155 [ -n "$arch" ] && slitaz="$slitaz/$arch"
al@274 156 mkdir -p "$fs/packages" "$slitaz/packages"
al@274 157 bind_chroot_dir "$slitaz/packages" "$fs/packages"
pankso@80 158 fi
pankso@1 159 }
pankso@1 160
pankso@180 161 # Unmount virtual Kernel file systems.
pankso@180 162 umount_chroot() {
al@274 163 [ -n "$1" ] && rootfs="$1"
al@274 164 fs="$rootfs/home/slitaz"
al@274 165 newline
al@274 166 action 'Unmounting virtual filesystems...'
pankso@81 167 umount $rootfs/dev/shm
pankso@81 168 umount $rootfs/dev/pts
al@306 169 umount $rootfs/dev
pankso@81 170 umount $rootfs/sys
pankso@81 171 umount $rootfs/proc
pankso@180 172 if mount | fgrep -q $fs/src; then
pankso@180 173 umount $fs/src
pankso@180 174 umount $fs/packages
pankso@180 175 fi
al@274 176 status
al@274 177 newline
pankso@1 178 }
pankso@1 179
pankso@1 180 # Get the last cooking base rootfs, extract and configure.
pankso@180 181 gen_chroot() {
al@274 182 title "Generating new chroot in $rootfs"
al@274 183
slaxemulator@85 184 mkdir -p $rootfs
al@274 185 # We may gen cooking chroot from a stable version or vice versa
pankso@183 186 case "$version" in
al@274 187 stable*|4.0*|backports)
al@274 188 url="http://$MIRROR/packages/stable/" ;;
al@274 189 *)
al@274 190 url="http://$MIRROR/packages/cooking/" ;;
pankso@183 191 esac
al@274 192
pankso@183 193 # --mirror=
al@274 194 [ -n "$mirror" ] && url="$mirror"
al@274 195 mpath="/var/lib/tazpkg/mirror"
pascal@205 196 mkdir -p $(dirname $rootfs$mpath)
pascal@205 197 echo "$url" > $rootfs$mpath
al@274 198
al@274 199 action "Mirror URL: ${url#http://}"
al@274 200 tazpkg recharge --root="$rootfs" --quiet >/dev/null
pankso@183 201 status
al@274 202
al@274 203 for pkg in $CHROOT_PKGS; do
al@274 204 action "Installing: $pkg $vers"
al@274 205 tazpkg -gi $pkg --root="$rootfs" --quiet
pankso@183 206 status
pankso@180 207 done
al@274 208
al@274 209 action "Creating resolv.conf..."
pankso@81 210 cat /etc/resolv.conf > $rootfs/etc/resolv.conf
pankso@1 211 status
al@274 212
al@274 213 action "Creating TZ..."
pascal@198 214 cat /etc/TZ > $rootfs/etc/TZ
pascal@198 215 status
al@274 216
pankso@183 217 case "$version" in
pankso@183 218 cooking) version="" ;;
pankso@183 219 esac
pankso@183 220 [ "$arch" ] && version="$version --arch=$arch"
al@274 221 footer "Ready to chroot with: $(colorize 34 "tazdev -c $version")"
pankso@1 222 }
pankso@1 223
pankso@208 224 #
pankso@208 225 # Commands
pankso@208 226 #
pankso@1 227
pankso@1 228 case "$1" in
pankso@183 229 stats|-s)
al@274 230 title "Statistics for $PROJECTS"
al@274 231 printf "%-23s %-13s %-15s %s\n" 'Project' 'Revision' 'Version' 'Files'
al@274 232 separator '-'
al@274 233 cd $PROJECTS
al@274 234 for proj in *; do
pankso@1 235 rev=""
al@274 236 if [ -d "$PROJECTS/$proj/.hg" ]; then
al@274 237 cd $PROJECTS/$proj
al@274 238 rev=$(hg head --template '{rev};' | sed 's|;$||') # we have multiple heads in some projects
al@274 239 vers=$(hg tags | grep -v tip | head -n1 | cut -d" " -f1) # some projects don't have any version tags
pankso@273 240 files=$(find . -type f | wc -l)
al@274 241 printf "%-23s %-13s %-15s %s\n" "$proj" "$rev" "${vers:--}" "$files"
pankso@1 242 fi
pankso@1 243 done
al@274 244 footer
al@274 245 ;;
al@274 246
pankso@180 247 chroot|-c)
pankso@82 248 # Chroot into a build env. Default to cooking configured in tazdev.conf
al@274 249 check_root $1
pankso@1 250 get_version $@
al@274 251 [ -d "$2" ] && rootfs="$2"
pankso@1 252 mount_chroot
pankso@82 253 echo -e "Chrooting to: $rootfs\n"
pankso@81 254 chroot $rootfs /bin/sh --login
al@274 255 umount_chroot
al@274 256 ;;
al@274 257
pankso@273 258 umchroot|-uc)
al@274 259 check_root $1
pankso@80 260 get_version $@
al@274 261 [ -d "$2" ] && rootfs="$2"
al@274 262 umount_chroot $rootfs
al@274 263 ;;
al@274 264
pankso@77 265 gen-chroot|-gc)
al@274 266 check_root $1
pankso@180 267 # We can use: --rootfs=/path/to/chroot
al@274 268 [ -n "$rootfs" ] || get_version $@
al@274 269
al@274 270 # If --clean or --forced option given
al@274 271 [ -n "$clean$forced" ] && $0 -cc --rootfs=$rootfs
al@274 272
al@274 273 # Don't break another env.
al@274 274 [ -d "$rootfs/bin" ] &&
al@274 275 die "A chroot environment already exists in $rootfs.\nUse --clean or --forced to clean this chroot."
al@274 276
al@274 277 gen_chroot
al@274 278 ;;
al@274 279
pankso@183 280 clean-chroot|-cc)
al@274 281 check_root $1
pankso@183 282 # We can use: --rootfs=/path/to/chroot
al@274 283 [ -n "$rootfs" ] || get_version $@
al@274 284
al@274 285 [ ! -d "$rootfs" ] && die "Chroot '$rootfs' doesn't exist"
al@274 286
al@274 287 [ -d "$rootfs/proc/1" ] && die "WARNING: $rootfs/proc mounted!"
al@274 288
pankso@81 289 cd $rootfs || exit 1
al@274 290
al@274 291 title "Cleaning chroot $rootfs"
pankso@183 292 # Keep root/ and /home they may have a build wok, custom scripts, etc.
al@274 293 for i in boot bin dev etc lib media mnt proc sbin sys tmp usr var run; do
pankso@181 294 if [ -d "$i" ]; then
al@274 295 action "Removing: $i ($(du -sh $i | awk '{ print $1 }'))..."
al@274 296 rm -rf $i
al@274 297 status
pankso@181 298 fi
pankso@1 299 done
pankso@181 300 rm -f init
al@274 301 footer
al@274 302 ;;
al@274 303
pankso@70 304 push|-p)
pankso@1 305 check_mirror $@
pankso@113 306 rsync -r -t -O -l -v -z --delete \
al@274 307 $local -e ssh $user@$MIRROR:$remote
al@274 308 ;;
al@274 309
pankso@70 310 dry-push|-dp)
pankso@1 311 check_mirror $@
pankso@113 312 rsync -r -t -O -l -v -z --delete --dry-run \
al@274 313 $local -e ssh $user@$MIRROR:$remote
al@274 314 ;;
al@274 315
pankso@1 316 pull)
pankso@1 317 check_mirror $@
pankso@1 318 rsync -r -t -l -v -z --delete \
al@274 319 -e ssh $user@$MIRROR:$remote $local
al@274 320 ;;
al@274 321
pankso@1 322 dry-pull)
pankso@1 323 check_mirror $@
pankso@1 324 rsync -r -t -l -v -z --delete --dry-run \
al@274 325 -e ssh $user@$MIRROR:$remote $local
al@274 326 ;;
al@274 327
pankso@273 328 up-repos|-ur)
pankso@210 329 # Update all at once.
al@274 330 title "Update all SliTaz Hg repos"
al@274 331 for p in $(ls $PROJECTS); do
al@274 332 title "Project $p"
al@274 333 cd $PROJECTS/$p
pankso@210 334 hg pull -u
pankso@210 335 done
al@274 336 footer
al@274 337 ;;
al@274 338
pankso@70 339 relpkg|-rp)
pankso@82 340 # Release a slitaz sub-project and upload tarball to mirror
pankso@1 341 [ -z "$MIRROR_SOURCES" ] && MIRROR_SOURCES="/var/www/slitaz/mirror/sources"
al@274 342 [ -z "$2" ] && die "Usage: $0 relpkg package [version]"
al@274 343
pankso@81 344 pkg=$2
al@274 345 version="$3"
al@274 346
erjo@191 347 # We can get the last found version in .hgtags
al@274 348 [ -n "$version" ] ||
al@274 349 version=$(awk 'END{print $2}' $PROJECTS/$pkg/.hgtags)
erjo@191 350
al@274 351 newline
al@274 352 cd $PROJECTS/$pkg
pankso@177 353
pankso@1 354 # Sanity check
al@274 355 grep -q $version$ .hgtags ||
al@274 356 die "Missing Hg tag for version $version\nYou may want to: hg tag $version; hg push\n"
pankso@177 357
pankso@1 358 # Archive
al@274 359 action "Creating tarball and md5sum for $pkg-$version..."
erjo@191 360 hg archive -t tgz $SOURCE/$pkg-$version.tar.gz
erjo@191 361 ( cd $SOURCE; md5sum $pkg-$version.tar.gz > $pkg-$version.md5 )
al@274 362 status
pankso@177 363
pankso@1 364 # Upload
al@274 365 confirm 'Do you wish to upload tarball to the mirror?' 'n' &&
al@274 366 {
al@274 367 cd $SOURCE
al@274 368 echo "Uploading to $MIRROR/sources/${pkg#slitaz-}"
al@274 369 scp "$pkg-$version.tar.gz" "$pkg-$version.md5" \
erjo@191 370 $MIRROR:$MIRROR_SOURCES/${pkg#slitaz-}
al@274 371 }
pankso@177 372
pankso@147 373 # Update pkg in wok
al@274 374 confirm "Do you wish to update $pkg in wok?" 'n' &&
al@274 375 {
al@274 376 action "Updating $pkg: $version"
pankso@147 377 cd $PROJECTS/wok
pankso@147 378 sed -i s"/VERSION=.*/VERSION=\"$version\"/" $pkg*/receipt
pankso@174 379 status
al@274 380 }
al@274 381 ;;
al@274 382
pankso@273 383 setup-cgi|-sc)
pankso@273 384 . /etc/slitaz/slitaz.conf
al@274 385 echo "$(boldify 'Public:') $PUBLIC"
al@274 386 mkdir -p $PUBLIC/cgi-bin
al@274 387 cd $PUBLIC/cgi-bin
pankso@273 388 for proj in tazbug tinycm mediabox; do
al@274 389 [ -d "$proj" ] || hg clone http://hg.slitaz.org/$proj
pankso@273 390 done
al@274 391 [ -d "$INSTALLED/lighttpd" ] || sudo tazpkg -gi lighttpd
al@274 392
pankso@273 393 echo
paul@275 394 echo "TODO: setup SCN (tinycm install + plugins from slitaz-forge)"
pankso@273 395 echo
al@274 396 echo "$(boldify 'URL :') http://localhost/~$USER/cgi-bin/"
al@274 397 ;;
al@274 398
pankso@174 399 help)
al@274 400 doc='/usr/share/doc/slitaz/'
al@274 401 topics="Available help topics: $(cd $doc; ls *.txt | sed 's|.txt$||' | tr '\n' ' ')"
al@274 402 [ -n "$2" ] ||
al@274 403 die "Missing tool/library name\nExample: tazdev help httphelper\n\n$topics"
al@274 404
al@274 405 if [ -f "$doc$2.txt" ]; then
al@274 406 {
al@274 407 output='raw' title "Help for $2"
al@274 408 cat $doc$2.txt
al@274 409 footer
al@274 410 } | less -M
al@274 411 else
al@274 412 echo "No help found for '$2'"
al@274 413 longline "$topics"
pankso@273 414 fi
al@274 415 ;;
al@274 416
al@274 417 usage|*)
al@274 418 usage
al@274 419 ;;
al@274 420
pankso@1 421 esac
pankso@1 422
pankso@1 423 exit 0