application/x-abiword AbiWord

# HOWTO BUILD A COOLCNC DEVELOPMENT ENVIRONMENT

#

# coolcnc is a puppybased linuxdistribution that can reproduce itself,

# runs on most x86 hardware and has realtimecapabilities utilizing rtai.

# so what can you do with it ?

# you can run your own realtime tasks on it. or you you could use it to run

# emc2 the enhanced machine controller and its beatuiful gui axis.

#

# prerequisites: this howto assumes that you have a linuxsystem up and running.

# the tools required besides are: bzip2, wget and qemu (0.8.X). for better

# performance i recomend the usage of the qemu acceleration module.

# you may also think about using a squashfs & unionfs equipped kernel

# for reducing the compiletime. a minihowto on this issue is includet

# at the bottom of this document. with some minor changes it should

# be no problem to adopt this howto for native install (no chroot, no qemu).

# as a matter of fact all you need to do is skip some lines of this howto :)

# as for hardware requirements, a fast processor enough ram reduces the

# time needed for compiling. +2500MB of free harddiskspace is required.

#

# you also need to switch to the root user or else some steps will not work

# and you have to manually do them via sudo !!!

#

# why do it: with a system setup the way explained below you are able to easily

# create custom emc2 equipped puppy linux distributions. you also are able

# to create your own special and or general purpose puppys.

#

# WARNING !!! THE PROCEDURES BELOW SHOULD BE UNDERSTOOD

# BEFORE BEEING UTILIZED.

# THIS HOWTO IS _NOT CREATED TO BE COPY AND PASTE PROOF_.

# THERE IS NO ERROR CHECKING OR OTHER SECURITYFEATURE INCLUDET

# STOPING YOU FROM _WHIPING OUT YOUR HARDDISK_ OR WORSE !!!

# THE AUTHOR IS NOT IN ANY WAY RELIABLE FOR ANY DAMAGE DONE

# BY FOLLOWING OR NOT FOLLOWING THE RECOMENDATIONS THIS

# HOWTO OFFERS.

# Big Thanks go to Raeed: for getting me onto this.

# The EMC developers: this is some serious nice software you got :)

# The axis team: eyecandy that works :) im loving it(tm) :)

# The people @ #emc: for support whenever needed and not kicking me

# out of the channel :)

# All those Linuxhackers for making the World a better place to live.

# Special thanks go to Alex Joni and The Cooltool for hosting

# and other favors.

# not to forget Big Mama Thornton, George Benson, Robertos Funkmix

# and all the other nice music that helped me to keep sane :)

# at first lets get the actual puppy livecd:

wget -c http://ftp.nluug.nl/ftp/pub/os/Linux/distr/puppylinux/puppy-1.0.7-mozilla.iso

# create a harddiskimage for storing the puppy hd install

qemu-img create coolcnc.0.2.img 2500M

# kqemu speeds up qemu alot

modprobe kqemu

# boot into puppy using qemu:

qemu -hda coolcnc.0.2.img -cdrom puppy-1.0.7-mozilla.iso -boot d -m 128

# INSIDE QEMU

# you are asked some simple questions like keyboardlayout and mousetype.

# answer them correctly and choose xfvb as X server. choose a screensize

# to work with and configure the network.

#

# on the bootprompt choose "4" and press [enter]

# select your desired keyboardlayout <OK> [enter]

# choose "ps/2" as mousetype to make it work with qemu

# we go with Xvesa server (the xorg server doesnt seem to

# work well with qemu)

#

# select your desired videomode and press <OK>

# go to Start->Setup->Ethernet/network Wizard and configure your networkinterfacecard

# with qemu thats eth0 and AUTO/DHCP

# setup puppy on your harddiskimage:

# open a terminal and execute cfdisk

# create a primary partition spanning the whole disk

# set the bootable flag -> write -> exit

#

# go to Start->Setup->Install Puppy hard drive

# choose "2" [enter]

# a new install [enter]

# "/dev/hda1" [enter]

# yes you are shure "y" [enter]

# cdrom is inserted [enter]

#

# now you have to type anything but space :) type "n" [enter]

# another trap : press "y" [enter] or else grub would not be configured

# choose "simple" [OK] -> [OK] -> "/dev/hda1" is [OK]

# we want to install into the MBR [OK]

#

# THATS IT :) you may shutdown qemu now

#--------------------------------------------------------------------------------------------#

# you can access the created filesystem from your Linuxsystem via loopbackmount:

lomount -diskimage coolcnc.0.2.img -partition 1 /coolcncmount

# lets get the puppy developementtools/header filesystemimage

cd /coolcncmount

wget --passive-ftp http://ftp.nluug.nl/ftp/pub/os/Linux/distr/puppylinux/usr_devx.sfs

mkdir /coolcncmount/.usr_devx

# if your kernel supports unionfs and squashfs you can easily build a chrooted environment.

losetup /dev/loop3 /coolcncmount/usr_devx.sfs

mount -r -t squashfs -o noatime /dev/loop3 /coolcncmount/.usr_devx

mount -t unionfs -o dirs=/coolcncmount/usr=rw:/coolcncmount/.usr_devx=ro none /coolcncmount/usr

mount -o bind /dev /coolcncmount/dev

mount -o bind /proc /coolcncmount/proc

cp /etc/resolv.conf /coolcncmount/etc/resolv.conf

cd /coolcncmount

chroot .

# you may have to repeat the "chroot ."

# youre ready to utlilze the full power of your hardware for compiling

# instead of the rather slow emulation. if you dont have a suitable kernel

# running right now, nevermind, we are going to build a kernel anyways

# you can customize it if desired and also install it on your HOSTSYSTEM.

# if you run a kernel that does not support squashfs/unionfs

# you have to use qemu. you should unmount /coolcncmount before booting

# or else filesystemcorruption may follow

umount /coolcncmount

qemu -hda coolcnc.0.2.img -cdrom puppy-1.0.7-mozilla.iso -boot c -m 128

# the following commands are to be executed from within the qemu COOLCNC-

# environment or a proper setup chroot environment !!!

# first lets get to the homedirectory

cd /root

# get puppy unleashed core (for building puppy from scratch) you can skip these steps

# for now if you want to. they can be done later. its a rather heavy download of

# aproximatly 300MB. you dont need this if you just want to take a look at the rtai'd puppy.

wget -c http://ftp.nluug.nl/ftp/pub/os/Linux/distr/puppylinux/puppy-unleashed-core-1.0.7.tar.gz

mkdir /root/puppy

cd /root/puppy

tar -xvzf /root/puppy-unleashed-core-1.0.7.tar.gz

cd /root

mkdir package_tarballs

cd package_tarballs

# get puppy unleashed packages

wget -m -nd -np http://ftp.nluug.nl/ftp/pub/os/Linux/distr/puppylinux/pupget_packages-1/

# unpack the packages into the unleashed package directory

cd /root/puppy/puppy-unleashed/packages

for package in `find /root/package_tarballs`; do tar -xvzf $package; done

# congratulations you have now finished setting up a puppy breeding environment

# now lets build a rtai patched kernel, emc2 and a axis packages for it

# QEMU: please verify that /usr_devx.sfs gets recognized and mounted.

# lets see if puppy automagically detects the usr_devx.sfs and mounts it at reboot.

# you can check if everything is ok by issuing the following command. watch out for lines

# telling about /dev/loop3 ....... 100% /.usr_devx

unionct /usr --list

# should output something like:

# /usr (rw)

# /.usr_devx (r-)

# if you are working within a chroot the us_devx.sfs should be allready mountet.

# verify it the same way as described above (note: when run outside the chroot

# you get to see the full path /coolcncmount/usr (rw) , /coolcncmount/.usr_devx (r-)

# building a 2.4.31 kernel

# now lets get the kernelsource

cd /usr/src

wget -c http://www.fht.lkams.kernel.org/pub/linux/kernel/v2.4/linux-2.4.31.tar.bz2

# get unionfs, squashfs, ntfs patches/tools and adeos

wget --passive-ftp ftp://unionfs-mirror.linux-live.org/unionfs/unionfs-1.0.9.tar.gz

wget http://ovh.dl.sourceforge.net/sourceforge/squashfs/squashfs2.2-r2.tar.gz

wget http://www.goosee.com/puppy/development/linux-2.4.29-ntfs-2.1.6b.patch.gz

wget -c http://download.gna.org/adeos/patches/attic/v2.4/i386/candidates/adeos-linux-2.4.31-i386-r18c1.patch

# unpack the kernelsource and the patches and apply them to the source

rm linux

rm -rf linux-2.4.31

tar -xvjf linux-2.4.31.tar.bz2

ln -s linux-2.4.31 linux

tar -xvzf unionfs-1.0.9.tar.gz

tar -xvzf squashfs2.2-r2.tar.gz

gzip -d linux-2.4.29-ntfs-2.1.6b.patch.gz

cd linux

patch -p1 < /usr/src/squashfs2.2-r2/linux-2.4.31/squashfs2.2-patch

patch -p1 < /usr/src/adeos-linux-2.4.31-i386-r18c1.patch

patch -p1 < /usr/src/linux-2.4.29-ntfs-2.1.6b.patch

# copy the original puppy config into place remove some lines and add adeos support

cat ../linux-2.4.29/config-2july05-2.4.29-pup1.0.4 | grep -v CONFIG_MODVERSIONS > .config

echo "#changed for meeting the needs of rtai and to require no userinteraction

CONFIG_BLUEZ_HCIUART_H4=m

CONFIG_SCSI_SATA_QSTOR=m

CONFIG_MODVERSIONS=n

CONFIG_ADEOS=m

CONFIG_ADEOS_PROFILING=n

CONFIG_ADEOS_CORE=y

CONFIG_IPIPE=n

CONFIG_IPIPE_STATS=n

CONFIG_SQUASHFS_EMBEDDED=n" >> .config

# if youd like to have any other things configured run make config or menuconfig now

# also if you have too much ram and or cpu/s you could add

# MAKE = make -j2 to the Makefile

# ready to build a kernel ? lets go :)

make oldconfig

make dep

make clean

make bzImage

make modules

# puppys xargs (which is just another part of busybox) lacks the -i option

# so we have to get GNU findutils first, compile it and copy xargs into

# our PATH in order to let make modules_install finish its job.

cd /usr/src

wget http://ftp.gnu.org/pub/gnu/findutils/findutils-4.2.27.tar.gz

tar -xvzf findutils-4.2.27.tar.gz

cd findutils-4.2.27

./configure

make

cp xargs/xargs /bin/xargs

# now the modules should install into /lib/modules/2.4.31

# the kernel and System.map gets copied to /boot

cd /usr/src/linux

make modules_install

cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.31

cp System.map /boot/System.map-2.4.31

rm /lib/modules/2.4

ln -s /lib/modules/2.4.31 /lib/modules/2.4

# now lets compile the unionfs module and copy it into place

# uname -r is removed because of some issues when compiling

# in a chrooted environment and the HOSTS kernel is not a

# 2.4.31 version kernel.

cd unionfs-1.0.9

echo "EXTRACFLAGS=-DNODEBUG

LINUXSRC=/usr/src/linux-2.4.31" > fistdev.mk

cat Makefile | sed 's/`uname\ \-r`/2.4.31-adeos/g' | sed 's/uname\ \-r/2.4.31/g' | \

sed 's/^KERNELVERSION.*/KERNELVERSION=2.4/' > Makefile_

mv Makefile_ Makefile

make

make install

# we got all modules together, lets install the kernel for testing

echo "title COOLCNC (on /dev/hda1)

root (hd0,0)

kernel /boot/vmlinuz-2.4.31 root=/dev/hda1 ro vga=normal" >> /boot/grub/menu.lst

# boot qemu and choose COOLCNC when entering the grub bootmenu

# at the first boot with the new kernel the modules dependencyfile must be

# created by opening a terminal and entering depmond -a

# after the next reboot the usr_devx should be mounted correctly

# and we can continue to install rtai and emc. for this we need

# to run the rtaikernel we compiled earlier. you got two choices.

# use a qemu session (slow)

qemu -hda coolcnc.0.2.img -cdrom puppy-1.0.7-mozilla.iso -boot c -m 256

# i recommend installing the kernel on the host too and use a chrooted environment.

# dont forget to do a depmod -a ! you will not be able to compile

# if usr_devx is not mounted and stacked over your /usr directory!

# next stop rtai, emc2, python, axis, mesa

wget http://download.gna.org/rtai/stable/v3/rtai-3.2.tar.bz2

wget http://www.python.org/ftp/python/2.4.2/Python-2.4.2.tgz

wget http://surfnet.dl.sourceforge.net/sourceforge/mesa3d/MesaLib-6.4.1.tar.bz2

wget http://surfnet.dl.sourceforge.net/sourceforge/mesa3d/MesaGLUT-6.4.1.tar.bz2

wget http://surfnet.dl.sourceforge.net/sourceforge/tcl/tcl8.4.12-src.tar.gz

wget http://surfnet.dl.sourceforge.net/sourceforge/tcl/tk8.4.12-src.tar.gz

wget http://unpy.net/cgi-bin/viewcvs.cgi/axis/axis.tar.gz?tarball=1

mv axis.tar.gz\?tarball\=1 axis.tar.gz

# now some unionfstricks. its easy to create packages if you use unionfs to keep data separated.

mkdir /.coolcnc

dd if=/dev/zero of=/coolcnc.sfs bs=1M count=256

mkfs.ext2 -F /coolcnc.sfs

mount -o loop /coolcnc.sfs /.coolcnc

# lets direct all following writeoperations to /.coolcnc

unionctl /usr --add --before /usr --mode rw /.coolcnc

unionctl /usr --mode /usr ro

# unionctl /usr --list should now tell you something like this

# /.coolcnc (rw)

# /usr (r-)

# /.usr_devx (r-)

# if youd like to you can put those lines into /etc/rc.d/rc.local

# they will be executed with every subsequent boot.

echo "mount -o loop /coolcnc.sfs /.coolcnc

unionctl /usr --add --before /usr --mode rw /.coolcnc

unionctl /usr --mode /usr ro" >> /etc/rc.d/rc.local

# time to get rtai and emc on the road :)

# first lets compile rtai

cd /usr/src

echo "root ALL=(ALL) ALL" > /etc/sudoers

chmod 0440 /etc/sudoers

tar -xvjf rtai-3.2.tar.bz2

rm linux ; ln -s linux-2.4.31 linux

cd rtai-3.2

./configure

make install

cd /usr/src

rm -rf rtai-3.2

# emc2 depends on tcl/tk

cd /usr/src

tar -xvzf tcl8.4.12-src.tar.gz

tar -xvzf tk8.4.12-src.tar.gz

cd /usr/src/tcl8.4.12/unix

./configure

make

make install

cd /usr/src

cd /usr/src/tk8.4.12/unix

./configure

make

make install

cd /usr/src

export LD_LIBRARY_PATH=/usr/local/lib

# lets add /usr/local/lib as librarypath to our .bashrc

echo "LD_LIBRARY_PATH=/usr/local/lib" >> /root/.bashrc

# now emc2 is ready to get leeched and compiled :)

# sourceforge cvs is sometimes under heavy load. at leat

# it looks like that because the checkout may take multiple

# runs before it works.

touch /root/.cvspass

cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/emc login

cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/emc co emc2

cd emc2/src

./configure

make

#cleanup

rm -rf /usr/src/tk8.4.12

rm -rf /usr/src/tcl8.4.12

# now lets see if emc2 works

cd ..

scripts/emc

# i dont like the look of the fonts

# do the following for more readable fonts

# if youd like emc to talk to you in a language other then english

# you have to set your LANG environment variables correctly.

# german for example could be selected by executing:

LANG=de

# no lets get axis dependencies fullfilled

cd /usr/src

tar -xvzf Python-2.4.2.tgz

cd Python-2.4.2

./configure

make

make install

# make some space or else we will run out during the next compiles

cd /usr/src

rm -rf Python-2.4.2

# for the pretty 3d look axis depends on opengl

# lets use Mesa and Glut

tar -xvjf Mesa-6.4.1.tar.bz2

cd Mesa-6.4.1

make linux-x86

cp -auv lib/* /usr/local/lib

cd /usr/src

tar -xvjf MesaGLUT-6.4.1.tar.bz2

cd Mesa-6.4.1

make linux-x86

cp -auv lib/* /usr/local/lib

cd /usr/src

rm -rf /usr/src/Mesa-6.4.1

# now to axis

tar -xvzf axis.tar.gz

cd axis

EMCROOT=/usr/src/emc2 python setup.py install --force

rm -rf /usr/src/Mesa-6.4.1

# now you could change the DISPLAY variable in the emc2 inifile

# you are using for your machine to DISPLAY = axis to give it

# a testrun.

# you have finished installing rtai,emc2 and axis on

# your puppy. now lets get to the breeding part.

# ...to be continued

# this version reflects the progress of this howto on january 10th 2006