Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/ash
- # slack2pup
- # convert a Slackware PACKAGES.TXT repo file, into a Puppy compatible repo file.
- # @TODO1 - get package categories from /usr/local/petget/categories.dat
- # @TODO2 - fix field 11 of package entries (should show 'slackware64' on x64?)
- . /etc/DISTRO_SPECS
- #if [ "$DISTRO_BINARY_COMPAT" != "slackware" ];then #@TODO2
- # echo "Sorry, you must be running a Slackware compatible Puppy Linux"
- # echo "to use this tool. Your Puppy is based on '$DISTRO_BINARY_COMPAT'"
- # exit 1
- #fi
- if [ "$1" = '-h' ] || [ "$1" = '-help' ] || [ "$1" = '--help' ] || [ "$(echo $1 | grep '^http')" = "" ];
- then
- echo "slack2pup - convert Slackware repos to Puppy repo files"
- echo ""
- echo "Usage examples:"
- echo ""
- echo " slack2pup http://site.com/path/to/PACKAGES.TXT"
- echo
- echo " slack2pup http://site.com/path/to/PACKAGES.TXT.gz"
- echo
- exit 1
- fi
- rm /tmp/PACKAGES.TXT /tmp/PACKAGES.TXT.gz &>/dev/null
- output_file="/tmp/PACKAGES.TXT"
- if [ "$(echo $1 | grep 'PACKAGES.TXT.gz')" != "" ];then
- output_file="/tmp/PACKAGES.TXT.gz"
- fi
- wget --quiet "$1" -O "$output_file" 1>/dev/null || download_failed=true
- if [ ! -f "$output_file" ] || [ "$download_failed" = true ];then
- echo
- echo "ERROR: the Slackware repo $1 not found"
- echo
- $0 -h
- exit 1
- fi
- echo "Found URL:"
- echo
- echo " ${1}"
- # we may have been given as repo name ($2)
- if [ "$2" != "" ];then
- repo_name="$2"
- fi
- while [ "$repo_name" = "" ]
- do
- # get repo name and filename
- echo
- echo "Choose a repo name (something like 'fatdog-720', 'alienbob-14.2', etc)"
- bash -c 'read -e -p "Enter a repo name: " repo_name; echo $repo_name > /tmp/pkg/repo_name'
- repo_name=$(cat /tmp/pkg/repo_name)
- done
- # replace any spaces or underscores with dashes, all lower case
- repo_name="$( echo "${repo_name// /-}" | tr '_' '-' | tr '[:upper:]' '[:lower:]' )"
- # if this repo is already added (its being updated), then we can get the repo filename
- repo_filename="$(cat ~/.pkg/sources-all | grep -m1 "^$repo_name|" | cut -f3 -d'|')"
- if [ "$DISTRO_BINARY_COMPAT" = "slackware" ];then
- slackware_version=$DISTRO_FILE_PREFIX
- else
- slackware_version="$(cat /root/.packages/$repo_filename | head -1 | cut -f12 -d'|')"
- fi
- # if we dont have a repo filename in ~/.pkg/sources-all, ask for one
- if [ "$(echo $repo_filename | grep '^Packages')" = "" ];then
- echo
- bash -c 'read -e -p "Enter a repo file name: " -i "Packages-slackware-$repo_name" repo_filename; echo $repo_filename > /tmp/pkg/repo_filename'
- repo_filename=$(cat /tmp/pkg/repo_filename)
- # replace any spaces or underscores with dashes, all lower case
- repo_filename="$( echo "${repo_filename// /-}" | tr '_' '-' )"
- # also ask for a slackware version
- while [ "$slackware_version" = "" ]
- do
- echo
- bash -c 'read -e -p "Enter the compatible Slackware version (14.0, 14.2, etc): " slackware_version; echo $slackware_version > /tmp/pkg/slackware_version'
- slackware_version=$(cat /tmp/pkg/slackware_version)
- done
- fi
- if [ "$output_file" = "/tmp/PACKAGES.TXT.gz" ];then
- gunzip "$output_file"
- fi
- # we have the /tmp/PACKAGES.TXT file, lets convert it
- rm /tmp/slackrepo /tmp/slackpkg* /tmp/slack_pkgext &>/dev/null
- count=1
- PACKAGES_PATH=PACKAGES.TXT
- echo
- echo "Processing packages, please wait... This may take a while.."
- cat "$PACKAGES_PATH" | awk -v PKGOS="$distro" -v PKGOSVER="$distro_ver" \
- 'function parse_pkg_name(s, txz_split,arch_build){
- match(s,/^([^\-]*)-([^\-]*)(\-.*)(/\.([^\.]*)$/,txz_split)
- PKG=txz_split[1]
- PKGVER=txz_split[2]
- split(txz_split[3],arch_build,"-")
- len=length(arch_build)
- if (if (len == 3) ){
- BUILD_NO=arch_build[len-1]
- ARCH=arch_build[len-2]
- }
- else if(len == 2){
- if (arch_build[len-1] ~ [\d]){
- BUILD_NO=arch_build[len-1]
- }
- else{
- ARCH=arch_build[len-1]
- }
- }
- }
- }
- }
- function maybe_parse_dec(s, line_split){
- if( PARSE_DEC_FLAG == 1){
- match($0,/(\S+):\s+(.*)$/,line_split)
- if(length(line_split) > 0){
- if (line_split[1] == PKG){
- PKGINFO=substr(line_split[2],1,200)
- PARSE_DEC_FLAG=0
- }
- }
- }
- /^PACKAGE NAME:/ { sub(/^PACKAGE NAME:\s*/,""); parse_pkg_name($0); }
- /^PACKAGE LOCATION:/ { sub(/^PACKAGE LOCATION:\s*/,""); PKGPATH=$0; }\
- /^PACKAGE SIZE (uncompressed):/ { sub(/^PACKAGE SIZE (uncompressed):\s*/,""); PKGSIZE=$0; }
- /^PACKAGE DESCRIPTION:/ { PARSE_DEC_FLAG=1}
- {maybe_parse_dec($0)}
- /^$/ { print PKG "_" PKGVER "|" PKG "|" PKGVER "|" BUILD_NO "|" PKGSECTION "|" PKGSIZE "K|" PKGPATH "|" PKGFILE "|" PKGDEP "|" PKGINFO "|" PKGOS "|" PKGOSVER "|" ;
- PKG=""; PKGVER=""; PKGSECTION="CATEGORY"; PKGSIZE=""; PKGFILE=""; PKGPATH=""; PKGDEP=""; PKGINFO=""; PKGPRIO=""; BUILD_NO=''; ARCH='' PARSE_DEC_FLAG=0; }
- ' > /tmp/$repo_filename
- #cat /tmp/PACKAGES.TXT | while read line
- #do
- # pkginfo="$(echo "$line" \
- # | grep -v '^PACKAGES.TXT;' \
- # | grep -m1 -E '^PACKAGE |)$' \
- # | grep -v '^PACKAGE DESCRIPTION:')"
- #
- # if [ "$pkginfo" != "" ];then
- #
- # echo "$line" >> "/tmp/slackpkg${count}"
- #
- # #pkgname=''
- # #pkgname="$(echo "$pkginfo" | grep 'PACKAGE NAME' | cut -f4 -d' ')"
- # #[ "$pkgname" != '' ] && echo "Processing $pkgname"
- #
- # fi
- #
- # if [ "$line" = "" -o "$line" = "\n" -o ! "$line" ] && \
- # [ -f "/tmp/slackpkg${count}" ];then
- #
- # pkgdesc=''
- # pkgdesc="$(cat "/tmp/slackpkg${count}" 2>/dev/null \
- # | grep -E ')$' \
- # | cut -f2 -d'(' \
- # | cut -f1 -d')')"
- #
- # if [ "pkgdesc" != "" -a "$pkgdesc" != "\n" -a "$pkgdesc" != " " ];then
- # echo "PACKAGE DESCRIPTION: $pkgdesc" >> "/tmp/slackpkg${count}"
- # fi
- #
- # pkgfile="$(cat /tmp/slackpkg${count} | grep -E "^PACKAGE")"
- # echo "$pkgfile" > /tmp/slackpkg${count}
- #
- # # we now have file like:
- # # /tmp/slackpkg13
- # #
- # # containing stuff like:
- # #
- # # PACKAGE NAME: eudev32-1.7-i686-1.txz
- # # PACKAGE LOCATION: .
- # # PACKAGE SIZE (compressed): 75 K
- # # PACKAGE SIZE (uncompressed): 260 K
- # # PACKAGE REQUIRED: kmod32
- # # PACKAGE CONFLICTS:
- # # PACKAGE SUGGESTS:
- # # PACKAGE DESCRIPTION: Device management
- #
- # # we need to convert each of them into pet.spec entries, and add all
- # # those into a Puppy compatible repo file:
- #
- # pkginfo="$(cat /tmp/slackpkg${count})"
- # pkg_fname="$(echo "$pkginfo" | grep -m1 '^PACKAGE NAME' | cut -f4 -d' ')"
- # pkg_name="${pkg_fname//.txz/}"
- # pkg_ext="txz"
- #
- # if [ "$pkg_name" = "$pkg_fname" ];then
- # pkg_name="${pkg_fname//.tar.xz/}"
- # pkg_ext="tar.xz"
- # fi
- # if [ "$pkg_name" = "$pkg_fname" ];then
- # pkg_name="${pkg_fname//.tgz/}"
- # pkg_ext="tgz"
- # fi
- # if [ "$pkg_name" = "$pkg_fname" ];then
- # pkg_name="${pkg_fname//.tar.gz/}"
- # pkg_ext="tar.gz"
- # fi
- #
- # [ ! -f /tmp/slack_pkgext ] && echo -n "$pkg_ext" > /tmp/slack_pkgext
- #
- # pkgname_only="$(echo ${pkg_name} | sed -e 's/-[0-9].*//g')"
- # dashes_in_name=$(echo "$pkgname_only" | tr '-' '\n' | wc -l)
- # cut_at=$((1 + ${dashes_in_name:-0}))
- # pkg_ver="$(echo ${pkg_name} | cut -f${cut_at} -d'-')"
- # pkg_build_no="$(echo ${pkg_name} | sed -e 's/.*-//' -e 's/_.*//g')"
- # pkg_cat="CATEGORY"
- # pkg_size="$(echo "$pkginfo" | grep -m1 '^PACKAGE SIZE' | cut -f5 -d' ')K"
- # pkg_path="$(echo "$pkginfo" | grep -m1 '^PACKAGE LOCATION' | cut -f4 -d' ' | sed -e 's/^\.//g' -e 's/^\///g')"
- # [ "$pkg_path" = "." ] && pkg_path=''
- # pkg_deps="$(echo "$pkginfo" | grep -m1 '^PACKAGE REQUIRED' | cut -f4-99 -d' ' | sed -e 's/,/,+/g' -e 's/,$//g' -e 's/ >= /-/g' -e 's/ <= /-/g' -e 's/ //g')"
- # [ "$pkg_deps" != "" ] && pkg_deps="+${pkg_deps}"
- # pkg_desc="$(echo "$pkginfo" | grep -m1 '^PACKAGE DESCR' | cut -f3-200 -d' ')"
- # pkg_os="$DISTRO_BINARY_COMPAT"
- # pkg_os_ver="$DISTRO_FILE_PREFIX"
- #
- # # @TODO2
- # entry="$pkg_name|$pkgname_only|${pkg_ver:-no_ver}|$pkg_build_no|$pkg_cat|$pkg_size|$pkg_path|$pkg_fname|$pkg_deps|$pkg_desc|slackware|${slackware_version:-$pkg_os_ver}|"
- #
- # [ "$pkg_name" != "" ] && echo "$entry" >> /tmp/slackrepo
- #
- # count=$(($count + 1))
- #
- # fi
- #
- # #[ $count -gt 5 ] && break # for testing only
- #
- #done
- # get the pkg extension
- pkg_ext=$(cat /tmp/slack_pkgext 2>/dev/null)
- [ "$pkg_ext" = '' ] && pkg_ext=txz
- if [ ! -f /tmp/slackrepo ];then
- echo
- echo "Repo file could not be generated, exiting.."
- exit 1
- fi
- # repo file created - move it to the repo files dir
- mv /tmp/slackrepo /root/.packages/$repo_filename
- # build repo entry for ~/.pkg/sources
- repo_url="${1//PACKAGES.TXT.gz/}"
- repo_url="${repo_url//\/.gz/}"
- repo_url="${repo_url//.gz\//}"
- repo_url="${repo_url//\/PACKAGES.TXT/}"
- repo_url="${repo_url//PACKAGES.TXT/}"
- # add trailing slash, if needed
- if [ "$(echo "$repo_url" | grep -m1 "/$")" = '' ];then
- repo_url="${repo_url}/"
- fi
- # create the repo entry for ~/.pkg/sources
- fallback_repos="$(pkg repo-list | grep -v $repo_name | tr '\n' ' ')"
- repo_entry="$repo_name|$pkg_ext|$repo_filename|$repo_url||||$fallback_repos"
- # if already added to ~/.pkg/sources[-all], remove it
- if [ "$(cat ~/.pkg/sources | grep -m1 "^$repo_name|")" != "" ] || \
- [ "$(cat ~/.pkg/sources-all | grep -m1 "^$repo_name|")" != "" ];then
- cat ~/.pkg/sources | grep -v "^$repo_name|" > /tmp/pkgsources
- cat ~/.pkg/sources-all | grep -v "^$repo_name|" > /tmp/pkgsources-all
- mv /tmp/pkgsources ~/.pkg/sources
- mv /tmp/pkgsources-all ~/.pkg/sources-all
- fi
- # add repo entry to ~/.pkg/sources
- echo
- pkg add-source "$repo_entry"
- echo
- # refresh list of available repos
- pkg update-sources
- echo
- echo "Repo info:"
- pkg repo-info $repo_name
- echo
- if [ "$(cat ~/.pkg/sources | grep -m1 "^$repo_name|")" != "" ];then
- echo "Success! Repo added and available to use."
- echo
- echo "To use this repo, simply type the following and hit ENTER:"
- echo " pkg repo $repo_name"
- echo
- fi
- exit 0
Advertisement
Add Comment
Please, Sign In to add comment