Gentoo HD-vdr experimentel
(→Multiproto DVB Treiber im amd64-chroot per Hand installieren) |
(→im chroot vdr im Vordergrund starten) |
||
| Zeile 177: | Zeile 177: | ||
chmod a+rwx /dev/dvb/adapter1/frontend0 | chmod a+rwx /dev/dvb/adapter1/frontend0 | ||
chmod a+rwx /dev/dvb/adapter1/net0 | chmod a+rwx /dev/dvb/adapter1/net0 | ||
| + | |||
| + | ==im chroot vdr via local ebuild bauen== | ||
| + | - Abhängigkeiten von vdr bauen | ||
| + | ebuild -pvt --onlydeps vdr | ||
| + | ebuild --onlydeps vdr | ||
| + | |||
| + | - locales Overlay anlegen | ||
| + | TODO Write | ||
| + | - ebuild für vdr-1.5.14 ( dev version ) in ( z.B. ) (chroot Verzeichnis)/usr/local/overlay/media-video/vdr/vdr-1.5.14.ebuild | ||
| + | # Copyright 1999-2008 Gentoo Foundation | ||
| + | # Distributed under the terms of the GNU General Public License v2 | ||
| + | # $Header: /var/cvsroot/gentoo-x86/media-video/vdr/vdr-1.5.14.ebuild,2008/04/21 18:05:23 zzam Exp $ | ||
| + | |||
| + | inherit eutils flag-o-matic multilib | ||
| + | |||
| + | IUSE_EXTENSIONS="cmdsubmenu cutterlimit cutterqueue cuttime ddepgentry | ||
| + | dolbyinrec dvbplayer dvbsetup dvdarchive dvdchapjump graphtft hardlinkcutter iptv | ||
| + | jumpplay liemikuutio lnbshare mainmenuhooks menuorg noepg osdmaxitems pinplugin | ||
| + | rotor settime setup sortrecords sourcecaps submenu livebuffer | ||
| + | ttxtsubs timercmd timerinfo validinput yaepg | ||
| + | syncearly dvlfriendlyfnames dvlrecscriptaddon dvlvidprefer | ||
| + | volctrl wareagleicon lircsettings premiereepgfix" | ||
| + | |||
| + | IUSE="debug vanilla ${IUSE_EXTENSIONS}" | ||
| + | |||
| + | EXT_V="45" | ||
| + | EXT_P=VDR-Extensions-Patch-${EXT_V} | ||
| + | EXT_DIR=${WORKDIR}/${EXT_P}/ | ||
| + | # Set if != $PV | ||
| + | EXT_VDR_PV=1.5.14 | ||
| + | |||
| + | DESCRIPTION="Video Disk Recorder - turns a pc into a powerful set top box for DVB" | ||
| + | HOMEPAGE="http://www.cadsoft.de/vdr/" | ||
| + | SRC_URI="ftp://ftp.cadsoft.de/vdr/Developer/${P}.tar.bz2" | ||
| + | # http://www.zulu-entertainment.de/files/patches/${EXT_P}.tar.bz2" | ||
| + | |||
| + | KEYWORDS="amd64 ~ppc ~x86" | ||
| + | SLOT="0" | ||
| + | LICENSE="GPL-2" | ||
| + | |||
| + | |||
| + | DEPEND="media-libs/jpeg | ||
| + | sys-apps/gawk | ||
| + | sys-libs/libcap | ||
| + | >=media-libs/fontconfig-2.4.2 | ||
| + | >=media-libs/freetype-2 | ||
| + | dev-util/unifdef | ||
| + | sys-devel/gettext" | ||
| + | |||
| + | # rausgenommen um Platz für den ( per hand zu installierenden ) multiproto teiber zu schaffen | ||
| + | # media-tv/linuxtv-dvb-headers | ||
| + | |||
| + | |||
| + | RDEPEND="${DEPEND} | ||
| + | dev-lang/perl" | ||
| + | # >=media-tv/gentoo-vdr-scripts-0.4.2" | ||
| + | |||
| + | # pull in vdr-setup to get the xml files, else menu will not work | ||
| + | PDEPEND="setup? ( >=media-plugins/vdr-setup-0.3.1-r1 )" | ||
| + | |||
| + | CONF_DIR=/etc/vdr | ||
| + | CAP_FILE=${S}/capabilities.sh | ||
| + | CAPS="# Capabilities of the vdr-executable for use by startscript etc." | ||
| + | |||
| + | pkg_setup() { | ||
| + | use debug && append-flags -g | ||
| + | PLUGIN_LIBDIR="/usr/$(get_libdir)/vdr/plugins" | ||
| + | } | ||
| + | |||
| + | add_cap() { | ||
| + | local arg | ||
| + | for arg; do | ||
| + | CAPS="${CAPS}\n${arg}=1" | ||
| + | done | ||
| + | } | ||
| + | |||
| + | enable_patch() { | ||
| + | local arg ARG_UPPER | ||
| + | for arg; do | ||
| + | ARG_UPPER=$(echo $arg|tr '[:lower:]' '[:upper:]') | ||
| + | echo "${ARG_UPPER} = 1" >> Make.config | ||
| + | done | ||
| + | } | ||
| + | |||
| + | extensions_add_make_conf() | ||
| + | { | ||
| + | # copy all ifdef for extensions-patch to Make.config | ||
| + | sed -e '1,/need to touch the following:/d' \ | ||
| + | -e '/ifdef DVBDIR/,/^$/d' \ | ||
| + | Make.config.template >> Make.config | ||
| + | } | ||
| + | |||
| + | extensions_all_defines() { | ||
| + | # extract all possible settings for extensions-patch | ||
| + | sed -e '/^#\?[A-Z].*= 1/!d' -e 's/^#\?//' -e 's/ .*//' \ | ||
| + | Make.config.template \ | ||
| + | | sort \ | ||
| + | | tr '[:upper:]' '[:lower:]' | ||
| + | } | ||
| + | |||
| + | extensions_all_defines_unset() { | ||
| + | # extract all possible settings for extensions-patch | ||
| + | # and convert them to -U... for unifdef | ||
| + | sed -e '/^#\?[A-Z].*= 1/!d' -e 's/^#\?/-UUSE_/' -e 's/ .*//' \ | ||
| + | Make.config.template \ | ||
| + | | tr '\n' ' ' | ||
| + | } | ||
| + | |||
| + | do_unifdef() { | ||
| + | ebegin "Unifdef sources" | ||
| + | local mf="Makefile.get" | ||
| + | cat <<'EOT' > $mf | ||
| + | include Makefile | ||
| + | show_def: | ||
| + | @echo $(DEFINES) | ||
| + | show_src_files: | ||
| + | @echo $(OBJS:%.o=%.c) | ||
| + | EOT | ||
| + | |||
| + | local DEFINES=$(extensions_all_defines_unset) | ||
| + | |||
| + | local RAW_DEFINES=$(make -f "$mf" show_def) | ||
| + | local VDR_SRC_FILES=$(make -f "$mf" show_src_files) | ||
| + | local KEEP_FILES="" | ||
| + | rm "$mf" | ||
| + | |||
| + | local def | ||
| + | for def in $RAW_DEFINES; do | ||
| + | case "${def}" in | ||
| + | -DUSE*) | ||
| + | DEFINES="${DEFINES} ${def}" | ||
| + | ;; | ||
| + | esac | ||
| + | done | ||
| + | |||
| + | local f | ||
| + | for f in *.c; do | ||
| + | |||
| + | # Removing the src files the Makefile does not use for compiling vdr | ||
| + | if ! has $f ${VDR_SRC_FILES} ${KEEP_FILES}; then | ||
| + | rm -f ${f} ${f%.c}.h | ||
| + | continue | ||
| + | fi | ||
| + | |||
| + | unifdef ${DEFINES} "$f" > "tmp.$f" | ||
| + | mv "tmp.$f" "$f" | ||
| + | done | ||
| + | for f in *.h; do | ||
| + | unifdef ${DEFINES} "$f" > "tmp.$f" | ||
| + | mv "tmp.$f" "$f" | ||
| + | [[ -s $f ]] || rm "$f" | ||
| + | done | ||
| + | eend 0 | ||
| + | } | ||
| + | |||
| + | src_unpack() { | ||
| + | |||
| + | unpack ${A} | ||
| + | cd "${S}" | ||
| + | |||
| + | ebegin "Changing pathes for gentoo" | ||
| + | |||
| + | sed \ | ||
| + | -e 's-ConfigDirectory = VideoDirectory;-ConfigDirectory = CONFDIR;-' \ | ||
| + | -i vdr.c | ||
| + | |||
| + | cat > Make.config <<-EOT | ||
| + | # | ||
| + | # Generated by ebuild ${PF} | ||
| + | # | ||
| + | PREFIX = /usr | ||
| + | DVBDIR = /usr/local/src/dvb/linux | ||
| + | PLUGINLIBDIR = ${PLUGIN_LIBDIR} | ||
| + | CONFDIR = ${CONF_DIR} | ||
| + | VIDEODIR = /video | ||
| + | LOCDIR = \$(PREFIX)/share/vdr/locale | ||
| + | |||
| + | DEFINES += -DCONFDIR=\"\$(CONFDIR)\" | ||
| + | |||
| + | EOT | ||
| + | eend 0 | ||
| + | |||
| + | epatch "${FILESDIR}"/vdr-1.5.14-makefile-install-header.diff | ||
| + | # epatch "${FILESDIR}"/vdr-1.5.14-h264-syncearly-framespersec-audioindexer-fielddetection-speedup.diff | ||
| + | epatch "${FILESDIR}"/vdr-1.5.14-multiproto-nodelivery.diff | ||
| + | epatch "${FILESDIR}"/vdr-1.5.14-E45-h264.diff | ||
| + | # epatch "${FILESDIR}"/vdr-1.5.14-channels.conf_plus_HD_Astra.diff | ||
| + | # epatch "${FILESDIR}"/vdr-1.5.14_recording_length-0.3.diff | ||
| + | epatch "${FILESDIR}"/vdr-premiereepgfix-1.5.14.diff | ||
| + | # epatch "${FILESDIR}"/vdr-1.5.14-alex2.diff | ||
| + | |||
| + | # epatch "${FILESDIR}"/vdr-1.5.14_extensions-gentoo.diff | ||
| + | |||
| + | sed -i i18n-to-gettext.pl \ | ||
| + | -e '/MSGIDBUGS/s/""/"automatically created from i18n.c by vdr-plugin.eclass <vdr\\@gentoo.org>"/' | ||
| + | |||
| + | # Do not install runvdr script and plugins | ||
| + | sed -i Makefile \ | ||
| + | -e 's/runvdr//' \ | ||
| + | -e 's/ install-plugins//' \ | ||
| + | -e 's/INCLUDES = -I\/usr\/include\/freetype2/INCLUDES = -I\/usr\/include\/freetype2 -I${DVBDIR}\/include/' | ||
| + | |||
| + | if ! use vanilla; then | ||
| + | |||
| + | cd "${S}" | ||
| + | # Now apply extensions patch # deaktiviert weil kein 1.5.14er verfügbar | ||
| + | # local fname="${PN}-${EXT_VDR_PV:-${PV}}_extensions.diff" | ||
| + | # epatch "${EXT_DIR}/${fname}" | ||
| + | |||
| + | |||
| + | # other gentoo patches | ||
| + | epatch "${FILESDIR}/vdr-set-dumpable.diff" | ||
| + | |||
| + | # This allows us to start even if some plugin does not exist | ||
| + | # or is not loadable. | ||
| + | enable_patch PLUGINMISSING | ||
| + | |||
| + | # Patch necessary for media-plugins/vdr-reelchannelscan | ||
| + | # it does not change anything when plugin is not used | ||
| + | enable_patch CHANNELSCAN | ||
| + | |||
| + | if [[ -n ${VDR_MAINTAINER_MODE} ]]; then | ||
| + | einfo "Doing maintainer checks:" | ||
| + | |||
| + | # these patches we do not support | ||
| + | # (or have them already hard enabled) | ||
| + | local IGNORE_PATCHES="channelscan pluginapi pluginmissing" | ||
| + | |||
| + | extensions_all_defines > "${T}"/new.IUSE | ||
| + | echo $IUSE_EXTENSIONS $IGNORE_PATCHES|tr ' ' '\n' |sort > "${T}"/old.IUSE | ||
| + | local DIFFS=$(diff -u "${T}"/old.IUSE "${T}"/new.IUSE|grep '^[+-][^+-]') | ||
| + | if [[ -z ${DIFFS} ]]; then | ||
| + | einfo "IUSE_EXTENSIONS is up to date." | ||
| + | else | ||
| + | ewarn "IUSE differences!" | ||
| + | local diff | ||
| + | for diff in $DIFFS; do | ||
| + | ewarn "$diff" | ||
| + | done | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | ebegin "Enabling selected patches" | ||
| + | local flag | ||
| + | for flag in $IUSE_EXTENSIONS; do | ||
| + | use $flag && enable_patch ${flag} | ||
| + | done | ||
| + | eend 0 | ||
| + | |||
| + | extensions_add_make_conf | ||
| + | |||
| + | ebegin "Make depend" | ||
| + | emake .dependencies >/dev/null | ||
| + | eend $? "make depend failed" | ||
| + | |||
| + | do_unifdef | ||
| + | |||
| + | use iptv && sed -i sources.conf -e 's/^#P/P/' | ||
| + | fi | ||
| + | |||
| + | # apply local patches defined by variable VDR_LOCAL_PATCHES_DIR | ||
| + | if test -n "${VDR_LOCAL_PATCHES_DIR}"; then | ||
| + | local dir_tmp_var | ||
| + | local LOCALPATCHES_SUBDIR=${PV} | ||
| + | for dir_tmp_var in allversions-fallback ${PV%_p*} ${PV} ; do | ||
| + | if [[ -d ${VDR_LOCAL_PATCHES_DIR}/${dir_tmp_var} ]]; then | ||
| + | LOCALPATCHES_SUBDIR="${dir_tmp_var}" | ||
| + | fi | ||
| + | done | ||
| + | |||
| + | echo | ||
| + | if [[ ${LOCALPATCHES_SUBDIR} == ${PV} ]]; then | ||
| + | einfo "Applying local patches" | ||
| + | else | ||
| + | einfo "Applying local patches (Using subdirectory: ${LOCALPATCHES_SUBDIR})" | ||
| + | fi | ||
| + | |||
| + | for LOCALPATCH in ${VDR_LOCAL_PATCHES_DIR}/${LOCALPATCHES_SUBDIR}/*.{diff,patch}; do | ||
| + | test -f "${LOCALPATCH}" && epatch "${LOCALPATCH}" | ||
| + | done | ||
| + | fi | ||
| + | |||
| + | if [[ -n "${VDRSOURCE_DIR}" ]]; then | ||
| + | cp -r "${S}" "${T}"/source-tree | ||
| + | fi | ||
| + | |||
| + | |||
| + | add_cap CAP_UTF8 | ||
| + | |||
| + | add_cap CAP_IRCTRL_RUNTIME_PARAM \ | ||
| + | CAP_VFAT_RUNTIME_PARAM \ | ||
| + | CAP_CHUID \ | ||
| + | CAP_SHUTDOWN_AUTO_RETRY | ||
| + | |||
| + | echo -e ${CAPS} > "${CAP_FILE}" | ||
| + | } | ||
| + | |||
| + | src_install() { | ||
| + | # trick makefile not to create a videodir by supplying it with an existing | ||
| + | # directory | ||
| + | emake install DESTDIR="${D}" | ||
| + | |||
| + | keepdir "${CONF_DIR}"/plugins | ||
| + | keepdir "${CONF_DIR}"/themes | ||
| + | |||
| + | keepdir "${PLUGIN_LIBDIR}" | ||
| + | |||
| + | exeinto /usr/share/vdr/bin | ||
| + | doexe i18n-to-gettext.pl | ||
| + | |||
| + | dohtml *.html | ||
| + | dodoc MANUAL INSTALL README* HISTORY* CONTRIBUTORS | ||
| + | |||
| + | cd "${EXT_DIR}" | ||
| + | local f | ||
| + | rm *vdr-1.4* 2>/dev/null | ||
| + | for f in BUGS README* HISTORY* patch.list; do | ||
| + | [[ -f ${f} ]] || break | ||
| + | newdoc "${f}" "${f}".ExtensionsPatch || die "Could not install extensions-patch doc ${f}" | ||
| + | done | ||
| + | |||
| + | cd "${S}" | ||
| + | |||
| + | insinto /usr/share/vdr | ||
| + | doins "${CAP_FILE}" | ||
| + | |||
| + | if [[ -n "${VDRSOURCE_DIR}" ]]; then | ||
| + | einfo "Installing sources" | ||
| + | insinto "${VDRSOURCE_DIR}/${P}" | ||
| + | doins -r "${T}"/source-tree/* | ||
| + | keepdir "${VDRSOURCE_DIR}/${P}"/PLUGINS/lib | ||
| + | fi | ||
| + | |||
| + | if use setup; then | ||
| + | insinto /usr/share/vdr/setup | ||
| + | doins "${S}"/menu.c | ||
| + | fi | ||
| + | # chown -R vdr:vdr "${D}/${CONF_DIR}" | ||
| + | } | ||
| + | |||
| + | pkg_postinst() { | ||
| + | elog "It is a good idea to run vdrplugin-rebuild now." | ||
| + | if has_version "<media-video/vdr-1.3.36-r3"; then | ||
| + | ewarn "Upgrade Info:" | ||
| + | ewarn | ||
| + | ewarn "If you had used the use-flags lirc, rcu or vfat" | ||
| + | ewarn "then, you now have to enable the associated functionality" | ||
| + | ewarn "in /etc/conf.d/vdr" | ||
| + | ewarn | ||
| + | ewarn "vfat is now set with VFAT_FILENAMES." | ||
| + | ewarn "lirc/rcu are now set with IR_CTRL." | ||
| + | ebeep | ||
| + | fi | ||
| + | |||
| + | if use setup; then | ||
| + | if ! has_version media-plugins/vdr-setup || \ | ||
| + | ! egrep -q '^setup$' "${ROOT}/etc/conf.d/vdr.plugins"; then | ||
| + | |||
| + | echo | ||
| + | ewarn "You have compiled media-video/vdr with USE=\"setup\"" | ||
| + | ewarn "It is very important to emerge media-plugins/vdr-setup now!" | ||
| + | ewarn "and you have to loaded it in /etc/conf.d/vdr.plugins" | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | local keysfound=0 | ||
| + | local key | ||
| + | local warn_keys="JumpFwd JumpRew JumpFwdSlow JumpRewSlow" | ||
| + | local remote_file="${ROOT}"/etc/vdr/remote.conf | ||
| + | |||
| + | if [[ -e ${remote_file} ]]; then | ||
| + | for key in ${warn_keys}; do | ||
| + | if grep -q -i "\.${key} " "${remote_file}"; then | ||
| + | keysfound=1 | ||
| + | break | ||
| + | fi | ||
| + | done | ||
| + | if [[ ${keysfound} == 1 ]]; then | ||
| + | ewarn "Your /etc/vdr/remote.conf contains keys which are no longer usable" | ||
| + | ewarn "Please remove these keys or vdr will not start:" | ||
| + | ewarn "# ${warn_keys}" | ||
| + | fi | ||
| + | fi | ||
| + | } | ||
==im chroot vdr im Vordergrund starten== | ==im chroot vdr im Vordergrund starten== | ||
Version vom 21. April 2008, 14:59 Uhr
Beschreibung
Autor: Alexander Richter - 17.04.2008
Ich stelle hier eine Variante der Installation vor, die in einem Working System 64 Bit ( gentoo )ein chroot erstellt, in dem die aktuellen Entwicklervarianten von ffmpeg xine-lib, xine-ui und vdr laufen können, ohne die Main Installation zu gefährden.
Der zusätzliche Platzaufwand beläuft sich auf rund 2 Gbyte. Backups des ganzen chroots sind ebenfalls möglich, was bei einer misslungenen Installation komfortabel ist.
WRITE TODO
- Einrichten einer amd64-chroot Umgebung - Kernel im chroot bauen - Multiproto Teiber ohne ebuild bauen - locales overlay im chroot anlegen - im localen Overlay vdr bauen - im localen Overlay ffmpeg bauen - im localen Overlay xine-lib bauen - im localen Overlay xine-ui bauen - im localen Overlay plugins bauen - im localen Overlay patches einbinden
Entwicklungsumgebung Hardware
- Amd Phenom 9500 auf Asrock AliveNF7G-Hdready - 1x TT S3200 - 4 Gig Ram - 24" Zoll Acer via 7050 Chipsatz des Boards
Entwicklungsumgebung Software
- Gentoo 2007.1, kernel 2.6.24-gentoo-r4, x86_64
make.conf :
CHOST="x86_64-pc-linux-gnu" CFLAGS="-march=k8 -O3 -pipe" ACCEPT_KEYWORDS="amd64" MAKEOPTS="-j5 LINGUAS="de" USE="X gtk alsa 3dnow a52 aac acl acpi aim ao apm arts \ audiofile bash-completion bcmath berkdb bindist bzip2 caps cdb cddb \ cdinstall cdparanoia cdr cgi crypt curl dbase dbm dbus dga dirctfb \ dri dts dv dvb dvd dvdr dvdread encode esd evo exif fam fastcgi fbcon \ ffmpeg firefox flac ftp gd gdbm gif gimp gphoto2 gstreamer hal \ icq ieee1394 imagemagick imap imlib innodb ipv6 jabber jack java \ javascript jbig jingle jpeg jpeg2k kde kdexdeltas ladspa lame lesstif \ libnotify libsamplerate libwww lirc lm_sensors lzo mad matroska mime \ mmap mmx mng mjpeg motif mozilla mp3 mpeg mplayer msql multilib musepack \ mysql ncurses networkmanager nls nntp nptl nsplugin nvidia ogg openal \ opengl osc oss pcre pdf perl png posix postgres python qt3 qt4 quicktime \ raw readline rss scanner sdl smartcard sndfile slang sockets socks5 \ sox sqlite sqlite3 sse sse2 sse3 ssl subversion suid svg svga symlink \ tcl tcpd theora threads tiff tk truetype unicode usb v4l v4l2 vcd \ vorbis wavpack win32codecs wmf wxwindows x264 xcomposite xine xinetd xml \ xpm xv xvid zlib"
Einrichten einer amd64-chroot Umgebung
amd64-chroot Umgebung Vorbereitung und Betreten
- Verzeichnis anlegen, hineinwechseln : mkdir /vdr cd /vdr
- Stage entpacken : tar xfjpv stage3-amd64-2008.0_beta1.tar.bz2
- Portage tree entpacken tar xvjf portage-latest.tar.bz2 -C /vdr/usr
- mounten der benötigten Verzeichnisse ins chroot (Pfade des Chroot anpassen !)
#!/bin/bash echo "mounting vs" mount -o bind /dev /vdr/dev mount -o bind /dev/pts /vdr/dev/pts mount -o bind /dev/shm /vdr/dev/shm mount -o bind /proc /vdr/proc mount -o bind /proc/bus/usb /vdr/proc/bus/usb mount -o bind /sys /vdr/sys mount -o bind /tmp /vdr/tmp mount -o bind /usr/portage/distfiles /vdr/usr/portage/distfiles # optional weitere #mount -o bind /video /vdr/video #mount -o bind /home/alex/mpeg2avi/ /vdr/home/alex/mpeg2avi/ #mount -o bind /home/alex/.vdrtransxvid/ /vdr/home/alex/.vdrtransxvid/ #mount -o bind /dev/sdb1/ /vdr/archiv/
- Xserver Zugang für Programme aus dem chroot ( hier xine )
$ xhost local:localhost
- chroot
$ chroot /vdr
- im chroot System - Vorbereitung
env-update source /etc/profile export PS1="(chroot) $PS1"
- emerge --sync - emerge --update world --deep - emerge gentoo-sources ( selben Kernel wie außerhalb des chroot auswählen, wir wollen uns unsere eigen DVB Treiber bauen, die müssen also zum "Außen" Kernel passen )
Multiproto DVB Treiber im amd64-chroot per Hand installieren
( im chroot )
mkdir -p /data/installfiles/dvb cd /data/installfiles/dvb
wenn noch nicht vorhanden
emerge mercurial
hg clone http://jusst.de/hg/multiproto_plus mv multiproto_plus/ dvb-multiproto_plus-cvs-17-04-2008
mkdir -p /usr/local/src/dvb cd /usr/local/src/dvb cp -a /data/installfiles/dvb/dvb-multiproto_plus-cvs-17-04-2008/* . make distclean
Link auf compiler.h setzen
cd /usr/local/src/dvb/linux/include/linux ln -s /usr/src/linux/include/linux/compiler.h compiler.h
Kernelkonfiguration erstellen und abspeichern
cd /usr/src/linux make menuconfig Device Drivers ---> Multimedia devices ---> <M> DVB For Linux "Exit" "Exit" "Exit" Do you wish to save your new kernel configuration? "Yes"
DVB Treiber installieren
cd /usr/local/src/dvb/ make && make install
Prüfen der DVB Treiber Installation
cd /lib/modules/$(uname -r)/kernel/drivers/media/dvb/ttpci ls -l -rw-r--r-- 1 root root 58888 Jan 29 19:36 budget-av.ko -rw-r--r-- 1 root root 54424 Jan 29 19:36 budget-ci.ko -rw-r--r-- 1 root root 35344 Jan 29 19:36 budget-core.ko -rw-r--r-- 1 root root 33008 Jan 29 19:36 budget-patch.ko -rw-r--r-- 1 root root 39112 Jan 29 19:36 budget.ko -rw-r--r-- 1 root root 179112 Jan 29 19:36 dvb-ttpci.ko -rw-r--r-- 1 root root 21416 Jan 29 19:36 ttpci-eeprom.ko
Bei Problemen auch : SUSE - Artikel , der Grundlage für diesen Part ist : http://www.vdr-wiki.de/wiki/index.php/OpenSUSE_VDR_DVB-S2_-_Teil2:_DVB_Treiber
- im chroot System - dvb Treiber laden und Zugriffsrechte ändern, um als unpriveligierter User zugreifen zu können (hier mit TT S3200 und TT budget ci)
#!/bin/bash echo "lade dvb-s2 kernel module" modprobe stb6100 modprobe stb0899 modprobe stv0299 modprobe lnbp21 modprobe budget-ci echo "ändere Zugriffsrechte des dvb Adapters 0" chmod a+rwx /dev/dvb/adapter0/demux0 chmod a+rwx /dev/dvb/adapter0/dvr0 chmod a+rwx /dev/dvb/adapter0/frontend0 chmod a+rwx /dev/dvb/adapter0/net0 echo "ändere Zugriffsrechte des dvb Adapters 1" chmod a+rwx /dev/dvb/adapter1/ca0 chmod a+rwx /dev/dvb/adapter1/demux0 chmod a+rwx /dev/dvb/adapter1/dvr0 chmod a+rwx /dev/dvb/adapter1/frontend0 chmod a+rwx /dev/dvb/adapter1/net0
im chroot vdr via local ebuild bauen
- Abhängigkeiten von vdr bauen
ebuild -pvt --onlydeps vdr ebuild --onlydeps vdr
- locales Overlay anlegen
TODO Write
- ebuild für vdr-1.5.14 ( dev version ) in ( z.B. ) (chroot Verzeichnis)/usr/local/overlay/media-video/vdr/vdr-1.5.14.ebuild
# Copyright 1999-2008 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/media-video/vdr/vdr-1.5.14.ebuild,2008/04/21 18:05:23 zzam Exp $
inherit eutils flag-o-matic multilib
IUSE_EXTENSIONS="cmdsubmenu cutterlimit cutterqueue cuttime ddepgentry
dolbyinrec dvbplayer dvbsetup dvdarchive dvdchapjump graphtft hardlinkcutter iptv
jumpplay liemikuutio lnbshare mainmenuhooks menuorg noepg osdmaxitems pinplugin
rotor settime setup sortrecords sourcecaps submenu livebuffer
ttxtsubs timercmd timerinfo validinput yaepg
syncearly dvlfriendlyfnames dvlrecscriptaddon dvlvidprefer
volctrl wareagleicon lircsettings premiereepgfix"
IUSE="debug vanilla ${IUSE_EXTENSIONS}"
EXT_V="45"
EXT_P=VDR-Extensions-Patch-${EXT_V}
EXT_DIR=${WORKDIR}/${EXT_P}/
# Set if != $PV
EXT_VDR_PV=1.5.14
DESCRIPTION="Video Disk Recorder - turns a pc into a powerful set top box for DVB"
HOMEPAGE="http://www.cadsoft.de/vdr/"
SRC_URI="ftp://ftp.cadsoft.de/vdr/Developer/${P}.tar.bz2"
# http://www.zulu-entertainment.de/files/patches/${EXT_P}.tar.bz2"
KEYWORDS="amd64 ~ppc ~x86"
SLOT="0"
LICENSE="GPL-2"
DEPEND="media-libs/jpeg
sys-apps/gawk
sys-libs/libcap
>=media-libs/fontconfig-2.4.2
>=media-libs/freetype-2
dev-util/unifdef
sys-devel/gettext"
# rausgenommen um Platz für den ( per hand zu installierenden ) multiproto teiber zu schaffen
# media-tv/linuxtv-dvb-headers
RDEPEND="${DEPEND}
dev-lang/perl"
# >=media-tv/gentoo-vdr-scripts-0.4.2"
# pull in vdr-setup to get the xml files, else menu will not work
PDEPEND="setup? ( >=media-plugins/vdr-setup-0.3.1-r1 )"
CONF_DIR=/etc/vdr
CAP_FILE=${S}/capabilities.sh
CAPS="# Capabilities of the vdr-executable for use by startscript etc."
pkg_setup() {
use debug && append-flags -g
PLUGIN_LIBDIR="/usr/$(get_libdir)/vdr/plugins"
}
add_cap() {
local arg
for arg; do
CAPS="${CAPS}\n${arg}=1"
done
}
enable_patch() {
local arg ARG_UPPER
for arg; do
ARG_UPPER=$(echo $arg|tr '[:lower:]' '[:upper:]')
echo "${ARG_UPPER} = 1" >> Make.config
done
}
extensions_add_make_conf()
{
# copy all ifdef for extensions-patch to Make.config
sed -e '1,/need to touch the following:/d' \
-e '/ifdef DVBDIR/,/^$/d' \
Make.config.template >> Make.config
}
extensions_all_defines() {
# extract all possible settings for extensions-patch
sed -e '/^#\?[A-Z].*= 1/!d' -e 's/^#\?//' -e 's/ .*//' \
Make.config.template \
| sort \
| tr '[:upper:]' '[:lower:]'
}
extensions_all_defines_unset() {
# extract all possible settings for extensions-patch
# and convert them to -U... for unifdef
sed -e '/^#\?[A-Z].*= 1/!d' -e 's/^#\?/-UUSE_/' -e 's/ .*//' \
Make.config.template \
| tr '\n' ' '
}
do_unifdef() {
ebegin "Unifdef sources"
local mf="Makefile.get"
cat <<'EOT' > $mf
include Makefile
show_def:
@echo $(DEFINES)
show_src_files:
@echo $(OBJS:%.o=%.c)
EOT
local DEFINES=$(extensions_all_defines_unset)
local RAW_DEFINES=$(make -f "$mf" show_def)
local VDR_SRC_FILES=$(make -f "$mf" show_src_files)
local KEEP_FILES=""
rm "$mf"
local def
for def in $RAW_DEFINES; do
case "${def}" in
-DUSE*)
DEFINES="${DEFINES} ${def}"
;;
esac
done
local f
for f in *.c; do
# Removing the src files the Makefile does not use for compiling vdr
if ! has $f ${VDR_SRC_FILES} ${KEEP_FILES}; then
rm -f ${f} ${f%.c}.h
continue
fi
unifdef ${DEFINES} "$f" > "tmp.$f"
mv "tmp.$f" "$f"
done
for f in *.h; do
unifdef ${DEFINES} "$f" > "tmp.$f"
mv "tmp.$f" "$f"
-s $f || rm "$f"
done
eend 0
}
src_unpack() {
unpack ${A}
cd "${S}"
ebegin "Changing pathes for gentoo"
sed \
-e 's-ConfigDirectory = VideoDirectory;-ConfigDirectory = CONFDIR;-' \
-i vdr.c
cat > Make.config <<-EOT
#
# Generated by ebuild ${PF}
#
PREFIX = /usr
DVBDIR = /usr/local/src/dvb/linux
PLUGINLIBDIR = ${PLUGIN_LIBDIR}
CONFDIR = ${CONF_DIR}
VIDEODIR = /video
LOCDIR = \$(PREFIX)/share/vdr/locale
DEFINES += -DCONFDIR=\"\$(CONFDIR)\"
EOT
eend 0
epatch "${FILESDIR}"/vdr-1.5.14-makefile-install-header.diff
# epatch "${FILESDIR}"/vdr-1.5.14-h264-syncearly-framespersec-audioindexer-fielddetection-speedup.diff
epatch "${FILESDIR}"/vdr-1.5.14-multiproto-nodelivery.diff
epatch "${FILESDIR}"/vdr-1.5.14-E45-h264.diff
# epatch "${FILESDIR}"/vdr-1.5.14-channels.conf_plus_HD_Astra.diff
# epatch "${FILESDIR}"/vdr-1.5.14_recording_length-0.3.diff
epatch "${FILESDIR}"/vdr-premiereepgfix-1.5.14.diff
# epatch "${FILESDIR}"/vdr-1.5.14-alex2.diff
# epatch "${FILESDIR}"/vdr-1.5.14_extensions-gentoo.diff
sed -i i18n-to-gettext.pl \
-e '/MSGIDBUGS/s/""/"automatically created from i18n.c by vdr-plugin.eclass <vdr\\@gentoo.org>"/'
# Do not install runvdr script and plugins
sed -i Makefile \
-e 's/runvdr//' \
-e 's/ install-plugins//' \
-e 's/INCLUDES = -I\/usr\/include\/freetype2/INCLUDES = -I\/usr\/include\/freetype2 -I${DVBDIR}\/include/'
if ! use vanilla; then
cd "${S}"
# Now apply extensions patch # deaktiviert weil kein 1.5.14er verfügbar
# local fname="${PN}-${EXT_VDR_PV:-${PV}}_extensions.diff"
# epatch "${EXT_DIR}/${fname}"
# other gentoo patches
epatch "${FILESDIR}/vdr-set-dumpable.diff"
# This allows us to start even if some plugin does not exist
# or is not loadable.
enable_patch PLUGINMISSING
# Patch necessary for media-plugins/vdr-reelchannelscan
# it does not change anything when plugin is not used
enable_patch CHANNELSCAN
if [[ -n ${VDR_MAINTAINER_MODE} ]]; then
einfo "Doing maintainer checks:"
# these patches we do not support
# (or have them already hard enabled)
local IGNORE_PATCHES="channelscan pluginapi pluginmissing"
extensions_all_defines > "${T}"/new.IUSE
echo $IUSE_EXTENSIONS $IGNORE_PATCHES|tr ' ' '\n' |sort > "${T}"/old.IUSE
local DIFFS=$(diff -u "${T}"/old.IUSE "${T}"/new.IUSE|grep '^[+-][^+-]')
if [[ -z ${DIFFS} ]]; then
einfo "IUSE_EXTENSIONS is up to date."
else
ewarn "IUSE differences!"
local diff
for diff in $DIFFS; do
ewarn "$diff"
done
fi
fi
ebegin "Enabling selected patches"
local flag
for flag in $IUSE_EXTENSIONS; do
use $flag && enable_patch ${flag}
done
eend 0
extensions_add_make_conf
ebegin "Make depend"
emake .dependencies >/dev/null
eend $? "make depend failed"
do_unifdef
use iptv && sed -i sources.conf -e 's/^#P/P/'
fi
# apply local patches defined by variable VDR_LOCAL_PATCHES_DIR
if test -n "${VDR_LOCAL_PATCHES_DIR}"; then
local dir_tmp_var
local LOCALPATCHES_SUBDIR=${PV}
for dir_tmp_var in allversions-fallback ${PV%_p*} ${PV} ; do
if [[ -d ${VDR_LOCAL_PATCHES_DIR}/${dir_tmp_var} ]]; then
LOCALPATCHES_SUBDIR="${dir_tmp_var}"
fi
done
echo
if [[ ${LOCALPATCHES_SUBDIR} == ${PV} ]]; then
einfo "Applying local patches"
else
einfo "Applying local patches (Using subdirectory: ${LOCALPATCHES_SUBDIR})"
fi
for LOCALPATCH in ${VDR_LOCAL_PATCHES_DIR}/${LOCALPATCHES_SUBDIR}/*.{diff,patch}; do
test -f "${LOCALPATCH}" && epatch "${LOCALPATCH}"
done
fi
if [[ -n "${VDRSOURCE_DIR}" ]]; then
cp -r "${S}" "${T}"/source-tree
fi
add_cap CAP_UTF8
add_cap CAP_IRCTRL_RUNTIME_PARAM \
CAP_VFAT_RUNTIME_PARAM \
CAP_CHUID \
CAP_SHUTDOWN_AUTO_RETRY
echo -e ${CAPS} > "${CAP_FILE}"
}
src_install() {
# trick makefile not to create a videodir by supplying it with an existing
# directory
emake install DESTDIR="${D}"
keepdir "${CONF_DIR}"/plugins
keepdir "${CONF_DIR}"/themes
keepdir "${PLUGIN_LIBDIR}"
exeinto /usr/share/vdr/bin
doexe i18n-to-gettext.pl
dohtml *.html
dodoc MANUAL INSTALL README* HISTORY* CONTRIBUTORS
cd "${EXT_DIR}"
local f
rm *vdr-1.4* 2>/dev/null
for f in BUGS README* HISTORY* patch.list; do
[[ -f ${f} ]] || break
newdoc "${f}" "${f}".ExtensionsPatch || die "Could not install extensions-patch doc ${f}"
done
cd "${S}"
insinto /usr/share/vdr
doins "${CAP_FILE}"
if [[ -n "${VDRSOURCE_DIR}" ]]; then
einfo "Installing sources"
insinto "${VDRSOURCE_DIR}/${P}"
doins -r "${T}"/source-tree/*
keepdir "${VDRSOURCE_DIR}/${P}"/PLUGINS/lib
fi
if use setup; then
insinto /usr/share/vdr/setup
doins "${S}"/menu.c
fi
# chown -R vdr:vdr "${D}/${CONF_DIR}"
}
pkg_postinst() {
elog "It is a good idea to run vdrplugin-rebuild now."
if has_version "<media-video/vdr-1.3.36-r3"; then
ewarn "Upgrade Info:"
ewarn
ewarn "If you had used the use-flags lirc, rcu or vfat"
ewarn "then, you now have to enable the associated functionality"
ewarn "in /etc/conf.d/vdr"
ewarn
ewarn "vfat is now set with VFAT_FILENAMES."
ewarn "lirc/rcu are now set with IR_CTRL."
ebeep
fi
if use setup; then
if ! has_version media-plugins/vdr-setup || \
! egrep -q '^setup$' "${ROOT}/etc/conf.d/vdr.plugins"; then
echo
ewarn "You have compiled media-video/vdr with USE=\"setup\""
ewarn "It is very important to emerge media-plugins/vdr-setup now!"
ewarn "and you have to loaded it in /etc/conf.d/vdr.plugins"
fi
fi
local keysfound=0
local key
local warn_keys="JumpFwd JumpRew JumpFwdSlow JumpRewSlow"
local remote_file="${ROOT}"/etc/vdr/remote.conf
if [[ -e ${remote_file} ]]; then
for key in ${warn_keys}; do
if grep -q -i "\.${key} " "${remote_file}"; then
keysfound=1
break
fi
done
if [[ ${keysfound} == 1 ]]; then
ewarn "Your /etc/vdr/remote.conf contains keys which are no longer usable"
ewarn "Please remove these keys or vdr will not start:"
ewarn "# ${warn_keys}"
fi
fi
}
im chroot vdr im Vordergrund starten
- vdr starten mit runvdr.sh
#!/bin/sh
# runvdr: Loads the DVB driver and runs VDR
#
# If VDR exits abnormally, the driver will be reloaded
# and VDR restarted.
#
# In order to actually use this script you need to implement
# the functions DriverLoaded(), LoadDriver() and UnloadDriver()
# and maybe adjust the VDRPRG and VDRCMD to your particular
# requirements.
#
# Since this script loads the DVB driver, it must be started
# as user 'root'. Add the option "-u username" to run VDR
# under the given user name.
#
# Any command line parameters will be passed on to the
# actual 'vdr' program.
#
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
# $Id: runvdr 1.19 2006/05/14 16:02:05 kls Exp $
export LANG=de_DE
export LC_COLLATE=de_DE
PATH=/usr/local/bin:$PATH
VDRPRG="/usr/bin/vdr"
VDRCMD="$VDRPRG -w 60 -c /etc/vdr \
-P'femon' \
-Pskinelchi \
-Pdirector \
-Ppremiereepg \
-P'xine -r' \
-r '/usr/bin/noad -a -j -o -S' \
-u alex
$*"
KILL="/usr/bin/killall -q -TERM"
# Detect whether the DVB driver is already loaded
# and return 0 if it *is* loaded, 1 if not:
function DriverLoaded()
{
return 1
}
# Load all DVB driver modules needed for your hardware:
function LoadDriver()
{
modprobe stb6100
modprobe stb0899
modprobe lnbp21
modprobe budget-ci
}
# Unload all DVB driver modules loaded in LoadDriver():
function UnloadDriver()
{
modprobe -r budget-ci
modprobe -r lnbp21
modprobe -r stb0899
modprobe -r stb6100
}
# Load driver if it hasn't been loaded already:
#if ! DriverLoaded; then
# LoadDriver
# fi
while (true) do
eval "$VDRCMD"
if test $? -eq 0 -o $? -eq 2; then exit; fi
# echo "`date` reloading DVB driver"
$KILL $VDRPRG
sleep 10
# UnloadDriver
# LoadDriver
echo "`date` restarting VDR"
done
- umounten nach verlassen des chroot
#!/bin/bash echo "umounting vs" umount /home/alex/vs/dev/pts/ umount /home/alex/vs/dev/shm/ umount /home/alex/vs/dev/ umount /home/alex/vs/proc/bus/usb/ umount /home/alex/vs/proc/ umount /home/alex/vs/sys/ umount /home/alex/vs/tmp/ umount /home/alex/vs/usr/portage/distfiles/ umount /home/alex/vs/video umount /home/alex/vs/home/alex/mpeg2avi/ umount /home/alex/vs/home/alex/.vdrtransxvid/ umount /home/alex/vs/archiv/