Dbox2:Create Images and Yadd's
Development
- Allgemein
- Neutrino-HD-Entwicklung
- dbox2 Entwicklung
Inhaltsverzeichnis
- 1 Build system prerequisites
- 2 Creating images with Neutrino on JFFS2 or SquashFS.
- 3 Building Images using local.sh files
- 3.1 flash-version-local.sh (JFFS2 / SquashFS)
- 3.2 root-local.sh (JFFS2 / SquashFS)
- 3.3 neutrino-jffs2.img1x-local.sh (JFFS2 ONLY)
- 3.4 neutrino-jffs2.img2x-local.sh (JFFS2 ONLY)
- 3.5 root-neutrino-jffs2-local.sh (JFFS2 ONLY)
- 3.6 neutrino-squashfs.img1x-local.sh (SquashFS ONLY)
- 3.7 neutrino-squashfs.img2x-local.sh (SquashFS ONLY)
- 3.8 root-neutrino-squashfs-local.sh (SquashFS ONLY)
- 3.9 var-neutrino-local.sh (SquashFS ONLY)
- 4 References
Build system prerequisites
The prerequisites on the host for building tuxbox images can done on almost any Unix/Linux system with some 2 GB of free disk space. I personally use ubuntu/gentoo as they are my favourite linux distro. I have helped people on SuSE and ReadHat systems and know it builds fine on them too. I once had it running on cygwin but it takes ages to setup and is not for the faint harted.
The official tool requirement and versions at the time of this writing this document are in the following table:
The build process will automatically check some of these requirements. If you are missing one of the programs, of if your version is older than the above requirements your build could fail.
Note: Other tools are require like fakeroot, mksquashfs, mkcramfs, mkjffs2fs (or mkfs.jffs2), and, possibly, mklibs to be installed on your system.
Once you have checked out your CVS you can use the following tool to check that your system prerequisite are up to standard
~/tuxbox/tuxbox-cvs/hostapps/toolchecker/toolchecker.sh
Creating images with Neutrino on JFFS2 or SquashFS.
There are many guides out there on how to create images. I have simply tried to simplify it so that it makes it a little easier for most people. I have looked at many guides and howto’s and decided it was about time someone summarised all their findings into one short but sweet document. So here goes:
Firstly let’s set up the necessary directory structure.
mkdir tuxbox cd tuxbox mkdir tuxbox-cvs mkdir dbox2 mkdir private mkdir private/archive mkdir private/files mkdir private/logos mkdir private/locals
Lets explain the some of the directories we have just created. Our main directory is “tuxbox” this is where all our files and subdirectories will go in. We will download the CVS source into the foleder called “tuxbox-cvs”. The image will get compiled into “dbox2”. The “archive” directory will keep a copy of all the downloaded files needed in the compile process, we will get onto this a little later. The “files” directory is where you can copy all your files you wish to copy onto the image, we can make it part of the build process. “logos” is where you place your logo files and we set this in the configure. “ucodes” is the directory to place your ucodes in and again later on this directory will be specified in the configure process. The “locals” directory is if we use customisation files to automate things in our build. We will get onto that a bit later in the document.
Now let’s download the source from CVS for the first time:
cvs -z3 -d anoncvs@cvs.tuxbox.org:/cvs/tuxbox co -P .
NOTE: This is for first time updates only!
If you wish to update your CVS please use the following command, not only is it quicker it also saves a lot of bandwidth its around 60MB each time you run a complete update. So save your bandwidth and save others too! Use the following to checkout updates:
cvs -z3 -d anoncvs@cvs.tuxbox.org:/cvs/tuxbox up -dP .
The make process downloads all the dependencies into a folder called Archive. If you ever run a clean CVS build you do not want to download the packages over again. To resolve this issue we symlink the “private/archive” we created in the first step to the “cdk/Archive” which is where make downloads the packages to.
ln -sf ~/tuxbox/private/archive ~/tuxbox/tuxbox-cvs/cdk/Archive
Now we have all the mucking about out the way let’s start the build process. Firstly we need to run the autogen to generate all the necessary build files.
cd ~/tuxbox/tuxbox-cvs/cdk/ ./autogen.sh
If you wish to patch your source now is the time to do it. For example:
cp patch.diff ~/tuxbox/tuxbox-cvs/ cd ~/tuxbox/tuxbox-cvs/ patch -p1 < patch.diff
NOTE: This step is not mandatory.
Now we can finally configure the build.
./configure \ --prefix="$HOME/tuxbox/dbox2" \ --with-cvsdir="$HOME/tuxbox/tuxbox-cvs" \ --enable-flashrules \ --enable-maintainer-mode \ --with-logosdir="$HOME/tuxbox/private/logos" \ --with-checkImage=warn \ --enable-cdkVcInfo \ --with-defaultlocale=english
NOTE: Please see the Newmake Options for a list of all available options.
I use locals.sh files all the time as you can totally automate your build process. Please see the section on local.sh files for examples of some. If you wish to use them now is the time to copy local.sh over to the right location.
cp -r ~/tuxbox/private/locals/*local.sh ~/tuxbox/tuxbox-cvs/cdk/
Finally here it comes let’s build the image please use the relevant one dependent on your filesystem of choice.
Make JFFS2 filesystem
make flash-neutrino-jffs2-all
Make SquashFS filesystem
make flash-neutrino-squashfs-all
Sit back and relax. I use a dual Intel(R) Xeon(TM) CPU 3.20GHz and it takes me around 31 minutes to compile a image from scratch however if you are using VMware I have heard times from 90 minutes up to 210 minutes.
If you wish to rebuild your image you after you have updated your CVS please remember to clean your target. You can use the following clean target:
cd ~/tuxbox/tuxbox-cvs/cdk make clean
NOTE: Please see Newmake Cleaning Targets for a complete list.
Building Images using local.sh files
Some useful customization scripts, most of these scripts should work out the box but please note that some of the scripts might not suite your needs. Please edit them to your liking.
flash-version-local.sh (JFFS2 / SquashFS)
#!/bin/sh #flash-version-local.sh outfile=$1/root/.version echo "============================================================================================" echo Hello, this is $0, flashprefix=$1 and buildprefix=$2 echo "============================================================================================" echo Creating $outfile ... # release / snapshot / internal echo "version=`./customization/mkversion -internal -version 100`" > $outfile echo "creator=nitr8" >> $outfile echo "imagename=lebelo" >> $outfile echo "homepage=http://www.lebelo.net" >> $outfile
root-local.sh (JFFS2 / SquashFS)
#!/bin/sh #root-local.sh flashprefix=$1 buildprefix=$2 echo "============================================================================================" echo Hello, this is $0, flashprefix=$1 and buildprefix=$2 echo "============================================================================================" set -x #Install some non default components make flash-fbshot make flash-dboxshot make flash-eraseall make flash-hddtemp
neutrino-jffs2.img1x-local.sh (JFFS2 ONLY)
#!/bin/sh #neutrino-jffs2-img2x-local.sh flashprefix=$1 echo "============================================================================================" echo Hello, this is $0, flashprefix=$1 and buildprefix=$2 PREPARE echo "============================================================================================" set -x d=`date +%d-%m-%Y_%Hh%M` #Rename Image mv $flashprefix/neutrino-jffs2.img1x $flashprefix/`grep imagename $flashprefix/root-neutrino-jffs2/.version | sed -e 's/imagename=//'`_x1_$d.img
neutrino-jffs2.img2x-local.sh (JFFS2 ONLY)
#!/bin/sh #neutrino-jffs2-img2x-local.sh flashprefix=$1 echo "============================================================================================" echo Hello, this is $0, flashprefix=$1 and buildprefix=$2 PREPARE echo "============================================================================================" set -x #Rename Image d=`date +%d-%m-%Y_%Hh%M` mv $flashprefix/neutrino-jffs2.img2x $flashprefix/`grep imagename $flashprefix/root-neutrino-jffs2/.version | sed -e 's/imagename=//'`_x2_$d.img
root-neutrino-jffs2-local.sh (JFFS2 ONLY)
#!/bin/sh # root-neutrino-jffs2-local.sh flashprefix=$1 buildprefix=$2 myfiles=$HOME/tuxbox/private/files root=$1/root-neutrino-jffs2 LANGUAGES="english deutsch" echo "============================================================================================" echo Hello, this is $0, flashprefix=$1 and buildprefix=$2 echo "============================================================================================" set -x ## Remove all languages expect ones specified for f in $newroot/share/tuxbox/neutrino/locale/*; do (echo $LANGUAGES | grep -v `basename $f .locale` >/dev/null) && rm -f $f done ## Remove files and directories not needed rm -Rf $root/share/tuxbox/satellites.xml rm -Rf $root/share/tuxbox/neutrino/icons/radiomode.* rm -Rf $root/share/tuxbox/neutrino/icons/scan.* rm -Rf $root/share/tuxbox/neutrino/icons/shutdown.* rm -Rf $root/share/tuxbox/lcdd/clock/* rm -Rf $root/bin/satfind touch $root/var/tuxbox/config/zapit/epgfilter.xml touch $root/var/tuxbox/config/mybouquets.xml touch $root/var/etc/.boot_info touch $root/var/tuxbox/config/zapit/bouquets.xml touch $root/var/tuxbox/config/zapit/services.xml ## Copy files accross cp -r $myfiles/bin/* $root/bin/ cp -r $myfiles/etc/* $root/etc/ cp -r $myfiles/lib/* $root/lib/ cp -r $myfiles/share/* $root/share/ cp -r $myfiles/var/* $root/var/ ## Set the right perms chmod -R 755 $root/bin/smls touch $root/var/etc/.initialize
neutrino-squashfs.img1x-local.sh (SquashFS ONLY)
#!/bin/sh #neutrino-squashfs.img1x-local.sh flashprefix=$1 echo "============================================================================================" echo Hello, this is $0, flashprefix=$1 and buildprefix=$2 PREPARE echo "============================================================================================" set -x d=`date +%d-%m-%Y_%Hh%M` #Rename Image mv $flashprefix/neutrino-squashfs.img1x $flashprefix/`grep imagename $flashprefix/root-neutrino-squashfs/.version | sed -e 's/imagename=//'`_x1_$d.img
neutrino-squashfs.img2x-local.sh (SquashFS ONLY)
#!/bin/sh #neutrino-squashfs.img2x-local.sh flashprefix=$1 echo "============================================================================================" echo Hello, this is $0, flashprefix=$1 and buildprefix=$2 PREPARE echo "============================================================================================" set -x d=`date +%d-%m-%Y_%Hh%M` #Rename Image mv $flashprefix/neutrino-squashfs.img2x $flashprefix/`grep imagename $flashprefix/root-neutrino-squashfs/.version | sed -e 's/imagename=//'`_x2_$d.img
root-neutrino-squashfs-local.sh (SquashFS ONLY)
#!/bin/sh #root-neutrino-squashfs-local.sh flashprefix=$1 buildprefix=$2 myfiles=$HOME/tuxbox/private/files root=$1/root-neutrino-jffs2 LANGUAGES="english deutsch" echo "============================================================================================" echo Hello, this is $0, flashprefix=$1 and buildprefix=$2 echo "============================================================================================" set -x ## Remove all languages expect ones specified for f in $newroot/share/tuxbox/neutrino/locale/*; do (echo $LANGUAGES | grep -v `basename $f .locale` >/dev/null) && rm -f $f done ## Remove files and directories not needed rm -Rf $root/share/tuxbox/satellites.xml rm -Rf $root/share/tuxbox/neutrino/icons/radiomode.* rm -Rf $root/share/tuxbox/neutrino/icons/scan.* rm -Rf $root/share/tuxbox/neutrino/icons/shutdown.* rm -Rf $root/share/tuxbox/lcdd/clock/* rm -Rf $root/bin/satfind ## Copy files accross cp -r $myfiles/share/* $root/share/ ## Set the right perms chmod -R 755 $root/bin/smls
var-neutrino-local.sh (SquashFS ONLY)
#!/bin/sh #var-neutrino-local.sh flashprefix=$1 buildprefix=$2 myfiles=$HOME/tuxbox/private/files root=$1/root-neutrino-jffs2 echo "============================================================================================" echo Hello, this is $0, flashprefix=$1 and buildprefix=$2 echo "============================================================================================" set -x touch $root/var/tuxbox/config/zapit/epgfilter.xml touch $root/var/tuxbox/config/mybouquets.xml touch $root/var/etc/.boot_info touch $root/var/tuxbox/config/zapit/bouquets.xml touch $root/var/tuxbox/config/zapit/services.xml touch $root/var/etc/.initialize ## Copy files accross cp -r $myfiles/var/* $root/var/
## Create symbolic links ln -sf /var/tuxbox/satellites.xml $root/share/tuxbox/satellites.xml ln -sf /var/tuxbox/cables.xml $root/share/tuxbox/cables.xml
References
- GNU Make manual
- Autoconf manual
- Automake manual
- GNU Autoconf, Automake, and Libtool
- GNU Coding standards
- Open Source Development with CVS, 3rd Edition
- Barf’s dBox
Grundlagen - Installation - Debug-Mode - Hardware - CDK/Development
LCars - Neutrino - Enigma - Plugins - Spiele - Software - Tools - Howto - FAQ - Images
Hauptseite - News - Alle Artikel - Bewertungen - Gewünschte Seiten - Index - Neue Artikel - Impressum - Team
Hilfeportal - Seite bearbeiten - Bilder - Links - Tabellen - Textgestaltung