Gentoo HD-vdr experimentel
Hulk (Diskussion | Beiträge) K (→Multiproto DVB Treiber im amd64-chroot per Hand installieren) |
(→Multiproto DVB Treiber im amd64-chroot per Hand installieren) |
||
Zeile 102: | Zeile 102: | ||
- 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 ) | - 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== | + | ==s2-liplianin DVB Treiber im amd64-chroot per Hand installieren== |
+ | cd /usr/local/src | ||
+ | hg clone http://mercurial.intuxication.org/hg/s2-liplianin/ | ||
+ | cd s2-liplianin | ||
+ | cd linux/include/linux | ||
+ | ln -s /usr/src/linux-headers-`uname -r`/include/linux/compiler.h ./ | ||
+ | cd ../../../ | ||
+ | make | ||
+ | make install | ||
+ | depmod -a | ||
+ | |||
+ | ==Alternativ Multiproto DVB Treiber im amd64-chroot per Hand installieren== | ||
( im chroot ) | ( im chroot ) |
Version vom 12. März 2009, 23:13 Uhr
Beschreibung
Autor: Alexander Richter - 21.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
- locales overlay im chroot anlegen - 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 )
s2-liplianin DVB Treiber im amd64-chroot per Hand installieren
cd /usr/local/src hg clone http://mercurial.intuxication.org/hg/s2-liplianin/ cd s2-liplianin cd linux/include/linux ln -s /usr/src/linux-headers-`uname -r`/include/linux/compiler.h ./ cd ../../../ make make install depmod -a
Alternativ 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 der Artikel OpenSUSE VDR DVB-S2 - Teil2: DVB Treiber
- im chroot System - dvb Treiber laden und Zugriffsrechte ändern, um als unprivilegierter 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/