%% LyX 1.4.2 created this file.  For more info, see http://www.lyx.org/.
%% Do not edit unless you really know what you are doing.
\documentclass[12pt,a4paper,english]{scrartcl}
\usepackage{pslatex}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{fancyhdr}
\pagestyle{fancy}
\setlength{\parskip}{\medskipamount}
\setlength{\parindent}{0pt}
\usepackage{varioref}
\IfFileExists{url.sty}{\usepackage{url}}
                      {\newcommand{\url}{\texttt}}

\makeatletter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Textclass specific LaTeX commands.
\newenvironment{lyxcode}
{\begin{list}{}{
\setlength{\rightmargin}{\leftmargin}
\setlength{\listparindent}{0pt}% needed for AMS classes
\raggedright
\setlength{\itemsep}{0pt}
\setlength{\parsep}{0pt}
\fontsize{7}{9pt}\normalfont\ttfamily}%
 \item[]}
{\end{list}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% User specified LaTeX commands.
\usepackage{makeidx,color}
%begin{latexonly}

\lhead{Section \thesection}
\chead{}
\rhead{User Guide}
\lfoot{Page \thepage}
\cfoot{}
\rfoot{\today}

\usepackage{ifpdf}
\ifpdf
    \pdfinfo { /Author (Duncan Webb)
        /Title (Freevo From Scratch Configuration Guide)
        /Subject (Freevo)
    }
    \pdfcatalog { /PageMode (/UseNone)
        /OpenAction (fitbh)
    }
    \usepackage[pdftex,colorlinks=true]{hyperref}
\else
    \usepackage[ps2pdf]{hyperref}
\fi

%end{latexonly}
\usepackage{html}
\usepackage{hthtml}
\begin{htmlonly}
\newcommand{\vref}[1]{\ref{#1}}
\newcommand{\htmldivID}[2]{\HTMLcode[ID="#1"]{DIV}{#2}}
\end{htmlonly}
\newcommand{\locator}[2]{\latexhtml{\url{#2}}{\htlink{#1}{#2}}}

\usepackage{babel}
\makeatother
\begin{document}
\begin{rawhtml}<div id="titlepage">\end{rawhtml}  


\title{Freevo From Scratch\\
Configuration Guide}


\author{Duncan Webb}

\maketitle
\begin{abstract}
This document describes the steps that are required to build a Personal
Video Recorder (PVR) from scratch. The goal of this project is to
build a PVR that can be used by people with hearing difficulties so
that subtitles are recorded along with the television programs. When
a program is played back the recorded subtitles are displayed along
with the program. The from scratch in the title means that all the
software used to build this system is royality free and has been built
from source code.
\end{abstract}
\begin{rawhtml}</div>\end{rawhtml} 

%begin{latexonly}
\lhead{Contents}
\newpage
\tableofcontents{}
\newpage
\lhead{Section \thesection}
%end{latexonly} 


\section{Introduction}

PVR from scratch is a project to build a Personal Video Recorder (PVR)
using open source software and easily obtainable hardware. The hardware
is build from personal computer components, the operating system is
Linux and the PVR software is Python programs. Python in a scripting
language that runs on various platforms including Microsoft Window,
Mac OsX and Linux.


\section{Hardware}

The hardware that has been selected has to meet several criteria.
It must be small and attractive enough to resemble a set-top box,
it must be quiet and all the drivers for the components must be supported
by Linux. The system chosen is a barebones system from Shuttle, the
system components were selected for quality and a reasonable price.
Cheaper component could have been used and it may have been possible
to save 10\% of the total cost. The hardware components are:


\subsection{Specification}

Quiet as possible

Intel of AMD64 processor

2 PCI slots or 1 PCI slot + wifi adapter

Audio Optical Output

Built in Graphics Card

Serial ATA drives


\subsection{Details\label{sub:Details-Prices}}

Shuttle XPC SB83G5M, Intel 915G, Socket LGA775, Media Center (567.-)\\
Shuttle PN18, XPC Wireless LAN Adapter, 802.11g (150.-)\\
Intel Pentium 4 511 2.8 GHz BOX, 1MB, 533MHz FSB, LGA775 (145.-)\\
Kingston KHX3200AK2/1G, 1024MB als 2x512MB DDR400 Kit, CL2 (149.-)\\
Samsung HD300LJ, T133, 7200rpm, 8MB, 300GB, SATA-II (140.-)\\
Plextor PX-750A, 16x DVD\ensuremath{±}RW Writer, grau+schwarz, Retail
(92.-)\\
Hauppauge WinTV PVR-350, Personal Video Recording (192.-)\\
Shuttle PF60 Tragetasche für XPC Barebones (94.-)

It took several hours to assemble the system, a barebones system is
more fiddly to assemble than a standard PC. The manuals supplied by
Shuttle are good quality and clearly written. Once the system was
built, connected to a monitor, keyboard, mouse and a power cable.
A Knoppix 5.0.1 bootable CD was placed in the DVD drive and the system
was powered up, it worked first time.

The assemble of the system went quite smoothly. The installation of
the wireless LAN adapter was a bit awkward. The CPU was easy enough,
the cooling fan that was supplied with the procesor was not required.
The memory as installed with a snap. The S-ATA hard disk was installed
into the drive holder; S-ATA drives are much easier to connect than
standard IDE drives. The DVD drive needed some accurate positioning
to ensure that the eject button aligned with the door button. One
cable that was not supplied is an audio cable to connect the DVD drive
to the motherboard. The WinTV card was installed in the PCI slot.
The connector that opens the drive door need to be changed to the
1.8mm riser. 

In Section \vref{sub:pci} you will see the PCI ids


\subsection{Linux Drivers}


\subsubsection{Hardware\label{sub:Hardware}}

\begin{lyxcode}
Shuttle~XPC~SB83G5M,~Intel~915G,~Socket~LGA775,~Media~Center

Shuttle~PN18,~XPC~Wireless~LAN~Adapter,~802.11g~zd1211~\locator{ZyDAS ZD1211 802.11b/g}{http://zd1211.ath.cx/}~\locator{download}{http://zd1211.ath.cx/download/}~\locator{UserGuide}{http://safecom.cn/code/product/WLAN/SWMULZ-5400/manual/SWMULZ-5400-Linux-UserGuide.pdf}

Intel~Pentium~4~511~2.8~GHz~BOX,~1MB,~533MHz~FSB,~LGA775

Kingston~KHX3200AK2/1G,~1024MB~als~2x512MB~DDR400~Kit,~CL2

Samsung~HD300LJ,~T133,~7200rpm,~8MB,~300GB,~SATA-II

Plextor~PX-750A,~16x~DVD\ensuremath{±}RW~Writer,~grau+schwarz,~Retail

Hauppauge~WinTV~PVR-350,~Personal~Video~Recording~IVTV Driver \url{http://ivtvdriver.org/index.php/Main_Page}~url

IVTV Driver \htmlurl{http://ivtvdriver.org/index.php/Main_Page}~htmlurl

\locator{IVTV Driver}{http://ivtvdriver.org/index.php/Main_Page}~locator
\end{lyxcode}

\subsubsection{pci\label{sub:pci}}

\begin{lyxcode}
00:00.0~Host~bridge:~Intel~Corporation~915G/P/GV/GL/PL/910GL~Express~Memory~Controller~Hub~(rev~04)

00:02.0~VGA~compatible~controller:~Intel~Corporation~82915G-/GV-/910GL~Express~Chipset~Family~Graphics~Controller~(rev~04)

00:1d.0~USB~Controller:~Intel~Corporation~82801FB/FBM/FR/FW/FRW~(ICH6~Family)~USB~UHCI~\#1~(rev~03)

00:1d.1~USB~Controller:~Intel~Corporation~82801FB/FBM/FR/FW/FRW~(ICH6~Family)~USB~UHCI~\#2~(rev~03)

00:1d.2~USB~Controller:~Intel~Corporation~82801FB/FBM/FR/FW/FRW~(ICH6~Family)~USB~UHCI~\#3~(rev~03)

00:1d.3~USB~Controller:~Intel~Corporation~82801FB/FBM/FR/FW/FRW~(ICH6~Family)~USB~UHCI~\#4~(rev~03)

00:1d.7~USB~Controller:~Intel~Corporation~82801FB/FBM/FR/FW/FRW~(ICH6~Family)~USB2~EHCI~Controller~(rev~03)

00:1e.0~PCI~bridge:~Intel~Corporation~82801~PCI~Bridge~(rev~d3)

00:1e.2~Multimedia~audio~controller:~Intel~Corporation~82801FB/FBM/FR/FW/FRW~(ICH6~Family)~AC'97~Audio~Controller~(rev~03)

00:1f.0~ISA~bridge:~Intel~Corporation~82801FB/FR~(ICH6/ICH6R)~LPC~Interface~Bridge~(rev~03)

00:1f.1~IDE~interface:~Intel~Corporation~82801FB/FBM-/FR-/FW-/FRW~(ICH6~Family)~IDE~Controller~(rev~03)

00:1f.2~IDE~interface:~Intel~Corporation~82801FR/FRW~(ICH6R/ICH6RW)~SATA~Controller~(rev~03)

00:1f.3~SMBus:~Intel~Corporation~82801FB/FBM/FR/FW/FRW~(ICH6~Family)~SMBus~Controller~(rev~03)

01:09.0~Multimedia~video~controller:~Internext~Compression~Inc~iTVC15~MPEG-2~Encoder~(rev~01)

01:0a.0~FireWire~(IEEE~1394):~VIA~Technologies,~Inc.~IEEE~1394~Host~Controller~(rev~80)

01:0b.0~Ethernet~controller:~Marvell~Technology~Group~Ltd.~88E8001~Gigabit~Ethernet~Controller~(rev~13)
\end{lyxcode}

\section{Freevo Configuration}

The following sections are extracted directly from the /etc/freevo/local\_conf.py
configuration file.

\begin{lyxcode}
\#~local\_conf.py

\#~see~/usr/share/freevo/freevo\_config.py~for~defaults

\#~see~/etc/freevo/freevo.conf~for~programs~and~devices



CONFIG\_VERSION~=~5.15

LOCALE~=~'utf8'
\end{lyxcode}

\subsection{Audio settings}

These are a list of settings for the audio

\begin{lyxcode}
\#AUDIO\_DEVICE~=~'/dev/dsp'

MAJOR\_AUDIO\_CTRL~=~'VOL'

CONTROL\_ALL\_AUDIO~=~1

DEFAULT\_VOLUME~=~70

TV\_IN\_VOLUME~=~80

VCR\_IN\_VOLUME~=~60

RADIO\_IN\_VOLUME~=~85
\end{lyxcode}

\subsection{System settings}

\begin{lyxcode}
START\_FULLSCREEN\_X~=~1

ENABLE\_SHUTDOWN\_SYS~=~1

CONFIRM\_SHUTDOWN~=~1

SHUTDOWN\_SYS\_CMD~=~'/usr/local/bin/shutdownfreevo~grub~2~yes'

CACHE\_IMAGES~=~1

UMASK~=~002

ROM\_DRIVES~=~{[}~('/mnt/dvd',~'/dev/dvd',~'DVD')~]

ROM\_SPEED~=~8
\end{lyxcode}

\subsection{Changed event settings}

\begin{lyxcode}
EVENTS{[}'menu']{[}'REC']~=~Event(MENU\_CALL\_ITEM\_ACTION,~arg='queue\_a\_track')

EVENTS{[}'menu']{[}'YELLOW']~=~Event(MENU\_CALL\_ITEM\_ACTION,~arg='close\_playlist')

EVENTS{[}'video']{[}'ENTER']~=~Event(VIDEO\_MANUAL\_SEEK)

EVENTS{[}'video']{[}'REPLAY']~=~Event(VIDEO\_SEND\_MPLAYER\_CMD,~arg='seek~-60')

EVENTS{[}'video']{[}'SKIP']~=~Event(VIDEO\_SEND\_MPLAYER\_CMD,~arg='seek~+60')

EVENTS{[}'video']{[}'PLAY']~=~Event(VIDEO\_SEND\_MPLAYER\_CMD,~arg='speed\_set~1.0')

EVENTS{[}'video']{[}'FFWD']~=~Event(VIDEO\_SEND\_MPLAYER\_CMD,~arg='speed\_mult~2.0')

EVENTS{[}'video']{[}'REW']~=~Event(VIDEO\_SEND\_MPLAYER\_CMD,~arg='pausing~seek~-30')

EVENTS{[}'video']{[}'LANG']~=~Event(VIDEO\_SEND\_MPLAYER\_CMD,~arg='switch\_audio')

EVENTS{[}'video']{[}'SUBTITLE']~=~Event(VIDEO\_SEND\_MPLAYER\_CMD,~arg='vobsub\_lang')

EVENTS{[}'video']{[}'CH+']~=~Event(VIDEO\_SEND\_MPLAYER\_CMD,~arg='sub\_pos~-1')

EVENTS{[}'video']{[}'CH-']~=~Event(VIDEO\_SEND\_MPLAYER\_CMD,~arg='sub\_pos~+1')

EVENTS{[}'video']{[}'GREEN']~=~Event(VIDEO\_SEND\_MPLAYER\_CMD,~arg='audio\_delay~+0.05')

EVENTS{[}'video']{[}'YELLOW']~=~Event(VIDEO\_SEND\_MPLAYER\_CMD,~arg='audio\_delay~-0.10')

EVENTS{[}'video']{[}'GUIDE']~=~Event(VIDEO\_SEND\_MPLAYER\_CMD,~arg='screenshot')

EVENTS{[}'video']{[}'LEFT']~=~Event(VIDEO\_SEND\_MPLAYER\_CMD,~arg='pausing~seek~-0.1')

EVENTS{[}'video']{[}'RIGHT']~=~Event(VIDEO\_SEND\_MPLAYER\_CMD,~arg='pausing~frame\_step~+1.0')

EVENTS{[}'video']{[}'UP']~=~Event(VIDEO\_SEND\_MPLAYER\_CMD,~arg='pausing~seek~+0.5')

EVENTS{[}'video']{[}'DOWN']~=~Event(VIDEO\_SEND\_MPLAYER\_CMD,~arg='pausing~seek~-0.5')

EVENTS{[}'video']{[}'SELECT']~=~Event(VIDEO\_SEND\_MPLAYER\_CMD,~arg='pausing~edl\_mark')
\end{lyxcode}

\subsection{Plugins and settings}


\subsubsection{idlebar}

\begin{lyxcode}
plugin.activate('idlebar')

plugin.activate('idlebar.tv',~level~=~20)

plugin.activate('idlebar.cdstatus',~level~=~20)

plugin.activate('idlebar.holidays',~level~=~20)

plugin.activate('idlebar.clock',~level~=~50,~args='\%a~\%d~\%H:\%M')

plugin.activate('idlebar.wakeup',~level~=~20)
\end{lyxcode}

\subsubsection{wakeup plugin settings}

\begin{lyxcode}
WAKEUP\_SERVER\_UID~=~0

WAKEUP\_SERVER\_GID~=~0

WAKEUP\_SERVER\_HOST~=~'127.0.0.1'

WAKEUP\_SERVER\_PORT~=~18002

WAKEUP\_CONFIGFILE~=~'/etc/nvram-wakeup.conf'

WAKEUP\_SHUTDOWN\_DELAY~=~2

WAKEUP\_SHUTDOWN\_TIME~=~20

WAKEUP\_REBOOT\_TIME~=~10

WAKEUP\_AT\_FALLBACK~=~{[}

'RelativeDateTime(days=0,~hour=9,minute=0,second=0)',

'RelativeDateTime(days=1,~hour=9,minute=0,second=0)',

]

plugin.activate('wakeupclient')
\end{lyxcode}

\subsubsection{weather plugin settings}

\begin{lyxcode}
PLUGIN\_WEATHER\_LOCATIONS~=~{[}~('SZXX0033',~1)~]

plugin.activate('weather',~level~=~45)

plugin.activate('directory.Dirwatcher')

plugin.activate('audio.playlist',~args~=~('/freevo/playlists','Playlist~\%m:\%d'))

AUDIO\_BACKUP\_DIR~=~'/freevo/music'

CD\_RIP\_PN\_PREF~=~'\%(artist)s/\%(album)s/\%(track)s~-~\%(song)s'

CD\_RIP\_LAME\_OPTS~=~'-{}-vbr-new~-b~192~-h'

plugin.activate('audio.cdbackup')

plugin.activate('audio.coversearch')

plugin.activate('video.dvdimage')
\end{lyxcode}

\subsubsection{radio plugin settings}

\begin{lyxcode}
plugin.activate('audio.radioplayer')

plugin.activate('audio.radio')

RADIO\_CMD~=~'/usr/bin/ivtv-radio~-d~/dev/radio0~-i~/dev/video24'

RADIO\_STATIONS~=~{[}

(u'DRS~1',~'94.80'),

(u'DRS~2',~'95.60'),

(u'DRS~3',~'97.40'),

(u'VIRUS',~'104.30'),

(u'Radio~Rumantsch',~'96.00'),

(u'DRS~Musigwälle',~'106.40'),

(u'Radio~Swiss~Classic',~'106.90'),

(u'Radio~Swiss~Pop',~'107.30'),

(u'Radio~Swiss~Jazz',~'96.30'),

(u'Radio~24',~'102.90'),

(u'Energy~Zürich',~'101.10'),

(u'Radio~Zürisee',~'90.20'),

(u'Radio~LoRa',~'88.10'),

(u'Radio~Sunshine',~'106.10'),

(u'Radio~Argovia',~'103.90'),

(u'Radio~Top~(Reg.~Winterthur)',~'105.40'),

(u'Radio~Tropic',~'98.70'),

(u'Radio~Eviva',~'92.80'),

(u'RSR~1~(La~première)',~'97.70'),

(u'RSR~2~(Espace~2)',~'98.30'),

(u'RSR~3~(Couleur~3)',~'99.00'),

(u'France~Culture',~'101.90'),

(u'France~Inter',~'100.70'),

(u'France~Musique',~'99.40'),

(u'RSI~1~(Rete~1)',~'96.80'),

(u'Österreich~1',~'91.40'),

(u'Österreich~2',~'92.10'),

(u'RSI~2~(Rete~2)',~'93.50'),

(u'SWR~1~BW',~'88.50'),

(u'SWR~2~BW',~'89.00'),

(u'SWR~3',~'89.50'),

(u'SWR~4~BW',~'87.80'),

(u'Bayern~1',~'93.10'),

(u'RSI~3~(Rete~3)',~'92.40'),

(u'Bayern~3',~'93.80'),

(u'Bayern~4~Klassik',~'94.20'),

(u'Deutschlandfunk',~'89.80'),

(u'Radio~Monte~Carlo~Swiss',~'95.10'),

(u'Radio~105~Network',~'105.10'),

(u'Life~Channel',~'107.60'),

(u'Voice~of~America',~'91.00'),

(u'BBC~World~Service',~'90.70'),

(u'Klassik~Radio',~'103.30'),

(u'Swiss~Music~Radio',~'104.60')

]
\end{lyxcode}

\subsubsection{Headlines plugin settings}

\begin{lyxcode}
plugin.activate('headlines',~level~=~40)

HEADLINES\_LOCATIONS~=~{[}

(u'BBC~Front~Page',~'http://newsrss.bbc.co.uk/rss/newsonline\_uk\_edition/front\_page/rss.xml'),

(u'BBC~World',~'http://newsrss.bbc.co.uk/rss/newsonline\_uk\_edition/world/rss.xml'),

(u'BBC~Technology',~'http://newsrss.bbc.co.uk/rss/newsonline\_uk\_edition/technology/rss.xml'),

(u'ZDNet~Linux',~'http://feeds.zdnet.co.uk/rss/0,39026141,10000004c,00.htm'),

(u'Tagesschau','http://www.tagesschau.de/newsticker.rdf'),

(u'Spiegel~Online','http://www.spiegel.de/schlagzeilen/rss/0,5291,,00.xml'),

(u'Faz.net','http://www.faz.net/s/Rub/Tpl\textasciitilde{}Epartner\textasciitilde{}SRss\_.xml'),

(u'Netzeitung.de','http://www.netzeitung.de/export/news/rss/titelseite.xml'),

(u'Stern.de','http://www.stern.de/standard/rss.php?channel~=~all'),

(u'Pressedienst,~News,~Analysen~zu~Inet-Marketing~+~Suchmaschinen','http://www.marketingman.de/rss.php'),

(u'Geo.de','http://www.geo.de/rss/GEO/index.xml'),

(u'TheGeek.de~-~Coding,~Culture~and~Arts','http://www.thegeek.de/blog/rss2.php'),

(u'Heise~News','http://www.heise.de/newsticker/heise.rdf'),

(u'Heise~Security','http://www.heise.de/security/news/news.rdf'),

(u'Heise~Mobil','http://www.heise.de/mobil/newsticker/heise.rdf'),

(u'Pro-Linux','http://www.pl-forum.de/backend/pro-linux.rdf'),

(u'Telepolis','http://www.heise.de/tp/news-xl.rdf'),

(u'php-homepage.de','http://www.php-homepage.de/backend/rss/1.0/'),

(u'Polarluft~-~Neue~Webseiten~und~Online-Artikel~zum~Thema~Computer~und~Internet','http://www.polarluft.de/all.rss')

]
\end{lyxcode}

\subsubsection{Other plugin settings}

\begin{lyxcode}
plugin.activate('shoppingcart')

plugin.activate('usb')

for~t~in~('video',~'audio',~'image'):

plugin.activate('usbstorage',~type=t,~args=('Drive~USB',~'/media/usbdrive1'))

plugin.activate('fxditem.Mimetype')

plugin.activate('playlist.Mimetype')

plugin.activate('vfd')

plugin.activate('df')

plugin.remove('tv.generic\_record')

plugin\_record~=~plugin.activate('tv.vbi2srt\_record')
\end{lyxcode}

\subsection{directory settings}

\begin{lyxcode}
OVERLAY\_DIR~=~'/var/freevo/overlay'

DIRECTORY\_REVERSE\_SORT~=~1

DIRECTORY\_SMART\_SORT~=~1

DIRECTORY\_AUTOPLAY\_SINGLE\_ITEM~=~1

DIRECTORY\_FORCE\_SKIN\_LAYOUT~=~-1

DIRECTORY\_USE\_MEDIAID\_TAG\_NAMES~=~1

\#a~=~artist,~n~=~tracknumber,~t~=~title,~y~=~year,~f~=~filename

DIRECTORY\_AUDIO\_FORMAT\_STRING~=~'\%(t)s'

DIRECTORY\_CREATE\_PLAYLIST~=~{[}~'audio',~'image'~]

DIRECTORY\_ADD\_PLAYLIST\_FILES~=~{[}~'audio',~'image'~]

DIRECTORY\_AUTOPLAY\_ITEMS~=~{[}~'audio',~'image'~]

DIRECTORY\_ADD\_RANDOM\_PLAYLIST~=~{[}~'audio'~]

DIRECTORY\_AUTOPLAY\_ITEMS~=~{[}~]
\end{lyxcode}

\subsection{video settings}

\begin{lyxcode}
VIDEO\_MPLAYER\_SUFFIX~=~{[}

'avi',~'mpg',~'mpeg',~'wmv',~'bin',~'rm',

'divx',~'ogm',~'vob',~'asf',~'m2v',~'m2p',

'mp4',~'viv',~'nuv',~'mov',~'iso',~'img',

'nsv',~'mkv',~'ts'

]

VIDEO\_XINE\_SUFFIX~=~{[}

'avi',~'mpg',~'mpeg',~'rm',~'divx',~'ogm',

'asf',~'m2v',~'m2p',~'mp4',~'mov',~'cue',

'ts',~'iso',~'vob'

]

VIDEO\_ITEMS~=~{[}

('TV',~'/freevo/tv'),

('Movies',~'/freevo/movies'),

]

VIDEO\_SHOW\_DATA\_DIR~=~'/freevo/tv'
\end{lyxcode}

\subsection{audio settings}

\begin{lyxcode}
AUDIO\_ITEMS~=~{[}

('Music~Collection',~'/freevo/music'),

]

AUDIO\_COVER\_REGEXP~=~'front|-f'

AUDIO\_PREFERED\_PLAYER~=~'mplayer'

AUDIO\_SHOW\_VIDEOFILES~=~True
\end{lyxcode}

\subsection{image settings}

\begin{lyxcode}
IMAGE\_ITEMS~=~{[}

('Image~Collection',~'/freevo/images'),

('Slide~Shows',~'/freevo/slides'),

]

IMAGEVIEWER\_BLEND\_MODE~=~0

IMAGEVIEWER\_DURATION~=~6
\end{lyxcode}

\subsection{game settings}

\begin{lyxcode}
GAMES\_ITEMS~=~None
\end{lyxcode}

\subsection{on screen display settings}

\begin{lyxcode}
OSD\_DEFAULT\_FONTNAME~=~'Vera.ttf'

OSD\_DEFAULT\_FONTSIZE~=~18

OSD\_EXTRA\_FONT\_PATH~=~{[}~'/usr/share/fonts/truetype/'~]

OSD\_FONT\_ALIASES~=~\{~'Arial\_Bold.ttf'~:~'VeraBd.ttf'~\}

OSD\_OVERSCAN\_X~=~40

OSD\_OVERSCAN\_Y~=~40
\end{lyxcode}

\subsection{mplayer settings}

\begin{lyxcode}
MPLAYER\_VO\_DEV~=~CONF.display

\#MPLAYER\_AO\_DEV~=~'alsa:device=plug=digital'

MPLAYER\_AO\_DEV~=~'alsa'

MPLAYER\_ARGS\_DEF~=~(('-autosync~100~-osd-duration~2000~-menu~-nolirc~-autoq~100~-screenw~\%s~'

+~'-screenh~\%s~-fs~-subpos~92~-vf~screenshot')~\%~(CONF.width,~CONF.height))

DVD\_LANG\_PREF~=~None

DVD\_SUBTITLE\_PREF~=~None

MPLAYER\_NICE~=~-10

MPLAYER\_ARGS~=~\{

'dvd'~:~'-cache~8192',

'vcd'~:~'-cache~4096',

'cd'~:~'-cache~1024~-cdda~speed~=~2',

'tv'~:~'-nocache~',

'ivtv'~:~'-cache~8192',

'mpeg'~:~'-cache~8192~-subfont-text-scale~4~-utf8~-edl~/tmp/mpeg.edl',

'avi'~:~'-cache~5000~-subfont-text-scale~4~-utf8~-idx~-edl~/tmp/avi.edl',

'rm'~:~'-cache~5000~-forceidx',

'rmvb'~:~'-cache~5000~-forceidx',

'webcam'~:~'tv://~-tv~driver~=~v4l:width=640:height=480:device=/dev/video1',

'default':~'-cache~4096~-subfont-text-scale~4~-utf8~-edl~/tmp/default.edl'

\}
\end{lyxcode}

\subsection{xine settings}

\begin{lyxcode}
XINE\_VO\_DEV~=~'xv'

XINE\_COMMAND~=~'\%s~-{}-hide-gui~-pq~-g~-B~-{}-geometry~\%sx\%s+0+0~-{}-no-splash'~\%~(CONF.xine,~CONF.width,~CONF.height)

XINE\_AO\_DEV~=~'alsa'
\end{lyxcode}

\subsection{tv settings}

\begin{lyxcode}
TV\_LOGOS~=~'/var/freevo/logos'

TV\_RECORD\_DIR~=~'/freevo/record'

TV\_DRIVER~=~'v4l2'

TV\_DEVICE~=~'/dev/video0'

TV\_INPUT~=~4

TV\_DRIVER\_2~=~'v4l2'

TV\_DEVICE\_2~=~'/dev/video1'

TV\_INPUT\_2~=~0

TV\_OPTS~=~'-vop~pp=ci'

TV\_SETTINGS~=~'\%s~television~\%s~\%s'~\%~(CONF.tv,~CONF.chanlist,~TV\_DEVICE)

TV\_DATEFORMAT~=~'\%e-\%b'

TV\_TIMEFORMAT~=~'\%H:\%M'

TV\_DATETIMEFORMAT~=~'\%A~\%d~\%b~\%I:\%M~\%p'

TV\_RECORDFILE\_MASK~=~'\%\%Y\%\%m\%\%d\_\%\%H\%\%M~\%(progname)s~-~\%(title)s'

TV\_RECORD\_SCHEDULE~=~'/var/freevo/record\_schedule.xml'

TV\_RECORD\_SERVER\_UID~=~0

TV\_RECORD\_SERVER\_GID~=~100

TV\_RECORD\_PADDING~=~3~{*}~60

TIMESHIFT\_BUFFER\_SIZE~=~128

TIMESHIFT\_ENCODE\_CMD~=~'mp1e~-m3~-c\%s~-p\%s~-r14,100'~\%~(TV\_SETTINGS.split(){[}3],~AUDIO\_INPUT\_DEVICE)

TIMESHIFT\_BUFFER~=~'\%s/timeshift.mpeg'~\%~FREEVO\_CACHEDIR

VCR\_AUDIO~=~(

\#':alsa:adevice=hw.0,0'~+

':alsa'~+

':amode~=~1'~+

':audiorate~=~32000'~+

':buffersize~=~64')

TV\_VIEW\_SIZE~=~(720,~576)

TV\_REC\_SIZE~=~(640,~480)

TV\_VIEW\_OUTFMT~=~'yuy2'

TV\_REC\_OUTFMT~=~'yuy2'

VCR\_CMD~=~(CONF.mencoder~+~'~'~+

'tv://~'~+

'-tv~driver~=~\%s:input=\%d'~\%~(TV\_DRIVER,~TV\_INPUT)~+

':norm~=~\%s'~\%~CONF.tv~+

':channel~=~\%(channel)s'~+

':chanlist~=~\%s'~\%~CONF.chanlist~+

':width~=~\%d:height=\%d'~\%~(TV\_REC\_SIZE{[}0],~TV\_REC\_SIZE{[}1])~+

':outfmt~=~\%s'~\%~TV\_REC\_OUTFMT~+

':device~=~\%s'~\%~TV\_DEVICE~+

VCR\_AUDIO~+

'~-ovc~lavc~-lavcopts~'~+

'vcodec~=~mpeg4'~+

':vbitrate~=~1200:'~+

'keyint~=~30~'~+

'-oac~mp3lame~-lameopts~'~+

'br~=~128:cbr:mode=3~'~+

'-ffourcc~divx~'~+

'-endpos~\%(seconds)s~'~+

'-o~\%(filename)s')
\end{lyxcode}

\subsubsection{ivtv driver settings}

\begin{lyxcode}
TV\_IVTV\_OPTIONS~=~\{

'input'~:~4,

'resolution'~:~'720x576',

'aspect'~:~2,

'audio\_bitmask'~:~0xE9,

'bframes'~:~3,

'bitrate\_mode'~:~0,

'bitrate'~:~8000000,

'bitrate\_peak'~:~9600000,

'dnr\_mode'~:~3,

'dnr\_spatial'~:~0,

'dnr\_temporal'~:~0,

'dnr\_type'~:~0,

'framerate'~:~0,

'framespergop'~:~12,

'gop\_closure'~:~1,

'pulldown'~:~0,

'stream\_type'~:~14,

\}
\end{lyxcode}

\subsubsection{video groups}

\begin{lyxcode}
VIDEO\_GROUPS~=~{[}

VideoGroup(vdev~=~'/dev/video0',

adev~=~'/dev/adsp',

input\_type~=~'tuner',

input\_num~=~4,

tuner\_norm~=~CONF.tv,

tuner\_chanlist~=~CONF.chanlist,

desc~=~'PVR-350~Video~Group',

group\_type~=~'ivtv',

recordable~=~True),

VideoGroup(vdev~=~'/dev/video1',

adev~=~None,

input\_type~=~'webcam',

desc~=~'Logitech~Quickcam',

group\_type~=~'webcam1',

recordable~=~False),

]
\end{lyxcode}

\subsubsection{tv channels}

\begin{lyxcode}
TV\_CHANNELS~=~{[}

('bbcprime.com',~u'BBC~Prime',~'K32',~'',~'0',~'881'),

('cnn.com',~u'CNN~Int.',~'S13'),

('kika.de',~u'KiKa',~'K21',~('1234567','0600','2059')),

('arte.de',~u'Arte',~'K21',~('1234567','2100','2359'),

('1234567',u'0000','0559'),~0,~150),

('C1.sfdrs.ch',~u'SF~1',~'K05',~'',~'0',~'777'),

('C2.sfdrs.ch',~u'SF~2',~'K10',~'',~'0',~'777'),

('sfi.sfdrs.ch',~u'SFinfo',~'K35'),

('C138.bluewin.ch',~u'3+',~'S15'),

('bloomberg.com',~u'Bloomberg',~'S23'),

('eurosport.de',~u'Eurosport',~'S17'),

('C1.orf.at',~u'ORF~1',~'S05',~'',~'0',~'777'),

('C2.orf.at',~u'ORF~2',~'K34',~'',~'0',~'777'),

('C3sat.de',~u'3sat',~'S10',~'',~'0',~'777'),

('sat1.ch',~u'SAT~1',~'S19',~'',~'0'),

('ard.de',~u'ARD',~'K09',~'',~'0',~'150'),

('kabel1.de',~u'kabel~eins',~'S04',~'',~'0',~'149'),

('C3.br-online.de',~u'Bayern~3',~'K29',~'',~'0',~'150'),

('prosieben.ch',~u'PRO~7',~'K27',~'',~'0',~'149'),

('vox.de',~u'VOX',~'K30',~'',~'0'),

('rtl.ch',~u'RTL',~'K06',~'',~'0'),

('rtl2.de',~u'RTL~2',~'K22'),

('super-rtl.de',~u'Super~RTL',~'S26'),

('wdr.de',~u'WDR',~'S31',~'',~'0',~'150'),

('zdf.de',~u'ZDF',~'K11',~'',~'0',~'777'),

('dsf.com',~u'DSF',~'K24',~'',~'0'),

('n-tv.de',~u'n-tv',~'K28',~'',~'0'),

('toponline.ch',~u'Tele~Züri',~'S09',~'',~'0'),

('swr.de',~u'Südwest~Fernsehen~BW',~'S14',~'',~'0'),

('startv.ch',~u'Star~TV',~'S07',~'',~'0'),

('u1tv.ch',~u'U1~TV~STATION',~'S33',~'',~'0'),

('mtv.co.uk',~u'MTV',~'S20',~'',~'0'),

('vivatv.ch',~u'VIVA',~'S24',~'',~'0'),

('hse24.de',~u'HSE24',~'S11',~'',~'0'),

('tf1.fr',~u'TF~1',~'S12',~'',~'0'),

('france2.fr',~u'France~2',~'S28',~'',~'0'),

('C1.tsr.ch',~u'TSR~1',~'K07',~'',~'0'),

('C2.tsr.ch',~u'TSR~2',~'K37',~'',~'0'),

('tv5.org',~u'TV5~Monde',~'K31',~'',~'0'),

('raiuno.rai.it',~u'RAI~UNO',~'S08',~'',~'0'),

('C1.rtsi.ch',~u'TSI~1',~'K08',~'',~'0'),

('C2.rtsi.ch',~u'TSI~2',~'S18',~'',~'0'),

('canale5.it',~u'Canale~5',~'K25',~'',~'0'),

('tve.es',~u'TVE~Int.',~'K12',~'',~0,~'0',~'888'),

('telem1.ch',~u'Tele~M1{*}{*}',~'S06',~'',~'0'),

('webcam',~u'WebCam',~'0',~'',~'1'),

]
\end{lyxcode}

\subsubsection{tv frequencies}

\begin{lyxcode}
FREQUENCY\_TABLE~=~\{

'K32'~:~559250,

'S13'~:~246250,

'K34'~:~575250,

'K21'~:~471250,

'K05'~:~175500,

'K10'~:~211000,

'K35'~:~583250,

'S23'~:~319250,

'S17'~:~274500,

'S05'~:~133250,

'S15'~:~260350,

'S10'~:~168500,

'S27'~:~351250,

'S19'~:~288500,

'K09'~:~203750,

'S04'~:~126250,

'K29'~:~535250,

'K27'~:~519250,

'K30'~:~543250,

'K06'~:~182750,

'K22'~:~479250,

'S26'~:~343250,

'S31'~:~383250,

'K11'~:~218000,

'K24'~:~495250,

'K31'~:~551250,

'K28'~:~527250,

'S09'~:~161500,

'S14'~:~253250,

'S07'~:~147250,

'S33'~:~399250,

'S20'~:~295750,

'S24'~:~327250,

'S11'~:~232000,

'S12'~:~239250,

'S28'~:~359250,

'K07'~:~189750,

'K37'~:~599250,

'K25'~:~503250,

'S08'~:~154500,

'K08'~:~196750,

'S18'~:~281500,

'K12'~:~225000,

'S16'~:~267500,

'S06'~:~140250,

\}
\end{lyxcode}

\subsection{xmltv settings}

The xmltv grabber is failing as the process takes so long that the
connection breaks and breaks the grab.

\begin{lyxcode}
XMLTV\_FILE~=~'/var/freevo/TV.xml'

XMLTV\_GRABBER~=~'tv\_grab\_ch'

XMLTV\_SORT~=~'tv\_sort'

XMLTV\_DAYS~=~15
\end{lyxcode}

\subsection{remote control }

The remote control helper doesn't seem to work

\begin{lyxcode}
ENABLE\_NETWORK\_REMOTE~=~1

REMOTE\_CONTROL\_HOST~=~'127.0.0.1'

REMOTE\_CONTROL\_PORT~=~16310
\end{lyxcode}

\subsection{web browser settings}

\begin{lyxcode}
WWW\_PORT~=~80

WWW\_USERS~=~\{~'freevo'~:~'freevo'~\}
\end{lyxcode}

\subsection{debug settings}

\begin{lyxcode}
\#~Debugging~settings

WAKEUP\_DEBUG~=~0

CHILDAPP\_DEBUG~=~1

MPLAYER\_DEBUG~=~1

TIME\_DEBUG~=~0

DEBUG~=~0
\end{lyxcode}

\section{System Configuration}

/etc/fstab needs /dev/dvd

MPlayer fonts

copied elf 

Configuration of Freevo

modprobe snd\_mixer\_oss

copied files from elf:/etc/freevo/

copied elf:/freevo/TV.xml

mkdir /var/log/freevo

mkdir /mnt/dvd

the freevo record server has been set to run as freevo:freevo

/var/cache/freevo /var/log/freevo needed user and group by freevo:freevo

the group sticky bit also needed setting

the user freevo needed adding to the group video.


\section{Startup Scripts}

When the machine is booted serveral processes need to be started.

The addition of the bootsplash screen meant that the rc files needed
changing.


\section{Software Operating System}

The base operating system is Linux From Scratch 6.1.1. Using Linux
From Scratch as a Linux distribution is a difficult way to install
Linux but has a number of advantages over using a distribution such
as RedHat, Debian, SuSE or Gentoo. First, the packages are build from
the sources this means that they can be compiled specifically for
the hardware. Secondly, only that packages that are required are installed,
meaning that there is more disk space available for recorded programs
or other media data. Thirdly, the system is very stable and robust. 

Gentoo is a second choice for a source build and in many ways it is
better than Linux From Scratch, the main reason for not using Gentoo
is because some of the automatic upgrades break the system and it
can take quite a while to figure out what the problem is. Once the
system has been built and is stable there is no reason to upgrade
the packages. Linux From Scratch is therefore the chosen system.


\subsection{Building Linux From Scratch 6.1.1}

The computer is first booted with a Linux From Scratch LiveCD 6.1.1-4.
This is the most reliable way to build the tools section of the LFS
book. Once the tools section has been built then the system can be
booted with a Knoppix CD which allows connection from another PC to
the FFS computer.


\subsubsection{Partitioning}

The hard disk is partitioned into two primary partitions\\
/dev/sda1 swap\\
/dev/sda2 ext3

The computer was booted from a LFS LiveCD 6.1.1-4. The disk /dev/sda
was partitioned into two partitions the fist partition is a Linux
swap partition and the second partition is a Linux ext3 partition.
The system was then rebooted so that Knoppix discovered the partitions
and set up the /dev/sda2 partition so that it could be mounted.

The partition was mounted and the environment variable LFS was changed
to /media/sda2.

The LFS book was then followed verbatim.


\subsubsection{Chapter 6 Ncurses-5.5}

The standard Ncurses package is 5.4 this has been replaced by 5.5
as this version has wide character support.


\subsubsection{Chapter 6 Grub 0.97}

The standard Grub package is 0.97 but boot once support is required
for nvram\_wakeup so this package has been replaced with 0.95 plus
patches (from IPCOP).


\subsection{Building the LFS System}

Before entering this section it is now possible to reboot with the
Knoppix CD, this allows the sshd to run and so the rest of the set-up
can be achieved by pasting the commands from the book.


\subsubsection{GCC-3.4.3}

The checks performed in the testing phase had more errors than expected.
Using make bootstrap instead of make reduced the errors, which are
reported when trying to use precompiled headers. These errors may
not be important as few, if any, packages depend on precompiled headers.


\subsection{Configuring the LFS System}


\subsubsection{Kernel}

This is always the tricky part to get right.

As the system does not have a processor with either hyperthreading
or a dual core the kernel has been configured for No SMP. 


\subsubsection{Network}

There are three possible network devices in the hardware. A Marvell
ethernet controller, a Shuttle USB wireless LAN controller and a FireWire
port that can be configured as a network controller. For installation
of the system the ethernet controller is configured using DHCP client
to assign the IP address. For normal usage, the wireless LAN controller
is used.


\subsubsection{Boot Scripts}

When a boot script fails it halts the system, this is not a desired
behaviour so the scripts are modified to remove the line that prints
the failure message and pauses the system. print\_error\_msg in the
functions script is edited to remove the lines after boot\_mesg\_flush.


\subsubsection{NTP Date}

/etc/ntp.conf needs changing to point to a real time server


\section{Software Required Packages}

Beyond Linux From Scratch development is used for most of the packages.
Most of the chapter 3 is installed except for {}``Automate Mounting
of File Systems'' and {}``Configuring for Network Filesystems''.

Unless otherwise stated the pacakges are build with the following
CFLAGS and CXXFLAGS:\\
-O3 -march=pentium4 -mtune=pentium4 -pipe

dhcpcd-2.0.5 is required to receive an ip address from a dhcp server.

OpenSSH-4.1p1 is installed in order to be able to login to the system
remotely.\\
OpenSSL-0.9.8b is required by openssh.

wget-1.10.2 is required to be able to download packages.

gpm-1.20.1 is a tools for the mouse on the console.

\begin{minipage}[t]{1\textwidth}%

\begin{lyxcode}
\#~Begin~/etc/sysconfig/mouse~

MDEVICE=\char`\"{}/dev/mouse\char`\"{}~

PROTOCOL=\char`\"{}imps2\char`\"{}~

GPMOPTS=\char`\"{}-l\textbackslash{}\char`\"{}a-zA-Z0-9\_.:\textasciitilde{}\textbackslash{}300-\textbackslash{}326\textbackslash{}330-\textbackslash{}366\textbackslash{}370-\textbackslash{}377\textbackslash{}\char`\"{}\char`\"{}~

\#~End~/etc/sysconfig/mouse
\end{lyxcode}
\end{minipage}%

pciutils-2.1.11 is a useful tools to check what devices are on the
PCI bus\\
which-2.16 is reqired by pciutils.

zd1211-driver-r80 is a required driver for the Shuttle PN18 USB WLAN
controller.

wireless\_tools.28 is required to configure the wlan interface. The
interface came up correctly first time without these wireless tools.

ivtv-0.4.6 driver is required for kernel 2.6.15 and below. The firmware
need to be installed in /lib/firmware.\\
ivtv-0.7.0 driver is required for kernel 2.6.17.

xorg-6.9.0 is required for freevo to display on the TV.\\
ivtv\_xdriver\_0.10.6 is the xserver for the ivtv framebufffer.\\
libpng-1.2.8 is required by xorg-6.9.0\\
fontconfig-2.3.2 is required by xorg-6.9.0\\
freetype-2.1.10 is required for fontconfig-2.3.2

host.def

\begin{lyxcode}
/{*}~Begin~Xorg~host.def~file~{*}/



/{*}~System~Related~Information.~~If~you~read~and~configure~only~one~

~{*}~section~then~it~should~be~this~one.~~The~Intel~architecture~defaults

~{*}~are~set~for~a~i686~and~higher.~~Axp~is~for~the~Alpha~architecture

~{*}~and~Ppc~is~for~the~Power~PC.~~AMD64~is~for~the~Opteron~processor.

~{*}~Note~that~there~have~been~reports~that~the~Ppc~optimization~line

~{*}~causes~segmentation~faults~during~build.~~If~that~happens,~try

~{*}~building~without~the~DefaultGcc2PpcOpt~line.~~{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}/~



/{*}~\#define~DefaultGcc2i386Opt~~-O2~-fno-strength-reduce~\textbackslash{}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-fno-strict-aliasing~-march=i686~{*}/

/{*}~\#define~DefaultGcc2AxpOpt~~~-O2~-mcpu=ev6~{*}/

/{*}~\#define~DefaultGcc2PpcOpt~~~-O2~-mcpu=750~-march=athlon64~{*}/

/{*}~\#define~DefaultGcc2AMD64Opt~-O2~-fno-strength-reduce~-fno-strict-aliasing~{*}/



\#define~HasFreetype2~~~~~~~~~~~~YES

\#define~HasFontconfig~~~~~~~~~~~YES

\#define~HasExpat~~~~~~~~~~~~~~~~YES

\#define~HasLibpng~~~~~~~~~~~~~~~YES

\#define~HasZlib~~~~~~~~~~~~~~~~~YES

\#define~HaveLib64~~~~~~~~~~~~~~~NO

~

/{*}

~{*}~Which~drivers~to~build.~~When~building~a~static~server,~each~of

~{*}~these~will~be~included~in~it.~~When~building~the~loadable~server

~{*}~each~of~these~modules~will~be~built.

~{*}

\#define~XF86CardDrivers~~~~~~~~~mga~glint~nv~tga~s3virge~sis~rendition~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~neomagic~i740~tdfx~savage~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~cirrus~vmware~tseng~trident~chips~apm~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~GlideDriver~fbdev~i128~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ati~DevelDrivers~ark~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~cyrix~siliconmotion~vesa~vga~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~XF86OSCardDrivers~XF86ExtraCardDrivers

\#define~XF86CardDrivers~~~~~~~~~vesa

{*}/

\#define~XF86ExtraCardDrivers~~~~ivtv



/{*}

~{*}~Select~the~XInput~devices~you~want~by~uncommenting~this.

~{*}~\#define~XInputDrivers~~~~~~~~~~~mouse~keyboard~acecad~calcomp~citron~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~digitaledge~dmc~dynapro~elographics~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~microtouch~mutouch~penmount~spaceorb~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~summa~wacom~void~magictouch~aiptek

~{*}/



/{*}~Most~installs~will~only~need~this~{*}/

\#define~XInputDrivers~~~~~~~~~~~mouse~keyboard



/{*}~Disable~building~Xprint~server~and~clients~until~we~get~them~figured

~{*}~out~but~build~Xprint~libraries~to~allow~precompiled~binaries~such~as

~{*}~Acrobat~Reader~to~run.

~{*}/



\#define~XprtServer~~~~~~~~~~~~~~NO

\#define~BuildXprintClients~~~~~~NO



/{*}~Uncomment~the~following~define~if~you~would~prefer~to~install~X~into

~{*}~/usr~or~change~it~to~any~other~location~that~you~prefer.

~{*}~The~GL~related~defines~disable~compatibility~symlinks~(the~links~are~not~needed

~{*}~when~X~is~installed~in~/usr).

~{*}/

\#define~ProjectRoot~~~~~~~~~~~~~/usr

\#define~LinkGLToUsrInclude~~~~~~NO

\#define~LinkGLToUsrLib~~~~~~~~~~NO



/{*}~Uncomment~the~following~define~if~you~would~prefer~to~install~the

~{*}~fonts~into~/usr/share/fonts,~a~directory~that~is~fontconfigs~default

~{*}~font~search~path.

~{*}/

\#define~FontDir~/usr/share/fonts



/{*}~Upcomment~the~following~define~if~you~would~like~the~DirectFB~XServer

\#define~XDirectFBServer~YES

~{*}/



/{*}~End~Xorg~host.def~file~{*}//{*}~Begin~Xorg~host.def~file~{*}/

/{*}~System~Related~Information.~~If~you~read~and~configure~only~one

~{*}~section~then~it~should~be~this~one.~~The~Intel~architecture~defaults

~{*}~are~set~for~a~i686~and~higher.~~Axp~is~for~the~Alpha~architecture

~{*}~and~Ppc~is~for~the~Power~PC.~~AMD64~is~for~the~Opteron~processor.

~{*}~Note~that~there~have~been~reports~that~the~Ppc~optimization~line

~{*}~causes~segmentation~faults~during~build.~~If~that~happens,~try

~{*}~building~without~the~DefaultGcc2PpcOpt~line.~~{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}{*}/

\#define~DefaultGcc2i386Opt~~-O2~-fno-strength-reduce~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-fno-strict-aliasing~-march=pentium4~-fPIC

/{*}~\#define~DefaultGcc2AxpOpt~~~-O2~-mcpu=ev6~{*}/

/{*}~\#define~DefaultGcc2PpcOpt~~~-O2~-mcpu=750~-march=athlon64~{*}/

/{*}~\#define~DefaultGcc2AMD64Opt~-O2~-fno-strength-reduce~-fno-strict-aliasing~{*}/

\#define~HasFreetype2~~~~~~~~~~~~YES

\#define~HasFontconfig~~~~~~~~~~~YES

\#define~HasExpat~~~~~~~~~~~~~~~~YES

\#define~HasLibpng~~~~~~~~~~~~~~~YES

\#define~HasZlib~~~~~~~~~~~~~~~~~YES

\#define~HaveLib64~~~~~~~~~~~~~~~NO~

/{*}

~{*}~Which~drivers~to~build.~~When~building~a~static~server,~each~of

~{*}~these~will~be~included~in~it.~~When~building~the~loadable~server

~{*}~each~of~these~modules~will~be~built.

~{*}

\#define~XF86CardDrivers~~~~~~~~~mga~glint~nv~tga~s3virge~sis~rendition~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~neomagic~i740~tdfx~savage~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~cirrus~vmware~tseng~trident~chips~apm~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~GlideDriver~fbdev~i128~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ati~DevelDrivers~ark~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~cyrix~siliconmotion~vesa~vga~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~XF86OSCardDrivers~XF86ExtraCardDrivers

\#define~XF86CardDrivers~~~~~~~~~vesa

{*}/

\#define~XF86ExtraCardDrivers~~~~ivtv

/{*}

~{*}~Select~the~XInput~devices~you~want~by~uncommenting~this.

~{*}

\#define~XInputDrivers~~~~~~~~~~~mouse~keyboard~acecad~calcomp~citron~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~digitaledge~dmc~dynapro~elographics~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~microtouch~mutouch~penmount~spaceorb~\textbackslash{}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~summa~wacom~void~magictouch~aiptek

~{*}/

/{*}~Most~installs~will~only~need~this~{*}/

\#define~XInputDrivers~~~~~~~~~~~mouse~keyboard

/{*}~Disable~building~Xprint~server~and~clients~until~we~get~them~figured

~{*}~out~but~build~Xprint~libraries~to~allow~precompiled~binaries~such~as

~{*}~Acrobat~Reader~to~run.

~{*}/

\#define~XprtServer~~~~~~~~~~~~~~NO

\#define~BuildXprintClients~~~~~~NO

\#define~BuildXterm~~~~~~~~~~~~~~YES

/{*}~Uncomment~the~following~define~if~you~would~prefer~to~install~X~into

~{*}~/usr~or~change~it~to~any~other~location~that~you~prefer.

~{*}~The~GL~related~defines~disable~compatibility~symlinks~(the~links~are~not~needed

~{*}~when~X~is~installed~in~/usr).

~{*}/

\#define~ProjectRoot~~~~~~~~~~~~~/usr

\#define~LinkGLToUsrInclude~~~~~~NO

\#define~LinkGLToUsrLib~~~~~~~~~~NO

/{*}~Uncomment~the~following~define~if~you~would~prefer~to~install~the

~{*}~fonts~into~/usr/share/fonts,~a~directory~that~is~fontconfigs~default

~{*}~font~search~path.

~{*}/

\#define~FontDir~/usr/share/fonts

/{*}~Upcomment~the~following~define~if~you~would~like~the~DirectFB~XServer

\#define~XDirectFBServer~YES

~{*}/

/{*}~End~Xorg~host.def~file~{*}/
\end{lyxcode}
The following patch needs to be applied to the ivtv-xdriver to allow
it to compile

\begin{lyxcode}
-{}-{}-~ivtvhw.c.orig~~~~~~~2006-07-07~15:21:37.000000000~+0200

+++~ivtvhw.c~~~~2006-07-07~15:22:44.000000000~+0200

@@~-15,7~+15,8~@@

~\#include~\char`\"{}fbpriv.h\char`\"{}

-\#include~\char`\"{}asm/page.h\char`\"{}~~~~~~~~~~/{*}~\#define~for~PAGE\_{*}~{*}/

+\#include~\char`\"{}bits/types.h\char`\"{}~~~~~~~~/{*}~\#define~for~PAGE\_{*}~{*}/

+\#include~\char`\"{}sys/user.h\char`\"{}~~~~~~~~~~/{*}~\#define~for~PAGE\_{*}~{*}/

~\#include~\char`\"{}globals.h\char`\"{}

~\#define~DPMS\_SERVER

~\#include~\char`\"{}extensions/dpms.h\char`\"{}
\end{lyxcode}
python-2.4.3 is required for freevo

tk8.4.13 is required for tkinker in python-2.4.3 (also requires xorg-6.9.0)

tcl8.4.13 is required for tk8.4.13

usbutils-0.72 is required to see the usb devices on the usb bus.

libusb-0.1.12 is required for usbutils-0.72 and pysub-0.3.3

pkg-config-0.20 is required for libusb

nasm-0.98.39 is optional for sdl-

alsa-lib-1.0.11.tar.bz2

alsa-plugins-1.0.11

alsa-utils-1.0.11

alsa-oss-1.0.11

also-tools-1.0.11 and alsa-firmware-1.0.11 are not build as the intel
sound card does not use these tools

ntp-4.2.2p2 is required to keep the clock in sync

SDL-1.2.11 is reqired for pygame

libjpeg-6b is required for SDL\_image-1.2.5

tiff-3.8.2 is required for SDL\_image-1.2.5

popt-1.10.4 is optional for samba-3.0.23

samba-3.0.23 is required to allow Windows machines to connect and
maniplate files.

vixie-cron-4.1 is required to run overnight batch processes

lcms-1.15 is required by libmng-1.0.9

libmng-1.0.9 is required by bootsplash-3.0.7

cdparanoia-III-9.8 is required by audio.cdbackup plugin cdda paranoia \url{http://www.xiph.org/paranoia/index.html}

vorbis-tools-1.1.1 is required by audio.cdbackup plugin

libvorbis-1.1.2 is required by vorbis-tools-1.1.1

libogg-1.1.3 is required by libvorbis-1.1.2

curl-7.15.3 is required by vorbis-tools-1.1.1

libao-0.8.6 is required by vorbis-tools-1.1.1

flac-1.1.2 is required by vorbis-tools-1.1.1

speex-1.0.5 is required by vorbis-tools-1.1.1

lame-3.96.1 is required by audio.cdbackup plugin

id3lib-3.8.3 not required

xmms-1.2.10 is required by audio.fxmms plugin

gtk+-1.2.10 is required by xmms-1.2.10

glib-1.2.10 is required by gtk+-1.2.10

libmikmod-3.1.11 is required by xmms-1.2.10

cairo-1.0.4 is required by pango-1.12.3, gtk+-2.8.19

glib-2.10.3 is required by pango-1.12.3, 

pango-1.12.3 is required by gtk+-2.8.19

atk-1.11.4 is required by gtk+-2.8.19

gtk+-2.8.19 is required by gimp-2.2.12

XML-Parser-2.34 is required by gimp-2.2.12

gimp-print-4.2.7 is required by gimp-2.2.12

imagemagick-6.2.8-0 is useful for gimp-2.2.12

libmad-0.15.1b is recommended for cdrdao-1.2.1

screen-4.0.2 is useful when the network link goes down 

cdrtools-2.01

cdrdao-1.2.1

udftools-1.0.0b3

dvd+rw-tools-6.1

unzip-5.52 is useful when to extract zip files


\section{Freevo Packages}

Stuff that in not included in Beyond Linux From Scratch or Linux From
Scratch

lirc-0.8.0 is required for the Hauppauge PVR-350 remote.

pygame-1.7.1 is required by freevo-1.5.4

SDL\_ttf-2.0.8 is required by pygame-1.7.1

SDL\_image-1.2.5 is required by pygame-1.7.1

SDL\_mixer-1.2.7 is required by pygame-1.7.1

smpeg-0.4.4 is required by SDL\_mixer-1.2.7 pygame-1.7.1

Numeric-24.2 is required by pygame-1.7.1

aumix-2.8 is required by freevo-1.5.4

libexif-0.6.13 is required by freevo-1.5.4

libdvdcss-1.2.9 is required by freevo-1.5.4 and libdvdread-0.9.6

libdvdread-0.9.6 is required by freevo-1.5.4 and lsdvd-0.16

lsdvd-0.16 is required by freevo-1.5.4\\
lsdvd-0.16 requires a patch to compile against libdvdread-0.9.6

This program was a problem to build with gcc 3.4.3 because the program
will not link with gcc, using g++ resolved this problem.

setvfd is required to drive the Shuttle Versatile Front-Panel Display
(VFD)

pyusb-0.3.3 is required for setvfd

vbiutil-0.1.4

vbishow-0.1.11

vbi2srt-0.1.9 is required to record programs with subtitles for freevo-1.5.4

v4ltest-0.1.2

Twisted-2.4.0 is required for the Web interface.

The following packages are provided by Twisted-2.4.0:\\
TwistedWeb-0.6.0\\
TwistedCore-2.4.0\\
ZopeInterface-3.1.0c1

mmpython-0.4.9 is required by freevo-1.5.4 mmpython-0.4.9 \url{http://sourceforge.net/project/showfiles.php?group_id=75590}

Imaging-1.1.5 is required by mmpython-0.4.9 Imaging-1.1.5 \url{http://www.pythonware.com/products/pil/}

PyXML-0.8.4 is required by mmpython-0.4.9

pylirc-0.0.5 is required to interface with remote control

sqllite-2.8.16 http://www.sqlite.org/ \url{http://www.sqlite.org/}

pysqlite-1.0.1 http://initd.org/tracker/pysqlite \url{http://initd.org/tracker/pysqlite}
is required by freevo cache

mplayer is required by freevo-1.5.4 to play the media http://www.mplayerhq.hu \url{http://www.mplayerhq.hu}

acpid-1.0.4

lm\_sensors-2.10.0 is required to monitor temperatures

sysfsutils-2.0.0 is required by lm\_sensors-2.10.0

rrdtool-1.2.13 is required by lm\_sensors-2.10.0

libart\_lgpl-2.3.17 is required by rrdtool-1.2.13

newt-0.51.6 is required by alsaconf (not really needed)

slang-2.0.6 is required by newt-0.51.6

ssmtp-2.61 is required to send mail messages for failures and vixie-cron-4.1

bootsplash-3.0.7 allows a pretty boot screen

bootsplash-3.1.6-2.6.15.diff is required to use a boot slpash screen
(kernel patch)

eject-2.1.0 is required to eject a CD or DVD

fbset-2.1 Geert's fbset \url{http://users.telenet.be/geertu/Linux/fbdev/}
is required to set the framebuffer mode

gdk-pixbuf-0.22.0 is required for xosd-2.2.12

xosd-2.2.12 is required for pyosd-0.2.14

pyosd-0.2.14 is required for plugin tiny\_xosd

aumix-2.8 aumix-2.8 \url{http://jpj.net/~trevor/aumix/aumix-2.8.tar.bz2}
is required for plugin mixer

freevo-weather-mediaportal-iconset-0.1 

Freevo-Weather-0.8 

freevo-mediaportal-theme-0.1 

freevo-dilbert-plugin-0.1 

freevo-audio-albumtree-0.5.1 

freevo-hddtemp-plugin-0.6


\section{Freevo Patches}


\section{ToDo}

User configuration needs to be simplified

\appendix

\section*{Appendix A Hardware}

Contains a detailed list of hardware components and their descriptions.


\section*{Appendix B Operating System Build Details}

Contains a detailed list of build instructions that differ from the
standard LinuxFromScratch or Beyond LinuxFromScratch build.


\section*{Appendix C Software Packages Build Details}

Contains a detailed list of build instructions for packages that are
not included in LinuxFromScratch or Beyond LinuxFromScratch.
\end{document}
