WelcomeWelcome | FAQFAQ | DownloadsDownloads | WikiWiki

Author Topic: Quick hack to convert Debian packages.  (Read 56065 times)

Offline Jason W

  • Administrator
  • Hero Member
  • *****
  • Posts: 9730
Re: Quick hack to convert Debian packages.
« Reply #30 on: June 09, 2011, 04:02:16 PM »
I will give this script some attention in the near future.

Offline Jason W

  • Administrator
  • Hero Member
  • *****
  • Posts: 9730
Re: Quick hack to convert Debian packages.
« Reply #31 on: June 09, 2011, 05:39:26 PM »
Script has been updated and attached to the original post.

Offline Rich

  • Administrator
  • Hero Member
  • *****
  • Posts: 11213
Re: Quick hack to convert Debian packages.
« Reply #32 on: June 09, 2011, 06:05:49 PM »
Wow, when you say near future you really mean it.

Offline coreplayer2

  • Hero Member
  • *****
  • Posts: 3020
Re: Quick hack to convert Debian packages.
« Reply #33 on: June 09, 2011, 06:21:17 PM »
Wow  that's cool.  Thanks for the quick fix, I know others like me appreciate the effort Thanks

Offline k318wilcoxa

  • Newbie
  • *
  • Posts: 1
Re: Quick hack to convert Debian packages.
« Reply #34 on: August 16, 2016, 07:01:23 AM »
I'm having issues as well.. I know this post hasn't had activity in years. I'm new to TC. The script is also prompting for "Install the squashfs-tools" package?? I installed but still not moving forward?? Any help would be appreciated.

Thanks Abe

Offline Misalf

  • Hero Member
  • *****
  • Posts: 1702
Re: Quick hack to convert Debian packages.
« Reply #35 on: August 16, 2016, 07:41:29 AM »
Works here.
Does the message "Install the squashfs-tools package before proceeding." still show up after
Code: [Select]
tce-load -i squashfs-tools.tcz
?
Download a copy and keep it handy: Core book ;)

Offline marttt

  • Newbie
  • *
  • Posts: 9
Re: Quick hack to convert Debian packages.
« Reply #36 on: December 16, 2016, 02:17:16 PM »
Works here.
Does the message "Install the squashfs-tools package before proceeding." still show up after
Code: [Select]
tce-load -i squashfs-tools.tcz
?
For me it didnt. The script worked without errors (and saved me from despair). Thanks to the author!

Offline xor

  • Hero Member
  • *****
  • Posts: 1262
Re: Quick hack to convert Debian packages.
« Reply #37 on: July 20, 2020, 10:13:48 AM »
Can we download "steam" with this!?

Offline Mathimino

  • Newbie
  • *
  • Posts: 1
Re: Hack rapide pour convertir les paquets Debian.
« Reply #38 on: June 15, 2021, 12:13:52 PM »
hello, i know this chat is a long time ago but i can't seem to use the script

Offline Green_goblin

  • Newbie
  • *
  • Posts: 6
Re: Quick hack to convert Debian packages.
« Reply #39 on: November 24, 2023, 02:20:10 PM »
I updated the script with a few minor changes, it should work now:

Code: [Select]
#!/bin/sh
# Create tce/tcz from Debian package
# Usage: $ deb2tcz packagename.deb packaganame.tcz

if [ `/usr/bin/id -u` -ne 0 ]; then
echo "Please run as root".
exit 1
fi

HERE=`pwd`
PKGDIR=/tmp/deb2tcz.1234
PKG="$PKGDIR"/pkg
FILE="$1"
APPNAME="$2"
INPUT=${FILE##*.}

[ -d "$PKGDIR" ] || mkdir -p "$PKGDIR"

make_tcz() {

mkdir -p "$PKG"
ar p "$FILE" data.tar.xz > "$PKGDIR"/data.tar.xz # unpack .deb
tar xf "$PKGDIR"/data.tar.xz -C "$PKG" # unpack .tar

[ -d "$PKG"/usr/share/doc ] && rm -r "$PKG"/usr/share/doc
[ -d "$PKG"/usr/share/man ] && rm -r "$PKG"/usr/share/man
[ -d "$PKG"/usr/share/menu ] && rm -r "$PKG"/usr/share/menu
cd "$PKG"
find . -type d -empty | xargs rmdir > /dev/null 2>&1
cd "$PKGDIR"
mksquashfs pkg "$HERE"/"$APPNAME" -noappend
cd "$HERE"
rm -r "$PKGDIR"
}



if [ ! -f /usr/local/tce.installed/findutils ]; then
echo "Install findutils.tcz before proceeding."
exit 1
fi

if [ ! `which mksquashfs` ]; then
echo "Install the squashfs-tools package before proceeding."
exit 1
fi



[ -z "$APPNAME" ] && echo "You must specify an extension name." && exit 1

[ -z "$1" ] && echo "You must specify a file."
if [ ! "$INPUT" == "deb" ] ; then
echo "Only Debian packages work with this."
exit 1
fi
EXT=${APPNAME##*.}
if [ `echo "$EXT" | grep "tcz"` 2>/dev/null ]; then
make_tcz
else
echo "You need to specify a tcz  for the output file."
exit 1
fi

if [ -f "$APPNAME" ]; then
echo "Success."
else
echo "Something went wrong."
fi

Offline CentralWare

  • Administrator
  • Hero Member
  • *****
  • Posts: 1652
Re: Quick hack to convert Debian packages.
« Reply #40 on: February 11, 2024, 02:53:02 AM »
Another update! :)
deb2tcz packagename[.deb] to convert DEB to TCZ
deb2tcz ~packagename[.deb] to DOWNLOAD package, then convert

There's a few TO-DO items noted within that haven't been completed.

Code: [Select]
#!/bin/sh
#############################################################################
# Create TCZ extension from a Debian package     # Original By: Jason_W     #
# Usage: deb2tcz packagename.deb packaganame.tcz # Revision By: CentralWare #
#############################################################################
. /etc/init.d/tc-functions

HERE=`pwd`

#############################################################
 ## The first part of this extension is to allow the user ##
 ## to actually DOWNLOAD the package they're after based  ##
 ## on the version of TCL they're running right now.  As  ##
 ## always, there are limitations and exceptions...       ##
#############################################################

FILE=$1
if [ "${FILE:0:1}" == "~" ]; then
    #####################################################
    # We're going to use the tilde (~) to be our marker #
    # telling our app we want to DOWNLOAD the package   #
    # ~filename.deb from the master debian repository.  #
    #####################################################
    FILE=${FILE:1}; FILE=${FILE/.deb/}; FILE=$(echo $FILE)
    INDEX=${FILE:0:1}; [ "${FILE:0:3}" == "lib" ] && INDEX=${FILE:0:4}
    REPO="http://ftp.debian.org/debian/pool/main/${INDEX}/${FILE}/"
    wget $REPO -q -O - | grep href | grep -v PARENT | grep -v .tar. > file.lst
    cat file.lst | grep .deb > file.debs 2>/dev/null
    cat file.lst | grep .dsc > file.dscs 2>/dev/null
    cat file.debs | awk -Fhref '{print $2}' | awk -F\" '{print $2}' > debs 2>/dev/null
    cat file.dscs | awk -Fhref '{print $2}' | awk -F\" '{print $2}' > dscs 2>/dev/null
    rm ./file.lst -f; rm ./file.debs -f; rm ./file.dscs -f 2>/dev/null

    test=$(cat debs)
    if [ "${test}" == "" ]; then
        echo "${RED}ERROR: ${YELLOW}Package ${CYAN}$FILE ${YELLOW}not found or error finding it${NORMAL}"
        exit 1
    fi

    # Now, we need to determine which platform we're running on
    case $(uname -r) in
        *picore*)   PLAT="armel" ;;
        *picore64*) PLAT="arm64" ;;
        *64*)       PLAT="amd64" ;;
        *)          PLAT="i386"  ;;
    esac

    cat debs | grep $PLAT > choices
    CHOICES=$(cat choices)
    if [ "${CHOICES}" == "" ]; then
        echo "${RED}ERROR: ${YELLOW}Choices for the platform ${CYAN}${PLAT}${YELLOW} are unavailable${NORMAL}"
        exit 1
    fi

    COUNT=1; echo; echo
    for CHOICE in $CHOICES
    do
        [ ! "${CHOICE}" == "" ] && echo "${COUNT}. ${CHOICE}" && COUNT=$(expr $COUNT + 1)
    done
    echo -n "Selection: "; read SELECTION
    [ "${SELECTION}" == "" ] && exit

    COUNT=1
    for CHOICE in $CHOICES
    do
        [ ! "${CHOICE}" == "" ] && [ "${COUNT}" == "${SELECTION}" ] && SELECT=$CHOICE
        [ ! "${CHOICE}" == "" ] && COUNT=$(expr $COUNT + 1)
    done

    [ "${SELECT}" == "" ] && exit

    echo; echo "Downloading $SELECT"
    wget $REPO/$SELECT || exit 1

    ## CLEAN UP, YOU FILTHY PROGRAMMER... ##
    rm choices -f 2>/dev/null
    rm debs -f 2>/dev/null
    rm dscs -f 2>/dev/null

    ## We should now have our PACKAGE; let's RE-RUN this app ##
    ME=$(basename $0)
    sh $HERE/$ME $SELECT
    exit 0

fi

## Manage dependencies of this app ##
if [ ! "$(whoami)" == "root" ]; then
    DEPS="findutils squashfs-tools"
    for DEP in $DEPS
    do
        [ ! -d /tmp/tcloop/$DEP ] && tce-load -w $DEP && tce-load -i $DEP
        [ ! -d /tmp/tcloop/$DEP ] && echo "${RED}Dependency error! ${YELLOW}Be sure you're running this app as TC${NORMAL}" && exit 1
    done
fi

## Once dependencies are handled, let's run as root ##
if [ ! "$(whoami)" == "root" ]; then
    ME=$(basename $0)
    sudo sh $HERE/$ME $@
    exit 0
fi

make_tcz() {
    echo "${WHITE}Extracting ${CYAN}$FILE${NORMAL}"
#        ar t "$HERE/$FILE"

        DEST2="${DEST}2" && mkdir -p $DEST2
        cd $DEST2
        ar p "$HERE/$FILE" control.tar.xz > control.tar.xz
        tar -xf control.tar.xz
        rm control.tar.xz -f

        cd $DEST
        ar p "$HERE/$FILE" data.tar.xz > data.tar.xz
        tar -xf data.tar.xz
        rm data.tar.xz -f

    [ -d "$DEST"/usr/share/doc ] && rm -r "$DEST"/usr/share/doc
    [ -d "$DEST"/usr/share/man ] && rm -r "$DEST"/usr/share/man
    [ -d "$DEST"/usr/share/menu ] && rm -r "$DEST"/usr/share/menu
    find . -type d -empty | xargs rmdir > /dev/null 2>&1
    cd $TMP
    mksquashfs ${FILE/.deb/} "$HERE"/"$APPNAME" -noappend >/dev/null 2>&1

     ###########
    ### TO DO ###
    ##########################################################################
    # Using DEST2/control create a new APPNAME.tcz.info file from that data  #
    # Using DEST2/control create a new APPNAME.tcz.dep file from that data   #
    # Create APPNAME.tcz.md5.txt and APPNAME.tcz.list from our local files   #
    ##########################################################################

}

FILE="$1"; APPNAME="$2"
FILE=${FILE/.deb/}; FILE=$(echo $FILE)
[ "$APPNAME" == "" ] && APPNAME=$FILE; APPNAME=${APPNAME/.tcz/}; APPNAME=$(echo $APPNAME)

if [ -z "$FILE" ]; then
    echo "You must specify a Debian package name"
    echo "${YELLOW}$(basename $0) ${CYAN}packagename[.deb] to convert DEB to TCZ${NORMAL}"
    echo "${YELLOW}$(basename $0) ${MAGENTA}~${CYAN}packagename[.deb] to DOWNLOAD package, then convert${NORMAL}"
    exit 1
fi

TMP="/tmp/deb2tcz" && mkdir -p $TMP
DEST=$TMP/${FILE} && mkdir -p $DEST && rm $DEST -fR && mkdir -p $DEST
sudo chown tc:staff $DEST -fR && sudo chmod 777 $DEST

FILE="${FILE}.deb"; APPNAME="${APPNAME}.tcz"


echo "Debian File: $FILE"
echo "Target File: $APPNAME"

make_tcz
[ -d $TMP ] && sudo rm $TMP -fR

EXAMPLE: deb2tcz ~mc
The tilde ( ~ ) informs the app you want to download "mc" and then convert it.
Once entered, it opens the repository and finds "mc" and all of the releases it has are displayed -- you select which one you want and voila'...  TCZ extension built!
« Last Edit: February 11, 2024, 02:54:46 AM by CentralWare »
Over 90% of all computer problems can be traced back to the interface between the keyboard and the chair