# HG changeset patch # User Pascal Bellard # Date 1372529899 -7200 # Node ID 182ffcf8e9ebb9a0657368c691028156a8e8445c # Parent 785703fb2975ea1ef4e474ea153166917c0892ad Add tazpanel files diff -r 785703fb2975 -r 182ffcf8e9eb COPYING --- a/COPYING Wed Mar 20 16:50:02 2013 +0000 +++ b/COPYING Sat Jun 29 20:18:19 2013 +0200 @@ -2,7 +2,7 @@ =============================================================================== -Copyright (c) 2007-2011 SliTaz GNU/Linux +Copyright (c) 2007-2013 SliTaz GNU/Linux Français diff -r 785703fb2975 -r 182ffcf8e9eb Makefile --- a/Makefile Wed Mar 20 16:50:02 2013 +0000 +++ b/Makefile Sat Jun 29 20:18:19 2013 +0200 @@ -68,6 +68,10 @@ # Documentation install -m 0755 -d $(DESTDIR)$(DOCDIR)/tazpkg cp -a doc/* $(DESTDIR)$(DOCDIR)/tazpkg + # tazpanel files + install -m 0755 -d $(DESTDIR)/var/www/tazpanel/menu.d + cp -a pkgs.cgi $(DESTDIR)/var/www/tazpanel + cp -a pkgs $(DESTDIR)/var/www/tazpanel/menu.d # The i18n files install -m 0755 -d $(DESTDIR)$(PREFIX)/share/locale cp -a po/mo/* $(DESTDIR)$(PREFIX)/share/locale @@ -82,6 +86,8 @@ uninstall: rm -f $(DESTDIR)$(PREFIX)/bin/tazpkg rm -f $(DESTDIR)$(PREFIX)/bin/tazpkg-box + rm -f $(DESTDIR)$(PREFIX)/var/www/tazpanel/menu.d/pkgs + rm -f $(DESTDIR)$(PREFIX)/var/www/tazpanel/pkgs.cgi rm -rf $(DESTDIR)$(PREFIX)/tazpkg-notify rm -rf $(DESTDIR)$(DOCDIR)/tazpkg rm -f $(DESTDIR)$(SYSCONFDIR)/tazpkg.conf diff -r 785703fb2975 -r 182ffcf8e9eb pkgs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkgs Sat Jun 29 20:18:19 2013 +0200 @@ -0,0 +1,14 @@ +cat <$(gettext 'Packages') + + +EOT diff -r 785703fb2975 -r 182ffcf8e9eb pkgs.cgi --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkgs.cgi Sat Jun 29 20:18:19 2013 +0200 @@ -0,0 +1,996 @@ +#!/bin/sh +# +# TazPKG CGI interface - Manage packages via a browser +# +# This CGI interface extensively uses tazpkg to manage packages and have +# its own code for some tasks. Please KISS, it is important and keep speed +# in mind. Thanks, Pankso. +# +# (C) 2011 SliTaz GNU/Linux - BSD License +# + +. lib/libtazpanel +get_config +header + +# xHTML 5 header with special side bar for categories. +TITLE=$(gettext 'TazPanel - Packages') +xhtml_header | sed 's/id="content"/id="content-sidebar"/' + +pkg_info_link() +{ + echo "$SCRIPT_NAME?info=$1" | sed 's/+/%2B/g' +} + +i18n_desc() { + # Display localized short description + if [ -e "$LOCALSTATE/packages-desc.$LANG" ]; then + LOCDESC=$(grep -e "^$pkg " $LOCALSTATE/packages-desc.$LANG | cut -d' ' -f2) + [ "x$LOCDESC" != "x" ] && SHORT_DESC="$LOCDESC" + fi +} + +# We need packages information for list and search +parse_packages_desc() { + IFS="|" + cut -f 1,2,3,5 -d "|" | while read PACKAGE VERSION SHORT_DESC WEB_SITE + do + image=tazpkg-installed.png + [ -d $INSTALLED/${PACKAGE% } ] || image=tazpkg.png + i18n_desc + cat << EOT + + + $PACKAGE +$VERSION +$SHORT_DESC + + +EOT + done + unset IFS +} + +# Display a full summary of packages stats +packages_summary() { + cat << EOT + + + +EOT + stat=$(stat -c %y $LOCALSTATE/packages.list | \ + sed 's/\(:..\):.*/\1/' | awk '{print $1}') + mtime=$(find $LOCALSTATE/packages.list -mtime +10) + echo -n " + + + + + + + + + + + +
$(gettext 'Last recharge:')$stat " + if [ "$mtime" ]; then + gettext '(Older than 10 days)'; echo + else + gettext '(Not older than 10 days)'; echo + fi + cat << EOT +
$(gettext 'Installed packages:')$(ls $INSTALLED | wc -l)
$(gettext 'Mirrored packages:')$(cat $LOCALSTATE/packages.list | wc -l)
$(gettext 'Upgradeable packages:')$(cat $LOCALSTATE/packages.up | wc -l)
$(gettext 'Installed files:')$(cat $INSTALLED/*/files.list | wc -l)
$(gettext 'Blocked packages:')$(cat $LOCALSTATE/blocked-packages.list | wc -l)
+EOT +} + +# Parse mirrors list to be able to have an icon and remove link +list_mirrors() { + while read line + do + cat << EOT +
  • + + + + + + + $line +
  • +EOT + done < $1 +} + +# Parse repositories list to be able to have an icon and remove link +list_repos() { + ls $LOCALSTATE/undigest 2> /dev/null | while read repo ; do + cat < + $repo +EOT + done +} + +# +# xHTML functions +# + +# ENTER will search but user may search for a button, so put one. +search_form() { + [ -n "$repo" ] || repo="$(GET repo)" + [ -n "$repo" ] || repo=Any + cat << EOT + +EOT +} + +table_head() { + cat << EOT + + + $(gettext 'Name') + $(gettext 'Version') + $(gettext 'Description') + $(gettext 'Web') + + +EOT +} + +sidebar() { + [ -n "$repo" ] || repo=Public + cat << EOT +" +} + +repo_list() { + if [ -n "$(ls $LOCALSTATE/undigest/ 2> /dev/null)" ]; then + case "$repo" in + Public) ;; + ""|Any) for i in $LOCALSTATE/undigest/* ; do + [ -d "$i" ] && echo "$i$1" + done ;; + *) echo "$LOCALSTATE/undigest/$repo$1" + return ;; + esac + fi + echo "$LOCALSTATE$1" +} + +repo_name() { + case "$1" in + $LOCALSTATE) echo "Public" ;; + $LOCALSTATE/undigest/*) echo ${1#$LOCALSTATE/undigest/} ;; + esac +} + +# +# Commands +# + +case " $(GET) " in + *\ list\ *) + # + # List installed packages. This is the default because parsing + # the full packages.desc can be long and take up some resources + # + cd $INSTALLED + search_form + sidebar + LOADING_MSG="$(gettext 'Listing packages...')" + loading_msg + cat << EOT +

    $(gettext 'My packages')

    +
    + +
    +
    + $(gettext 'Selection:') + +
    + +
    +EOT + cat << EOT + +$(table_head) + +EOT + for pkg in * + do + . $pkg/receipt + echo '' + # Use default tazpkg icon since all packages displayed are + # installed + colorpkg=$pkg + grep -qs "^$pkg$" $LOCALSTATE/blocked-packages.list && + colorpkg="$pkg" + i18n_desc + cat << EOT + + + + + +EOT + done + cat << EOT + +
    + + $colorpkg$VERSION$SHORT_DESC
    +
    +EOT + ;; + + *\ linkable\ *) + # + # List linkable packages. + # + cd $INSTALLED + search_form + sidebar + LOADING_MSG=$(gettext 'Listing linkable packages...') + loading_msg + cat << EOT +

    $(gettext 'Linkable packages')

    + +
    + +
    +
    + $(gettext 'Selection:') + +
    + +
    +EOT + cat << EOT + +$(table_head) + +EOT + target=$(readlink $LOCALSTATE/fslink) + for pkg in $(ls $target/$INSTALLED) + do + [ -s $pkg/receipt ] && continue + . $target/$INSTALLED/$pkg/receipt + i18n_desc + cat << EOT + + + + + + +EOT + done + cat << EOT + +
    + + $pkg + $VERSION$SHORT_DESC
    +
    +EOT + ;; + + + *\ cat\ *) + # + # List all available packages by category on mirror. Listing all + # packages is too resource intensive and not useful. + # + cd $LOCALSTATE + repo=$(GET repo) + category=$(GET cat) + [ "$category" == "cat" ] && category="base-system" + grep_category=$category + [ "$grep_category" == "all" ] && grep_category=".*" + search_form + sidebar | sed "s/active_$category/active/;s/repo_$repo/active/" + LOADING_MSG="$(gettext 'Listing packages...')" + loading_msg + cat << EOT +

    $(eval_gettext 'Category: $category')

    + +
    + +EOT + for i in $(repo_list ""); do + if [ "$repo" != "Public" ]; then + Repo_Name="$(repo_name $i)" + cat << EOT +

    $(eval_gettext "Repository: \$Repo_Name")

    +EOT + fi + cat << EOT + +$(table_head) + +EOT + grep "| $grep_category |" $i/packages.desc | \ + parse_packages_desc + cat << EOT + +
    +EOT + done + echo '
    ' ;; + + + *\ search\ *) + # + # Search for packages. Here default is to search in packages.desc + # and so get result including packages names and descriptions + # + pkg=$(GET search) + repo=$(GET repo) + cd $LOCALSTATE + search_form + sidebar | sed "s/repo_$repo/active/" + LOADING_MSG="$(gettext 'Searching packages...')" + loading_msg + cat << EOT +

    $(gettext 'Search packages')

    +
    + + + + +EOT + if [ "$(GET files)" ]; then + cat < + + + + + + +EOT + unlzma -c $(repo_list /files.list.lzma) \ + | grep -Ei ": .*$(GET search)" | \ + while read PACKAGE FILE; do + PACKAGE=${PACKAGE%:} + image=tazpkg-installed.png + [ -d $INSTALLED/$PACKAGE ] || image=tazpkg.png + cat << EOT + + + + +EOT + done + else + cat << EOT +$(table_head) + +EOT + grep -ih $pkg $(repo_list /packages.desc) | \ + parse_packages_desc + fi + cat << EOT + +
    $(gettext 'Package')$(gettext 'File')
    + $PACKAGE$FILE
    +
    +EOT + ;; + + + *\ recharge\ *) + # + # Lets recharge the packages list + # + search_form + sidebar + LOADING_MSG="$(gettext 'Recharging lists...')" + loading_msg + cat << EOT +

    $(gettext 'Recharge')

    + +
    +
    +
    +

    $(gettext 'Recharge checks for new or updated packages')

    +
    + +
    +
    +
    +EOT
    +		echo $(gettext 'Recharging packages list') | log
    +		tazpkg recharge | filter_taztools_msgs
    +		cat << EOT
    +
    +
    +

    $(gettext "Packages lists are up-to-date. You should check for upgrades \ +now.")

    +EOT + ;; + + + *\ up\ *) + # + # Upgrade packages + # + cd $LOCALSTATE + search_form + sidebar + LOADING_MSG="$(gettext 'Checking for upgrades...')" + loading_msg + cat << EOT +

    $(gettext 'Up packages')

    + + + +EOT + tazpkg up --check >/dev/null + cat << EOT + +$(table_head) + +EOT + for pkg in `cat packages.up` + do + grep -hs "^$pkg |" $LOCALSTATE/packages.desc \ + $LOCALSTATE/undigest/*/packages.desc | \ + parse_packages_desc + done + cat << EOT + +
    +
    +EOT + ;; + + + *\ do\ *) + # + # Do an action on one or some packages + # + opt="" + pkgs="" + cmdline=$(echo ${QUERY_STRING#do=} | sed s'/&/ /g') + cmd=$(echo ${cmdline} | awk '{print $1}') + cmdline=${cmdline#*repo=* } + pkgs=$(echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//) + pkgs="$(httpd -d "$pkgs")" + cmd=$(echo $cmd | tr [:upper:] [:lower:]) + case $cmd in + install) + cmd=get-install opt=--forced + LOADING_MSG="get-installing packages..." + ;; + link) + opt=$(readlink $LOCALSTATE/fslink) + LOADING_MSG="linking packages..." + ;; + esac + search_form + sidebar + loading_msg + cat << EOT +

    Tazpkg: $cmd

    + +
    +
    +
    +

    $(gettext 'Performing tasks on packages')

    +
    + +
    +
    +$(eval_gettext 'Executing $cmd for: $pkgs') +
    +EOT + for pkg in $pkgs + do + echo '
    '
    +			    echo $(gettext 'y') | tazpkg $cmd $pkg $opt 2>/dev/null | filter_taztools_msgs
    +			echo '
    ' + done ;; + + + *\ info\ *) + # + # Packages info + # + pkg=$(GET info) + search_form + sidebar + if [ -d $INSTALLED/$pkg ]; then + . $INSTALLED/$pkg/receipt + files=`cat $INSTALLED/$pkg/files.list | wc -l` + action="Remove" + action_i18n=$(gettext 'Remove') + else + cd $LOCALSTATE + LOADING_MSG=$(gettext 'Getting package info...') + loading_msg + IFS='|' + set -- $(grep -hs "^$pkg |" packages.desc \ + undigest/*/packages.desc) + unset IFS + PACKAGE=$1 + VERSION="$(echo $2)" + SHORT_DESC="$(echo $3)" + CATEGORY="$(echo $4)" + WEB_SITE="$(echo $5)" + action="Install" + action_i18n=$(gettext 'Install') + temp="$(echo $pkg | sed 's/get-//g')" + fi + cat << EOT +

    $(eval_gettext 'Package $PACKAGE')

    + +
    +
    +

    +EOT + if [ "$temp" != "$pkg" -a "$action" == "Install" ]; then + temp="$(echo $pkg | sed 's/get-//g')" + echo "$(gettext 'Install (Non Free)')" + else + echo "$action_i18n" + fi + + if [ -d $INSTALLED/$pkg ]; then + if grep -qs "^$pkg$" $LOCALSTATE/blocked-packages.list; then + cat << EOT + $(gettext 'Unblock') +EOT + else + cat << EOT + $(gettext 'Block') +EOT + fi + cat << EOT + $(gettext 'Repack') +EOT + fi + i18n_desc + cat << EOT +

    +
    + +
    + + + + + + +EOT + if [ -d $INSTALLED/$pkg ]; then + cat << EOT + + + +EOT + if [ -n "$DEPENDS" ]; then + echo "" + fi + if [ -n "$SUGGESTED" ]; then + echo "" + fi + [ -n "$TAGS" ] && echo "" + I_FILES=$(cat $INSTALLED/$pkg/files.list | wc -l) + cat << EOT + +
    $(gettext 'Name:')$PACKAGE
    $(gettext 'Version:')$VERSION
    $(gettext 'Description:')$SHORT_DESC
    $(gettext 'Category:')$CATEGORY
    $(gettext 'Maintainer:')$MAINTAINER
    $(gettext 'Website:')$WEB_SITE
    $(gettext 'Sizes:')$PACKED_SIZE/$UNPACKED_SIZE
    $(gettext 'Depends:')" + for i in $DEPENDS; do + echo -n "$i " + done + echo "
    $(gettext 'Suggested:')" + for i in $SUGGESTED; do + echo -n "$i " + done + echo "
    $(gettext 'Tags:')$TAGS
    + +

    $(eval_gettext 'Installed files: $I_FILES')

    + +
    $(cat $INSTALLED/$pkg/files.list)
    +EOT + else + cat << EOT +$(gettext 'Website:')$WEB_SITE +$(gettext 'Sizes:')$(grep -hsA 3 ^$pkg$ packages.txt undigest/*/packages.txt | \ + tail -n 1 | sed 's/ *//') + + +

    $(gettext 'Installed files:')

    + +
    +`unlzma -c files.list.lzma undigest/*/files.list.lzma 2> /dev/null | \
    + sed "/^$pkg: /!d;s/^$pkg: //"`
    +
    +EOT + fi + ;; + + + *\ admin\ * ) + # + # Tazpkg configuration page + # + cmd=$(GET admin) + case "$cmd" in + clean) + rm -rf /var/cache/tazpkg/* ;; + add-mirror) + # Decode url + mirror=$(GET mirror) + case "$mirror" in + http://*|ftp://*) + echo "$mirror" >> $(GET file) ;; + esac ;; + rm-mirror=http://*|rm-mirror=ftp://*) + mirror=${cmd#rm-mirror=} + sed -i -e "s@$mirror@@" -e '/^$/d' $(GET file) ;; + select-mirror*) + release=`cat /etc/slitaz-release` + mirror="$(GET mirror)packages/$release/" + tazpkg setup-mirror $mirror | log + ;; + add-repo) + # Decode url + mirror=$(GET mirror) + repository=$LOCALSTATE/undigest/$(GET repository) + case "$mirror" in + http://*|ftp://*) + mkdir -p $repository + echo "$mirror" > $repository/mirror + echo "$mirror" > $repository/mirrors ;; + esac ;; + rm-repo=*) + repository=${cmd#rm-repo=} + rm -rf $LOCALSTATE/undigest/$repository ;; + esac + [ "$cmd" == "$(gettext 'Set link')" ] && + [ -d "$(GET link)/$INSTALLED" ] && + ln -fs $(GET link) $LOCALSTATE/fslink + [ "$cmd" == "$(gettext 'Remove link')" ] && + rm -f $LOCALSTATE/fslink + cache_files=`find /var/cache/tazpkg -name *.tazpkg | wc -l` + cache_size=`du -sh /var/cache/tazpkg` + sidebar + cat << EOT +

    $(gettext 'Administration')

    +
    +

    $(gettext 'Tazpkg administration and settings')

    +
    + +EOT + case "$(GET action)" in + saveconf) + LOADING_MSG=$(gettext 'Creating the package...') + loading_msg + echo "
    "
    +					cd $HOME
    +					tazpkg repack-config | filter_taztools_msgs
    +					echo -n "$(gettext 'Path:') " && ls $HOME/config-*.tazpkg
    +					echo "
    " ;; + listconf) + echo "

    $(gettext 'Configuration files')

    " + echo "
      " + tazpkg list-config | while read file; do + [ "${file:0:1}" == "/" ] || continue + if [ -e $file ]; then + echo "
    • $file
    • " + else + echo "
    • $file
    • " + fi + done + echo "
    " + echo "" ;; + quickcheck) + LOADING_MSG=$(gettext 'Checking packages consistency...') + loading_msg + echo "
    "
    +					tazpkg check
    +					echo "
    " ;; + fullcheck) + LOADING_MSG=$(gettext 'Full packages check...') + loading_msg + echo "
    "
    +					tazpkg check --full
    +					echo "
    " ;; + esac + cat << EOT +

    $(gettext 'Packages cache')

    + +
    + +

    + $(eval_gettext 'Packages in the cache: $cache_files ($cache_size)') + + +

    + +
    + +

    $(gettext 'Default mirror')

    + +
    $(cat /var/lib/tazpkg/mirror)
    + +

    $(gettext 'Current mirror list')

    +EOT + for i in $LOCALSTATE/mirrors $LOCALSTATE/undigest/*/mirrors; do + [ -s $i ] || continue + echo '
    ' + if [ $i != $LOCALSTATE/mirrors ]; then + Repo_Name="$(repo_name $(dirname $i))" + echo "

    $(eval_gettext 'Repository: $Repo_Name')

    " + fi + echo "
      " + list_mirrors $i + echo "
    " + cat << EOT +
    +
    +

    + + + + +

    +
    +EOT + done + echo "

    $(gettext 'Private repositories')

    " + [ -n "$(ls $LOCALSTATE/undigest 2> /dev/null)" ] && cat << EOT +
    +
      + $(list_repos) +
    +
    +EOT + cat << EOT +
    +

    + + $(gettext 'Name') + $(gettext 'mirror') + + +

    +
    + +

    $(gettext 'Link to another SliTaz installation')

    + +

    $(gettext "This link points to the root of another SliTaz installation. \ +You will be able to install packages using soft links to it.")

    + +
    +

    + + + + +

    +
    +EOT + version=$(cat /etc/slitaz-release) + cat << EOT + +

    $(gettext 'SliTaz packages DVD')

    + +

    $(eval_gettext "A bootable DVD image of all available packages for the \ +\$version version is generated every day. It also contains a copy of the \ +website and can be used without an internet connection. This image can be \ +installed on a DVD or an USB key.")

    + +
    +
    +

    + + $(gettext 'Download DVD image') + + $(gettext 'Install from DVD/USB key') +

    +
    + $(gettext 'Install from ISO image:') + +
    +
    +
    +EOT + if [ "$(GET action)" == "dvdimage" ]; then + dev=$(POST dvdimage) + mkdir -p /mnt/packages 2> /dev/null + echo "
    "
    +			mount -t iso9660 -o loop,ro $dev /mnt/packages &&
    +			/mnt/packages/install.sh &&
    +			echo "$dev is installed on /mnt/packages"
    +			echo "
    " + fi + if [ "$(GET action)" == "dvdusbkey" ]; then + mkdir -p /mnt/packages 2> /dev/null + for tag in "LABEL=\"packages-$version\" TYPE=\"iso9660\"" \ + "LABEL=\"sources-$version\" TYPE=\"iso9660\"" ; do + dev=$(blkid | grep "$tag" | cut -d: -f1) + [ -n "$dev" ] || continue + echo "
    "
    +				mount -t iso9660 -o ro $dev /mnt/packages &&
    +				/mnt/packages/install.sh &&
    +				echo "$dev is installed on /mnt/packages"
    +				echo "
    " + break + done + fi + ;; + *) + # + # Default to summary + # + search_form + sidebar + [ -n "$(GET block)" ] && tazpkg block $(GET block) + [ -n "$(GET unblock)" ] && tazpkg unblock $(GET unblock) + cat << EOT +

    $(gettext 'Summary')

    + +
    + + $(gettext 'My packages') +EOT + fslink=$(readlink $LOCALSTATE/fslink) + [ -n "$fslink" -a -d "$fslink/$INSTALLED" ] && + cat << EOT + + $(gettext 'Linkable packages') +EOT + cat << EOT + + $(gettext 'Recharge list') + + $(gettext 'Check upgrades') + + $(gettext 'Administration') +
    + +$(packages_summary) + + +

    $(gettext 'Latest log entries')

    + +
    +`tail -n 5 /var/log/tazpkg.log | fgrep "-" | \
    +	awk '{print $1, $2, $3, $4, $5, $6, $7}'`
    +
    +EOT + ;; +esac + +# xHTML 5 footer +xhtml_footer +exit 0