#! /bin/sh # HOWTO BUILD A COOLCNC DEVELOPMENT ENVIRONMENT FROM SOURCE 0.0.1 # ok, not all from source. but all that is added is added from source! # # # 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 fabulous QEMU: for making it sooooo easy # 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 3000M # 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 # NATIV: if you do a native install you have to get usr_devx.sfs and put it into / 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 ." chroot . # you are 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, a NATIV install or a proper setup chroot environment !!! # first lets get to the homedirectory cd /root # if you do a NATIV install and dont get your keyboard configured orrectly # you should launch the dotpup package installer and install the updated xkb. # 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 (without openoffice ! you have to remove the exclude to get it - doesnt work!) wget -R openoffice_CUTDOWN -c -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 unionctl /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 --passive-ftp ftp://unionfs-mirror.linux-live.org/unionfs/unionfs-1.0.14.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 # rm -rf unionfs-1.0.9 rm -rf unionfs-1.0.14 rm -rf squashfs2.2-r2 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 unionfs-1.0.14.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 # and change the size of the inititalramdisk cat ../linux-2.4.29/config-2july05-2.4.29-pup1.0.4 | grep -v CONFIG_MODVERSIONS | grep -v CONFIG_BLK_DEV_RAM_SIZE > .config echo "#changed for meeting the needs of rtai and to require no userinteraction CONFIG_FBCON_SPLASHSCREEN=y CONFIG_FBCON_CFB16=y CONFIG_SUPERMOUNT=m 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_DEBUG_KERNEL=y CONFIG_MAGIC_SYSRQ=y CONFIG_DEBUG_STACKOVERFLOW=n CONFIG_DEBUG_HIGHMEM=n CONFIG_DEBUG_SLAB=n CONFIG_DEBUG_IOVIRT=n CONFIG_DEBUG_SPINLOCK=n CONFIG_FRAME_POINTER=n CONFIG_BLK_DEV_RAM_SIZE=24576" >> .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 /usr/src/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_ # here we got the same with unionfs-1.0.14, i prefer this because the # removing of parts of branches works better cd /usr/src/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 # if you are doing a native install, you should change the root=/dev/hda1 # part to fit you partitionlayout! 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 #exit the chroot and umount proc and dev exit # i havent figured out yet how to remove the unions and mounts # also seem to hang sometimes. dunno. right now i need to reboot # in order to get rid of the mounts and unions # 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 cd /usr/src 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=360 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 # for cleanup #cd /usr/src #rm -rf rtai-3.2 # if you did that in a chroot you have to manually create the devicenodes # for rtai (if you didnt mount -bind /dev to /chroot/dev you can igonre that). # on the host say something like: umount /coolcnc/dev # then in the chroot execute: mknod -m 666 /dev/rtai_shm c 10 254 # you can afterward savely do a mount -o bind /dev /coolcnc/dev # 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 # puppy uses a very outdated version of bwidget # lets get the newest release cd /usr/src wget http://surfnet.dl.sourceforge.net/sourceforge/tcllib/BWidget-1.7.0.tar.gz cd /usr/lib/ rm bwidget tar -xvzf /usr/src/BWidget-1.7.0.tar.gz ln -s BWidget-1.7.0 bwidget # lets put it in a unleashed package rightaway mkdir -p /root/puppy/puppy-unleashed/packages/bwidget-1.7.0-puppysit/usr/lib cp -auv /usr/lib/BWidget-1.7.0 /root/puppy/puppy-unleashed/packages/bwidget-1.7.0-puppysit/usr/lib cp -auv /usr/lib/bwidget /root/puppy/puppy-unleashed/packages/bwidget-1.7.0-puppysit/usr/lib 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 # you should not use this unless you know what you do! # #leet# cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/emc co emc2 cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/emc co -r TESTING -d emc2testing emc2 # cd emc2/src cd emc2-testing/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 # 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 # 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 # rm -rf Python-2.4.2 # for the pretty 3d look axis depends on opengl # lets use Mesa and Glut. if your graphiccard is # supported by accelerated drivers you can use xorg # to get better performance. cd /usr/src tar -xvjf MesaLib-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/emc2testing 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. cd /usr/src/emc2 scripts/emc # you have finished installing rtai,emc2 and axis on # your puppy. now lets get to the breeding part. cd /usr/src # first lets build a directorystructure for the adeos kernel rm -rf /root/puppy/puppy-unleashed/kernels/2.4.31-adeos/ mkdir -p /root/puppy/puppy-unleashed/kernels/2.4.31-adeos/modules/0base_modules-2.4.31-adeos/lib/modules/ # now lets get the kernel and modules into place cp /usr/src/linux/.config /root/puppy/puppy-unleashed/kernels/2.4.31-adeos/modules/0base_modules-2.4.31-adeos/lib/modules/config-2.4.31-adeos cp -auv /lib/modules/2.4.31-adeos /root/puppy/puppy-unleashed/kernels/2.4.31-adeos/modules/0base_modules-2.4.31-adeos/lib/modules/ cp /usr/src/linux/arch/i386/boot/bzImage /root/puppy/puppy-unleashed/kernels/2.4.31-adeos/vmlinuz cd /root/puppy/puppy-unleashed/kernels/2.4.31-adeos/ ; ln -s vmlinuz vmlinuz.fb cd /root/puppy/puppy-unleashed/kernels/2.4.31-adeos/modules/0base_modules-2.4.31-adeos/lib/modules/ ln -s 2.4.31-adeos 2.4 rm /root/puppy/puppy-unleashed/kernels/2.4.31-adeos/modules/0base_modules-2.4.31-adeos/lib/modules/2.4.31-adeos/build # just a set of links, lets remove them rm -rf /root/puppy/puppy-unleashed/kernels/2.4.31-adeos/modules/0base_modules-2.4.31-adeos/lib/modules/2.4.31-adeos/pcmcia # lets gzip the modules for dir in `find /root/puppy/puppy-unleashed/kernels/2.4.31-adeos/modules/0base_modules-2.4.31-adeos/lib/modules/2.4.31-adeos -type d` do cd $dir ls *.o gzip -9 *.o ls *.gz done # thats it, we now have our adeos patched kernel installed into the unleashed breeding environment # because our kernel has more drivers within the initial ramdisk we have to change the size to 24576k cd /root/puppy/puppy-unleashed rm -rf packages/0rootfs_skeleton-1.0.7_puppysit cp -auv packages/0rootfs_skeleton-1.0.7 packages/0rootfs_skeleton-1.0.7_puppysit echo 24576 > packages/0rootfs_skeleton-1.0.7_puppysit/etc/ramdiskfssize # you have to remove the rootfs_skeleton-1.0.7 and add rootfs_skeleton-1.0.7_puppysit in the unleashed # package selection gui if youd like to start with mastering right away ! all changes you want to make # to the rootfs should be made in the rootfs_skeleton-1.0.7_puppysit directory. # lets build unleashed packages for rtai,emc,python and axis # maybe add -dev packages in the future # rtai is really small not much work to do here # besides some copying and a little striping # the documentation is moved into a seperate package # rtai-3.2-runtime_puppysit and rtai-3.2-doc_puppysit ROOTFS_PATH=/root/puppy/puppy-unleashed/packages/0rootfs_skeleton-1.0.7_puppysit DEVICE_PATH=$ROOTFS_PATH/dev PACKAGE_ROOT=/root/puppy/puppy-unleashed/packages/rtai-3.2-runtime_puppysit rm -rf $PACKAGE_ROOT mkdir -p $ROOTFS_PATH/etc/init.d rm $ROOTFS_PATH/etc/realtime echo "#! /bin/bash modprobe adeos sleep 1" > $ROOTFS_PATH/etc/init.d/realtime cat /etc/init.d/realtime | grep -v /bin/bash >> $ROOTFS_PATH/etc/init.d/realtime mkdir -p $PACKAGE_ROOT/usr/realtime for dirx in `echo "bin calibration include lib modules testsuite"` do cp -auv /usr/realtime/$dirx $PACKAGE_ROOT/usr/realtime done sleep 5 for devx in `echo "rtai_shm rtf0 rtf1 rtf2 rtf3 rtf4 rtf5 rtf6 rtf7 rtf8 rtf9"` do cp -auv /dev/$devx $DEVICE_PATH done sleep 5 strip --strip-unneeded $PACKAGE_ROOT/usr/realtime/bin/* strip --strip-debug $PACKAGE_ROOT/usr/realtime/lib/* PACKAGE_ROOT=/root/puppy/puppy-unleashed/packages/rtai-3.2-doc_puppysit rm -rf $PACKAGE_ROOT mkdir -p $PACKAGE_ROOT/usr/realtime cp -auv /usr/realtime/share $PACKAGE_ROOT/usr/realtime/ # qemu - using the Xvesa server # matrox milleniumII pci - using the Xorg server # matrox g550 - using the Xorg server # nvidia Geforce3 - works with the Xorg server # if your computer hangs after entering graphical mode, you do have # to configure the xserver correctly manualy! # # # lets strip emc down to the bone :) # we seperate docs and runtimeenvironment as with rtai # into emc2-cvs_dateofcheckout and emc2-cvs_dateofcheckout-doc ROOTFS_PATH=/root/puppy/puppy-unleashed/packages/0rootfs_skeleton-1.0.7_puppysit cat $ROOTFS_PATH/etc/profile | sed 's/LIBRARY_PATH="/LIBRARY_PATH="\/usr\/local\/lib:/g' > /tmp/profile mv /tmp/profile $ROOTFS_PATH/etc/profile PACKAGE_ROOT=/root/puppy/puppy-unleashed/packages/emc2-25.02.2006-puppysit rm -rf $PACKAGE_ROOT mkdir -p $PACKAGE_ROOT/usr/local/bin for filex in `echo "classicladder emc emc_module_helper emcsh emcsvr halcmd halmeter halscope halvcp idle inivar io iosh m5i20cfg milltask milltaskcanon simio usrmot"` do cp /usr/local/bin/$filex $PACKAGE_ROOT/usr/local/bin done mkdir $PACKAGE_ROOT/usr/local/etc cp -auv /usr/local/etc/emc2 $PACKAGE_ROOT/usr/local/etc mkdir -p $PACKAGE_ROOT/usr/local/share/emc cp -auv /usr/local/share/emc/* $PACKAGE_ROOT/usr/local/share/emc/ strip --strip-unneeded $PACKAGE_ROOT/usr/local/bin/* mkdir -p $PACKAGE_ROOT/usr/local/lib for filex in `echo "libnml.so libemc.a librs274.so"` do cp /usr/local/lib/$filex $PACKAGE_ROOT/usr/local/lib done strip --strip-debug $PACKAGE_ROOT/usr/local/lib/* # now python is huge, luckily axis developer jeff epler # wrote a small pythonscript to make a directory containing # only those things used by axis. it also strips and compresses. # wget pack_python, i used the output of his tools for the following # lines of bash. # # you can copy and paste the next ~222 lines ;) ROOTFS_PATH=/root/puppy/puppy-unleashed/packages/0rootfs_skeleton-1.0.7_puppysit echo "PYTHONHOME=/usr/local PYTHONPATH=/usr/local/bin/python" >> $ROOTFS_PATH/etc/profile # watch out this directory will be deleted! PACKAGE_ROOT=/root/puppy/puppy-unleashed/packages/python2.4-subset-axis_puppysit PYTHON_ROOT=$PACKAGE_ROOT/usr/local/lib/python2.4/ rm -rf $PACKAGE_ROOT cd /root/puppy/puppy-unleashed/packages mkdir -p $PACKAGE_ROOT/usr/local/lib/python2.4/lib-tk cp /usr/local/lib/python2.4/lib-tk/Tkinter.pyo $PACKAGE_ROOT/usr/local/lib/python2.4/lib-tk for filex in `echo "opcode.pyo dis.pyo inspect.pyo ConfigParser.pyo Dialog.pyo FixTk.pyo StringIO.pyo Tkconstants.pyo Tkinter.pyc UserDict.pyo __future__.pyo atexit.pyo codecs.pyo copy.pyo copy_reg.pyo dummy_thread.pyo __init__.pyo cp875.pyo iso8859_15.pyo charmap.pyo cp1257.pyo cp1250.pyo unicode_escape.pyo latin_1.pyo cp037.pyo cp1252.pyo base64_codec.pyo koi8_u.pyo string_escape.pyo cp1256.pyo uu_codec.pyo utf_8.pyo cp864.pyo iso8859_10.pyo raw_unicode_escape.pyo mac_cyrillic.pyo cp850.pyo mac_latin2.pyo iso8859_9.pyo cp856.pyo utf_7.pyo cp1258.pyo iso8859_7.pyo hex_codec.pyo cp862.pyo cp1251.pyo zlib_codec.pyo iso8859_8.pyo palmos.pyo cp1026.pyo cp866.pyo iso8859_14.pyo cp874.pyo utf_16.pyo cp437.pyo iso8859_5.pyo cp861.pyo cp869.pyo mac_iceland.pyo iso8859_3.pyo cp852.pyo cp865.pyo iso8859_4.pyo iso8859_6.pyo idna.pyo mbcs.pyo cp1140.pyo cp857.pyo cp775.pyo rot_13.pyo cp1255.pyo unicode_internal.pyo ascii.pyo iso8859_2.pyo cp500.pyo cp1006.pyo undefined.pyo iso8859_1.pyo utf_16_le.pyo cp860.pyo cp424.pyo cp1253.pyo punycode.pyo cp737.pyo mac_turkish.pyo mac_greek.pyo iso8859_13.pyo mac_roman.pyo cp855.pyo quopri_codec.pyo utf_16_be.pyo cp1254.pyo koi8_r.pyo aliases.pyo cp863.pyo __init__.pyo aliases.pyo fnmatch.pyo getopt.pyo gettext.pyo glob.pyo hershey.pyc linecache.pyo locale.pyo nf.pyc os.pyo popen2.pyo posixpath.pyo random.pyo re.pyo repr.pyo __init__.pyc interpret.pyc glcanon.pyc errorlist.pyc OpenGLTk.pyc options.pyc __init__.pyc OpenGLTk.pyc errorlist.pyc glcanon.pyc interpret.pyc options.pyc shutil.pyo site.pyo socket.pyo sre.pyo sre_compile.pyo sre_constants.pyo sre_parse.pyo stat.pyo string.pyo tempfile.pyo token.pyo tokenize.pyo traceback.pyo types.pyo warnings.pyo webbrowser.pyo"` do mkdir -p `find /usr/local/lib/python2.4 | grep /$filex | grep -v __init__ | sed "s/^/\/root\/puppy\/puppy-unleashed\/packages\/python2.4-subset-axis_puppysit/g" | sed "s/\/$filex//g"` cp `find /usr/local/lib/python2.4 | grep /$filex | grep -v __init__` `find /usr/local/lib/python2.4 | grep /$filex | grep -v __init__ | sed "s/^/\/root\/puppy\/puppy-unleashed\/packages\/python2.4-subset-axis_puppysit/g"` done for filex in `echo " emc.so _random.so fcntlmodule.so selectmodule.so timemodule.so pwdmodule.so minigl.so termios.so _ssl.so cStringIO.so zlibmodule.so gcode.so binascii.so arraymodule.so _togl.so _localemodule.so _socketmodule.so _tkinter.so structmodule.so mathmodule.so strop.so"` do mkdir -p `find /usr/local/lib/python2.4 | grep /$filex | grep -v __init__ | sed "s/^/\/root\/puppy\/puppy-unleashed\/packages\/python2.4-subset-axis_puppysit/g" | sed "s/\/$filex//g"` cp `find /usr/local/lib/python2.4 | grep /$filex | grep -v __init__` `find /usr/local/lib/python2.4 | grep /$filex | grep -v __init__ | sed "s/^/\/root\/puppy\/puppy-unleashed\/packages\/python2.4-subset-axis_puppysit/g"` done cp /usr/local/lib/python2.4/site-packages/emc.so $PYTHON_ROOT/site-packages/ mkdir -p $PYTHON_ROOT/lib-dynload/ cp /usr/local/lib/python2.4/lib-dynload/struct.so $PYTHON_ROOT/lib-dynload/ cp /usr/local/lib/python2.4/lib-dynload/array.so $PYTHON_ROOT/lib-dynload/ cp /usr/local/lib/python2.4/lib-dynload/time.so $PYTHON_ROOT/lib-dynload/ cp /usr/local/lib/python2.4/lib-dynload/math.so $PYTHON_ROOT/lib-dynload/ mkdir -p $PYTHON_ROOT/encodings $PYTHON_ROOT/rs274 cp /usr/local/lib/python2.4/encodings/__init__.pyo $PYTHON_ROOT/encodings cp /usr/local/lib/python2.4/site-packages/rs274/__init__.pyc $PYTHON_ROOT/site-packages/rs274 mkdir -p $PACKAGE_ROOT/usr/local/bin cp /usr/local/bin/python $PACKAGE_ROOT/usr/local/bin # strip it strip --strip-unneeded $PACKAGE_ROOT/usr/local/bin/* strip --strip-debug $PYTHON_ROOT/encodings/* strip --strip-debug $PYTHON_ROOT/lib-tk/* strip --strip-debug $PYTHON_ROOT/site-packages/* strip --strip-debug $PYTHON_ROOT/site-packages/rs274/* # compress the binary /root/puppy/puppy-unleashed/upx -9 $PACKAGE_ROOT/usr/local/bin/python # some necessary fix cd $PACKAGE_ROOT/usr/local/lib/python2.4 find . -name \*.pyo | while read i ; do mv $i ${i%.pyo}.pyc; done # lets get on with axis PACKAGE_ROOT=/root/puppy/puppy-unleashed/packages/axis-22.02.2006-puppysit rm -rf $PACKAGE_ROOT mkdir -p $PACKAGE_ROOT/usr/local/share/axis cp -auv /usr/local/share/axis/* $PACKAGE_ROOT/usr/local/share/axis/ mkdir -p $PACKAGE_ROOT/usr/local/bin cp /usr/src/emc2testing/bin/axis $PACKAGE_ROOT/usr/local/bin mkdir -p $PACKAGE_ROOT/usr/local/share cp -auv /usr/local/share/locale $PACKAGE_ROOT/usr/local/share # now to tcl, tk, mesa and glut PACKAGE_ROOT=/root/puppy/puppy-unleashed/packages/tcl8.4-puppysit rm -rf $PACKAGE_ROOT LIBDIR=$PACKAGE_ROOT/usr/local/lib/ mkdir -p $LIBDIR cp -auv /usr/local/lib/tcl* $LIBDIR cp -auv /usr/local/lib/libtcl* $LIBDIR strip --strip-debug $LIBDIR/* mkdir $PACKAGE_ROOT/usr/local/bin cp -auv /usr/local/bin/tclsh8.4 $PACKAGE_ROOT/usr/local/bin cp -auv /usr/local/bin/wish8.4 $PACKAGE_ROOT/usr/local/bin strip --strip-unneeded $PACKAGE_ROOT/usr/local/bin/* PACKAGE_ROOT=/root/puppy/puppy-unleashed/packages/tk8.4-puppysit rm -rf $PACKAGE_ROOT LIBDIR=$PACKAGE_ROOT/usr/local/lib/ mkdir -p $LIBDIR cp -auv /usr/local/lib/tk* $LIBDIR cp -auv /usr/local/lib/libtk* $LIBDIR strip --strip-debug $LIBDIR/* PACKAGE_ROOT=/root/puppy/puppy-unleashed/packages/mesa_glut-6.4.1-puppysit rm -rf $PACKAGE_ROOT LIBDIR=$PACKAGE_ROOT/usr/local/lib/ mkdir -p $LIBDIR cp -auv /usr/local/lib/libGL* $LIBDIR cp -auv /usr/local/lib/libglu* $LIBDIR strip --strip-debug $LIBDIR/* PACKAGE_ROOT=/root/puppy/puppy-unleashed/packages/mesa_lib-6.4.1-puppysit rm -rf $PACKAGE_ROOT LIBDIR=$PACKAGE_ROOT/usr/local/lib/ mkdir -p $LIBDIR cp -auv /usr/local/lib/libOSMesa* $LIBDIR strip --strip-debug $LIBDIR/* # we finished creating the unleashed directorys # #/root/puppy/puppy-unleashed/packages/emc2-25.02.2006-puppysit: #/root/puppy/puppy-unleashed/packages/libexpat-0.5.0_puppysit: #/root/puppy/puppy-unleashed/packages/mesa_glut-6.4.1-puppysit: #/root/puppy/puppy-unleashed/packages/mesa_lib-6.4.1-puppysit: #/root/puppy/puppy-unleashed/packages/python2.4-subset-axis_puppysit: #/root/puppy/puppy-unleashed/packages/rtai-3.2-doc_puppysit: #/root/puppy/puppy-unleashed/packages/rtai-3.2-runtime_puppysit: #/root/puppy/puppy-unleashed/packages/tcl8.4-puppysit: #/root/puppy/puppy-unleashed/packages/tk8.4-puppysit: # # # FINNISH !!! YOU DID IT !!! # you are ready to build coolcnc now. enter the unleashed directory # type ./createpuppy, just select or deselct the packages youd like # with your iso and follow the instructions given by the script. # i put together some sample packages.txt in the future. i promise :) # this version reflects the progress of this howto on March 2nd 2006 # KNOWN PROBLEMS AND WORKAROUNDS # # # if your computer hangs after entering graphical mode, you do have # to configure the xserver correctly manualy! # tested by now are: # qemu - using the Xvesa server # matrox milleniumII pci - using the Xorg server # matrox g550 - using the Xorg server # nvidia Geforce3 - works with the Xorg server