Page 1 of 1

Could Oolite be added to a Puppy Linux CD?

Posted: Wed Sep 09, 2009 3:22 pm
by Dyn
Could Oolite be added to a puppy linux distro?

I've tried searching the forums, and googling around a bit, and all I've really found was one mention, which was CptnEcho suggesting an experiment with various distros, including Puppy Linux.

For those who don't know, Puppy Linux allows the entire operating system to boot off the CD and run entirely in the RAM (I'm not sure but it may run on computers than don't have a Hard Disk inside them. I've never tried this though.)

If the CD is a CD-RW, and boots inside a computer CD burner drive, it can also update itself with new files and saved changes. Including, in theory, the Oolite savegames, OXPs.

If Oolite could be added to a Puppy Linux distro, then any computer that could run Puppy Linux could play Oolite, with little or no configuration or setup (apart from sticking the CD drive at the top of the boot order).

Thing is, I don't know 3 important things.

- How to program
- Oolite's system requirements for Linux (both software and hardware)
- What sort of Linux kernal (is that the right word?) Puppy Linux uses? (I suspect its either very old, unique or heavily modified one)

Anyone tried experimenting with Puppy Linux? Any results?[/code]

Posted: Wed Sep 09, 2009 10:30 pm
by Kaks
Hello & welcome to the friendliest board this side of Riedquat!

Well, the autopackage should be able to install onto most linux systems, and this post seems to have some helpful advice on how to install autopackaged stuff on puppy linux, so you might want to give it a try!

Posted: Wed Sep 09, 2009 10:52 pm
by CptnEcho
I was pleasantly surprised to see myself mentioned. Thanks.

Here are some homepage(s) of Puppy Linux. I imagine their F.A.Q. pages can be of some assistance.
http://www.puppylinux.org/
http://www.puppylinux.com/

I imagine you could bundle Oolite with a "Live Distribution" of your own custom design. Either as an .iso file (CD image file) or as a file that could be downloaded and placed upon a flash-drive (which is also bootable on many systems nowadays).

Here's another good article about Puppy Linux...
http://www.linux-magazine.com/w3/issue/ ... _Linux.pdf

Posted: Thu Sep 10, 2009 1:00 am
by Dyn
Kaks wrote:
Hello & welcome to the friendliest board this side of Riedquat!
Lovely to be here! :D
Well, the autopackage should be able to install onto most linux systems, and this post seems to have some helpful advice on how to install autopackaged stuff on puppy linux, so you might want to give it a try!
I'll give this a try later in the week, though it'll be at least Friday before I can report in on how it went (I'm moving house). It won't succeed the first time no doubt*. :/
CptnEcho wrote:
I was pleasantly surprised to see myself mentioned. Thanks.

Here are some homepage(s) of Puppy Linux. I imagine their F.A.Q. pages can be of some assistance.
http://www.puppylinux.org/
http://www.puppylinux.com/
Found them. I've had a little difficulty registering with one of the forums, they've a weird CAPTCHA thing thats busted. I've emailed the admin and asked him to register me. Slow but it works.
I imagine you could bundle Oolite with a "Live Distribution" of your own custom design. Either as an .iso file (CD image file) or as a file that could be downloaded and placed upon a flash-drive (which is also bootable on many systems nowadays).

Here's another good article about Puppy Linux...
http://www.linux-magazine.com/w3/issue/ ... _Linux.pdf
I'll be sure to have a look through that :)

*In Oolite terms think of it as learning to dock. I nailed it on the 5th try. The first four... err... "slightly increased the space stations repainting budget"

Posted: Thu Sep 10, 2009 6:43 am
by Kaks
Good luck with that, and let us know how it goes! :)

Posted: Thu Sep 24, 2009 11:25 am
by doc435
I've been lurking around these forums for a few weeks now but I had to chime in on this one. My search this morning was about this very topic. I have been trying to install 1.7.3 onto my Puppy for the past two days. My puppy install is the 4.12 community release (recent but not newest) I have done a hard drive install onto an older laptop which gives me a bit more room than the normal live distro. I have a working build environment, and have some simple tools to convert .deb and .rpm packages into .pet packages. Unfortunately converted packages don't resolve dependencies very well so it has been messy so far. For a variety of reasons I am going to refresh my HD install and start over. One of my priorities is to get Debian's dpkg installed and configured hopefully including apt-get. The development community around puppy linux is every bit as friendly as this one is so I should be able to get plenty of help on that side. Any way to make a long post longer...I would love to work with this community also and maybe try and get some of those folks over here to make OoLite on Puppy happen.

Posted: Fri Sep 25, 2009 6:19 pm
by doc435
A quick update...
With a clean install the Autopackage fails to install. I looked through the script that kicks off the install and found the problem to be the use of busybox by puppy. I pulled the script out and made the changes to use the head and tail calls that autopackage uses to split the metadata and payload out. Once that was done the script did the normal install and everything works fine. Only problem now is staying up till 1AM playing Oolite...

Posted: Fri Sep 25, 2009 10:25 pm
by CptnEcho
doc435 wrote:
A quick update...
With a clean install the Autopackage fails to install. I looked through the script that kicks off the install and found the problem to be the use of busybox by puppy. I pulled the script out and made the changes to use the head and tail calls that autopackage uses to split the metadata and payload out. Once that was done the script did the normal install and everything works fine. Only problem now is staying up till 1AM playing Oolite...
Job well done! Congratulations! 8)

Posted: Sat Sep 26, 2009 1:39 am
by doc435
just in case anyone else wants to go this route. This will help you from reinventing the wheel.

use head to get the length of the script:

Code: Select all

# head -n 25 oolite-1.65.x86.package
look for the line to set the skiplines variable:

Code: Select all

skipLines="175"
then use head to pull out the scripts

Code: Select all

# head -n 175 oolite-1.65.x86.package > doit165
set permisions

Code: Select all

# chmod 777 doit165
use an editor and replace the GNU syntax with busybox syntax for head and tail
replace the "$0" with the autopackage file name (some places it doesn't break anything so you could leave it alone)

here is file I used to install 1.65, my edits follow the double '#s'

Code: Select all

#!/bin/bash
# autopackage 1.0.8
# RootName @oolite-linux.berlios.de/oolite:1.65
# ShortName oolite
# SoftwareVersion 1.65
# InterfaceVersion 
# PackageVersion 
# CPUArchitecture x86
# gecko mimetype hack: 
# DisplayName en Oolite for Linux
# Summary en Oolite is an Elite tribute game that is easily expandable.

# Do not attempt to parse any information below this line
# programmatically.  The only supported interfaces this file exports
# are the comments above (which may be in any order) and the command
# line switches.

# This is an autopackage (http://autopackage.org/)
# Copyright 2002-2005 Mike Hearn, Hongli Lai, and Curtis L Knight

skipLines="175"
export metaSize="8973"
export dataSize="21580149"
export MD5="939b8027ce321be8bd68caf7c4045580"
export AUTOPACKAGETARGET="1.0"
## END OF HEADER

function normal()    { echo -en "\033[0m"; }
function bold()      { echo -en "\033[1m"; }
function green()     { echo -en "\033[1;32m"; }
function cyan()      { echo -en "\033[1;36m"; }
function red()       { echo -en "\033[1;31m"; }

if [[ "$executed_from_directory" == "" ]]; then
    export executed_from_directory=`pwd`
fi

if [ `echo $BASH_VERSION | sed 's/\([0-9]\).*/\1/'` = "1" ]; then
       echo "You need at least version 2 of bash to use autopackage"
       exit 1
fi

packageDir=`dirname "$0"`
packageDir=`cd "$packageDir" 2>/dev/null; pwd`
packageBase="oolite-1.65.x86.package"
## packageBase=`basename "$0"`
export package_filename="$packageDir/$packageBase"

if [[ "$MD5" == "00000000000000000000000000000000" ]]; then
    echo -n "WARN: No MD5 checksum exists, skipping integrity verification... "
else
    if which md5sum >/dev/null; then
        # md5sum=`tail --bytes=$dataSize "$0" | md5sum | cut -b-32`;
        md5sum=`tail -c $dataSize "$packageBase" | md5sum | cut -b-32`;
        if [[ "$md5sum" != "$MD5" ]]; then
            red; echo "Verifing archive integrity failed"; normal; echo "Error in MD5 sums: $md5sum is different from $MD5"
            exit 2
        fi
    else
        echo
        echo "----------"
        echo "An embedded MD5 sum of the archive exists but no md5sum program was found in \$PATH"
        echo
        echo "If you have md5sum on your system, you should try adding it to your path"
        echo "----------"
        echo "No md5sum program exists... "
    fi
fi


[ ! -d "${TMP}" ] && export TMP="/tmp"

export working_dir=""

# if we're being invoked from another installer, don't create our own working directory
if [[ "$1" == "-w" ]]; then
    shift
    export working_dir="$1"
    shift
fi

# make a temporary directory
if [[ "$1" == "-x" ]] ; then
    # If it's extract mode, pick a "proper" dirname
    working_dir=`dirname "$0"`
    working_dir=`cd "$working_dir" 2>&-; pwd 2>&-`
    ## working_dir_suffix=`basename "$0" | sed s/\.package$//ig`
    working_dir_suffix=`basename "$package_filename" | sed s/\.package$//ig`
    working_dir=`echo "$working_dir/$working_dir_suffix"`
    if [ ! -d "$working_dir" ]; then
        if ! mkdir "$working_dir" ; then
	    echo "Error: cannot create directory $working_dir"
        fi
    fi
elif [[ "$working_dir" == "" ]]; then
    # this was invoked by the user, so we need to setup the initial working space
    
        working_dir="$executed_from_directory/tmp$RANDOM$$"
        if ! mkdir "$working_dir" 2> /dev/null; then
            working_dir="${TMP}/autopackage.$RANDOM$$"
            if ! mkdir "$working_dir"; then
                echo "Error: cannot create temporary directory $working_dir"
                exit
            fi
        fi
fi

export payload_dir="$working_dir/payload/@oolite-linux.berlios.de/oolite:1.65"
export meta_dir="$working_dir/meta/@oolite-linux.berlios.de/oolite:1.65"
mkdir -p "$payload_dir"
mkdir -p "$meta_dir"
chmod -R 777 "$working_dir"

# extract the metadata

# if group and user are the same and are not
# system uids then allow group writeable files
if [[ "`id -gn`" == "`id -un`" ]] && [ `id -u` -gt 99 ]; then
    umask 002
else
    umask 022
fi

## if ! tail -n +$skipLines "$0" | head --bytes=$metaSize | tar xvz -C "$meta_dir" >/dev/null; then
if ! tail -n +$skipLines "$package_filename" | head -c $metaSize | tar xvz -C "$meta_dir" >/dev/null; then
    red; echo -n "ERROR: "; normal; echo "unable to extract the metadata payload! Check disk space or redownload."; echo
    rm -rf "$working_dir"
    exit 1
fi

# copy the payload into the working directory so we can extract it later
## if ! tail --bytes=$dataSize "$0" > "$payload_dir/payload.tar.bz2"; then
if ! tail -c $dataSize "$package_filename" > "$payload_dir/payload.tar.bz2"; then
    red; echo "ERROR: Unable to extract the data payload! Check disk space or redownload."; normal; echo
    rm -rf "$working_dir"
    exit 1
fi

case "$1" in
  "-x" | "--extract") # extract mode
    echo -n "Please wait: extracting files... "
    pushd "$payload_dir" >/dev/null # work around oddness in tar
    bzip2 -dc "payload.tar.bz2" | tar -xv -C "$working_dir"  | ( while read a; do echo -n "."; done; echo; )
    popd >/dev/null
    echo
    echo "Files have been extracted to $working_dir"
    echo
    exit 0
    ;;
    
  "-d" | "--debug") # debug mode
    echo -n "Please wait: extracting files... "
    bzip2 -dc "$payload_dir/payload.tar.bz2" | tar -xv -C "$payload_dir"  |  ( while read a; do echo -n "."; done; echo; )
    echo
    cd "$working_dir"
    echo "Type 'exit' to finish without installing."
    echo "Run apkg-installer manually to continue... "
    echo
    bash
    cd ..
    rm -rf "$working_dir" # clean up
    exit 0
    ;;


    
  "--delay")
    # this is an internal option, do not use it outside of the autopackage runtime
    
    # delay mode, we are being run from a require* function. just extract stuff to the working dir, and stop.
    # the require function will boot us up later
    exit 0;;
    
  *) # default mode [ALL] - pass control to installer
    "$meta_dir/apkg-installer" "$@"
    exit $?  
    ;;
esac
## END OF STUB
then I ran the script and let it do the start of the autopackage install process:

Code: Select all

# ./doit165
hope this helps.
[/code]

Posted: Sat Sep 26, 2009 4:19 am
by Diziet Sma
doc435 wrote:
...
here is file I used to install 1.65, my edits follow the double '#s'
...
Very neat.. :D Would it work with 1.73.4?

Posted: Mon Sep 28, 2009 11:27 pm
by zevans
Diziet Sma wrote:
doc435 wrote:
...
here is file I used to install 1.65, my edits follow the double '#s'
...
Very neat.. :D Would it work with 1.73.4?
I'm gonna try it. Because then I can boot it on the other laptop... and then I will have shaders. 8)

Posted: Thu Oct 01, 2009 3:18 am
by doc435
you replace the package name and find the number of skipline it would work well for any of he autopackage packages .

Posted: Thu Oct 01, 2009 8:49 am
by Dyn
Blimey. I was gonna post here saying "sorry guys, all the work I need to do for college has freaked me out, I've not made progress."

Looks like that doesn't matter so much now! :D