beta: these instructions not perfected yet
Updated: 6/18/2008
See also:
---------
MythTV.org documentation: http://www.mythtv.org/modules.php?name=MythInstall
Some Fedora MythTV documentation: http://wilsonet.com/mythtv/fcmyth.php
MySQL security documentation: http://dev.mysql.com/doc/refman/5.0/en/privilege-system.html
MythTV - quick setup instructions, for use with Fedora 9 Linux:
---------------------------------------------------------------
My experience with MythTV is with using: Hauppauge WinTV-PVR-150 tuner card
MythTV - Backend server configuration:
--------------------------------------
Setup ATrpms repository to get the MythTV packages:
See also: http://atrpms.net/
cd /etc/yum.repos.d
rpm --import http://ATrpms.net/RPM-GPG-KEY.atrpms
vi atrpms.repo
[atrpms]
name=ATrpms for Fedora Core $releasever - $basearch
baseurl=http://dl.atrpms.net/fc$releasever-$basearch/atrpms/stable
# or use something like the following if you are using a locally rsynced copy of the ATrpms repo
# baseurl=http://yum/f9/atrpms
enabled=0
gpgcheck=1
gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms
Disable livna repository if enabled:
vi /etc/yum.repos.d/livna.repo
Change "enabled=1" to "enabled=0" in file
Install Hauppauge WinTV-PVR-150 tuner card capture card firmware:
See also: http://ivtvdriver.org
Make sure your kernel is updated to 2.6.22 or newer, and then:
yum --enablerepo=atrpms install ivtv-firmware
Reboot:
init 6
Make sure you can see /dev/video0 as "crw-rw----+" after reboot:
Example:
# ls -la /dev/video*
lrwxrwxrwx 1 root root 6 Jun 18 21:19 /dev/video -> video0
crw-rw----+ 1 jdoe root 81, 0 Jun 18 21:19 /dev/video0
crw-rw----+ 1 jdoe root 81, 24 Jun 18 21:19 /dev/video24
crw-rw----+ 1 jdoe root 81, 32 Jun 18 21:19 /dev/video32
Install MythTV (136 packages when I installed):
yum --enablerepo=atrpms install mythtv
Note, if you get transaction errors similar to this:
Transaction Check Error:
file /usr/lib/python2.5/site-packages/PIL/GifImagePlugin.py from install of PIL-1.1.6-8.fc9.i386 conflicts with file from package python-imaging-1.1.6-9.fc9.i386
Then you need to remove these packages:
rpm -e python-imaging hplip
Then rerun the above yum command.
Install mplayer-skins so that mplayer works for testing:
yum --enablerepo=atrpms install mplayer-skins
Set location of saved video files (make sure your userID can write to this directory)
Example:
chown -R mythtv:mythtv /video
chmod -R 775 /video
chown -R root:root /video/lost+found/
chmod -R 700 /video/lost+found/
Set useable shell for userID "mythtv":
usermod -s /bin/bash mythtv
Before change:
# grep myth /etc/passwd
mythtv:x:495:487:mythtvbackend User:/var/lib/mythtv:/sbin/nologin
After change:
[root@s2 /]# grep myth /etc/passwd
mythtv:x:495:487:mythtvbackend User:/var/lib/mythtv:/bin/bash
Allow /dev/video to be writeable by mythtv group (you must reboot after this):
Create file /etc/security/console.perms.d/51-default.perms with the following 4 lines in it:
# device class
<mythtv>=/dev/video* /dev/radio* /dev/winradio* /dev/vtx* /dev/vbi* /dev/video/*
# permission definition
<console> 0660 <mythtv> 0660 root.mythtv
After reboot, /dev/video* should look like this (Group read/writeable and group owned by mythtv):
# ll /dev/video*
lrwxrwxrwx 1 root root 6 Jun 18 23:53 /dev/video -> video0
crw-rw---- 1 jdoe mythtv 81, 0 Jun 18 23:53 /dev/video0
crw-rw---- 1 jdoe mythtv 81, 24 Jun 18 23:53 /dev/video24
crw-rw---- 1 jdoe mythtv 81, 32 Jun 18 23:53 /dev/video32
Before reboot, looked like this:
# ll /dev/video*
lrwxrwxrwx 1 root root 6 2008-06-18 22:50 /dev/video -> video0
crw-rw---- 1 root root 81, 0 2008-06-18 22:50 /dev/video0
crw-rw---- 1 root root 81, 24 2008-06-18 22:50 /dev/video24
crw-rw---- 1 root root 81, 32 2008-06-18 22:50 /dev/video32
Test the IVTV driver:
cat /dev/video0 > test.mpg
Press CTRL-C to stop recording to test.mpg after awhile.
Test playback of the test.mpg file with mplayer
Add the next 7 lines to the "[mysqld]" section of the /etc/my.cnf file:
set-variable=thread_stack=256k
skip-innodb
key_buffer = 16M
table_cache = 128
sort_buffer_size = 2M
myisam_sort_buffer_size = 8M
query_cache_size = 16M
Setup mysql (as "root" userID)
chkconfig mysqld on
service mysqld start
Remove anonymous mysql accounts, if available:
mysql -u root
mysql> select host, user from mysql.user;
mysql> DELETE FROM mysql.user WHERE User = '';
mysql> FLUSH PRIVILEGES;
mysql> select host, user from mysql.user;
mysql> quit
Set mysql "root" userID password, where "newpwd" is the password you want for root mysql userID and "hostname" is your hostname:
mysql -u root
mysql> UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE user='root';
or you can do the "set password" option for each instance of the root userID in the user table, for example:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'hostname' = PASSWORD('newpwd');
mysql> FLUSH PRIVILEGES;
mysql> quit
Populate the mythconverg database
mysql -u root -p < /usr/share/doc/mythtv-docs-0.21/database/mc.sql
enter your root mysql userID password at the prompt
Grant access from your local IP subnet for mythfrontends to connect to your mythtv backend database:
mysql -u root -p mythconverg
enter your root mysql userID password at the prompt
mysql> grant all on mythconverg.* to mythtv@'192.168.1.0/255.255.255.0' identified by "mythtv";
mysql> grant all on mythconverg.* to mythtv@'localhost' identified by "mythtv";
mysql> flush privileges;
mysql> quit
Set mysql "mythtv" userID password, where "newpwd" is the password you want for root mysql userID and "hostname" is your hostname::
mysql -u root -p
enter your root mysql userID password at the prompt
mysql> UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE user='mythtv';
or you can do the "set password" option for each instance of the mythtv userID in the user table, for example:
mysql> SET PASSWORD FOR 'mythtv'@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'mythtv'@'hostname' = PASSWORD('newpwd');
mysql> FLUSH PRIVILEGES;
mysql> quit
Setup a Schedules Direct account:
http://www.schedulesdirect.org/
Run the mythTV setup program (run this as "mythtv" userID):
From another terminal window, run "xhost +" to enable x window use by "mythtv" userID!
mythtv-setup
If you get this error: "libGL error: failed to open DRM: Operation not permitted"
Then you need to add this 3 line section to your /etc/X11/xorg.conf:
Section "DRI"
Mode 0666
EndSection
NOTE: Make sure you setup each main menu tab item from top to bottom! MythTV won't work without it.
General section:
IP address for (servername): (enter the backend servers IP address)
Security Pin (Required): 0000 (to allow all frontends to connect)
Master Server IP address: (enter the backend servers IP address)
Locale Settings
TV format: NTSC
VBI format: None
Channel frequency table: us-cable
Time offset for XMLTV listings: Auto
Miscellaneous Settings (use defaults)
EIT Scanner Optionis (use defaults)
Shutdown/Wakeup Optioins (use defaults)
Backend Wakeup settings (use defaults)
Job Queue (Backend-Specific) (use defaults)
Job Queue (Global) (use defaults)
Job Queue (Job Commands) (use defaults)
Capture cards:
New capture card
Card type: MPEG-2 encoder card (PVR-x50, PVR-500)
Video device: /dev/video0
Probed info: Hauppauge WinTV PVR-150 [ivtv]
Default input: Tuner 1
Video sources:
New video source
Video source name: ScheduleesDirect.org
XMLTV listings grabber: North America (SchedulesDirect.org) (Internal)
User ID:(your userID on SchedulesDirect.org)
Password: (your password on SchedulesDirect.org)
Retrieve Lineups
Data Direct Lineup: (should show your lineup selected when on SchedulesDirect.org web site)
Channel frequency table: default
Input connections:
MPEG: /dev/video0 Tuner1 -> SchedulesDirect.org
Video source: SchedulesDirect.org
Scan for channels (this fails when I tried it, so I recommend just running Fetch channels below)
Fetch channels from listings source (this does take awhile to run)
Starting channel: (select your first channel)
Channel Editor:
Channel Scanner (this fails when I tried it)
Storage Directories
Storage Groups (directories for new recordings)
Default
'Default' Storage Group Directories
(Add New Directory)
Enter directory name or press SELECT to enter
/video (or your directory location to store recorded video)
Run the "mythfilldatabase" (as directed after running "mythtv-setup"):
Run next line first time you run this:
mythfilldatabase --do-channel-updates
All future updates, run:
mythfilldatabase
Setup "mythbackend" to startup automatically and start it:
Verify these lines in /etc/init.d/mythbackend startup script, so that mythtv runs as mythtv user and not root:
daemon --user mythtv $binary $OPTIONS
# daemon $binary $OPTIONS
Then run:
chkconfig mythbackend on
service mythbackend start
Either turn off iptables firewall on backend server or configure to allow mythtv to access from frontend
To turn off iptables:
chkconfig iptables off
service iptables stop
# MythWeb configuration - for scheduling recordings of shows using your web browser:
chkconfig httpd on
service httpd start
Setup a loginID and password to browse your mythweb page:
Example:
htdigest -c /etc/httpd/conf/htdigest MythTV your_user_id
chown apache:apache /etc/httpd/conf/htdigest
chmod 640 /etc/httpd/conf/htdigest
vi /var/www/html/mythweb/.htaccess
Add and change this section to suit your needs (make sure you remove any "#" commenting these lines):
AuthType Digest
AuthName "MythTV"
AuthUserFile /etc/httpd/conf/htdigest
Require valid-user
BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
You can also add your local IP subnet so you do not need a loginID/password at home, but you do from the Internet:
Example:
vi /var/www/html/mythweb/.htaccess
Add and change this section to suit your needs:
Order deny,allow
Deny from all
Allow from 192.168.1.0/255.255.255.0
Satisfy any
Configure this section in /var/www/html/mythweb/.htaccess based on your mythtv configuration:
setenv db_server "localhost"
setenv db_name "mythconverg"
setenv db_login "mythtv"
setenv db_password "mythtv"
Browse to your mythweb backend server:
http://your_server_name/mythweb or http://your_server_IP_address/mythweb
You can also setup an index.php file to redirect your main page to your /mythweb page:
Example:
vi /var/www/html/index.php
Add the next line to the index.php file:
<?php header("Location: /mythweb"); ?>
Then, just browse to http://your_server_name/ and it should redirect to your /mythweb page.
MythTV - Frontend server configuration. Setup the mythfrontend on your frontend server:
----------------------------------------------------------------------------------------
cd /etc/yum.repos.d
vi atrpms.repo
# atrpms.repo begin
[atrpms]
name=Fedora $releasever - $basearch - ATrpms
baseurl=http://dl.atrpms.net/f$releasever-$basearch/atrpms/stable
enabled=0
gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms
gpgcheck=1
# atrpms.repo end
rpm --import http://ATrpms.net/RPM-GPG-KEY.atrpms
yum --enablerepo=atrpms install mythtv-frontend
Setup mysql remote user for remote server:
mysql -u root -p mythconverg
mysql> grant all on mythconverg.* to mythtv@FRONTEND_SERVERNAME_HERE identified by "mythtv";
mysql> set password for mythtv@FRONTEND_SERVERNAME_HERE=password('MYTHTV_USERID_PASSWORD_HERE');
mysql> flush privileges;
mysql> quit
Run mythfrontend:
mythfrontend
Updating MythTV and IVTV firmware and drivers:
----------------------------------------------
Update your Fedora Core base and extra packages:
yum update
If there are new Myth packages, update myth packages:
yum -y --enablerepo=atrpms update \*myth\* ivtv-firmware
Verify these lines in /etc/init.d/mythbackend startup script, so that mythtv runs as mythtv user and not root:
daemon --user mythtv $binary $OPTIONS
# daemon $binary $OPTIONS
Troubleshooting:
----------------
For mythbackend issues, check the log file here:
/var/log/mythtv/mythbackend.log
Test mythtv frontend connection to backend server, while on frontend server:
telnet BACKEND_HOSTNAME 3306
mysql -h BACKEND_HOSTNAME -u mythtv -p mythconverg
To show host table:
mysql -u root -p mysql
mysql> select host, user from mysql.user;
To show full mysql user database table:
mysql -u root -p mysql
mysql> select * from user;
For access denied mysql errors, see:
http://dev.mysql.com/doc/refman/5.0/en/access-denied.html
Using mythweb, if you get "Database Access Denied...Please see .htaccess for instructions.", then:
On your backend server, modify the .htaccess file to set your "mythtv" userID mysql password:
Example:
vi /var/www/html/mythweb/.htaccess
Change "setenv db_password" section to include your "mythtv" userID mysql password, then save the file.
If your channels on mythweb show as (channel 7 example) "Adding Channel 7", run this to fix:
mythfilldatabase --do-channel-updates
Backing up the database:
------------------------
Backup the database (See the mysqldump manpage for more information):
mysqldump -u mythtv -p(type your mythtv password here) mythconverg -c > mythtv_backup.sql
Example:
mysqldump -u mythtv -pmythtv mythconverg -c > mythtv_backup.sql
After upgrading Fedora or moving your database's recorded program data to new backend hardware:
-----------------------------------------------------------------------------------------------
Prior to upgrading Fedora, create a backup of the database and copy it off of your server.
NOTE: Newer versions of mysqldump place backticks around the table names.
Backticks are not the same as apostrophes!
Backticks are located to the left of the "1" key, on the same key as the "~" (tilde).
The bash shell interprets the backticks, so we use a \ before each one.
Run these commands:
grep "INSERT INTO \`record\` " mythtv_backup.sql > restore.sql
grep "INSERT INTO \`recorded\` " mythtv_backup.sql >> restore.sql
grep "INSERT INTO \`oldrecorded\` " mythtv_backup.sql >> restore.sql
grep "INSERT INTO \`recordedprogram\` " mythtv_backup.sql >> restore.sql
grep "INSERT INTO \`recordedrating\` " mythtv_backup.sql >> restore.sql
grep "INSERT INTO \`recordedmarkup\` " mythtv_backup.sql >> restore.sql
grep "INSERT INTO \`recordedseek\` " mythtv_backup.sql >> restore.sql
Note the space after the table name and the ">>" to append to the file for all but the first grep.
"recordedmarkup" and "recordedseek" are huge and there may be hundreds of thousands of lines if you had lots of hours of recordings.
After you have moved the data files to the new hardware, configure MythTV using the mythtv-setup program as you normally would with a standard MythTV installation.
Then, restore the information about your programs back into the database:
Populate the mythconverg database
mysql -u root -p < /usr/share/doc/mythtv-docs-0.21/database/mc.sql
enter your root mysql userID password at the prompt
Grant access from your local IP subnet for mythfrontends to connect to your mythtv backend database:
mysql -u root -p mythconverg
enter your root mysql userID password at the prompt
mysql> grant all on mythconverg.* to mythtv@'192.168.1.0/255.255.255.0' identified by "mythtv";
mysql> flush privileges;
mysql> quit
Set mysql "mythtv" userID password, where "newpwd" is the password you want for root mysql userID and "hostname" is your hostname::
mysql -u root -p
enter your root mysql userID password at the prompt
mysql> UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE user='mythtv';
or you can do the "set password" option for each instance of the mythtv userID in the user table, for example:
mysql> SET PASSWORD FOR 'mythtv'@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'mythtv'@'hostname' = PASSWORD('newpwd');
mysql> FLUSH PRIVILEGES;
mysql> quit
Setup a Schedules Direct account:
http://www.schedulesdirect.org/Run the mythTV setup program (run this as "mythtv" userID):
(run "xhost +" as your login userID from another window first)
mythtv-setup
Run the "mythfilldatabase" (as directed after running "mythtv-setup"):
mythfilldatabase --do-channel-updates
Restore the database:
mysql -u mythtv -pmythtv mythconverg < restore.sql
Setup "mythbackend" to startup automatically and start it:
Verify these lines in /etc/init.d/mythbackend startup script, so that mythtv runs as mythtv user and not root:
daemon --user mythtv $binary $OPTIONS
# daemon $binary $OPTIONS
Then run:
chkconfig mythbackend on
service mythbackend start
After successful adding the data you may delete the restore.sql file.
Restore the database (assuming that you've dropped the database):
-----------------------------------------------------------------
mysql -u root -p
mysql>create database mythconverg;
mysql>exit
Grant access from your local IP subnet for mythfrontends to connect to your mythtv backend database:
mysql -u root -p mythconverg
enter your root mysql userID password at the prompt
mysql> grant all on mythconverg.* to mythtv@'192.168.1.0/255.255.255.0' identified by "mythtv";
mysql> grant all on mythconverg.* to mythtv@'localhost' identified by "mythtv";
mysql> flush privileges;
mysql> quit
Set mysql "mythtv" userID password, where "newpwd" is the password you want for root mysql userID and "hostname" is your hostname::
mysql -u root -p
enter your root mysql userID password at the prompt
mysql> UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE user='mythtv';
or you can do the "set password" option for each instance of the mythtv userID in the user table, for example:
mysql> SET PASSWORD FOR 'mythtv'@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'mythtv'@'hostname' = PASSWORD('newpwd');
mysql> FLUSH PRIVILEGES;
mysql> quit
Restore database:
mysql -u mythtv -p mythconverg < mythtv_backup.sql
You may need to alter the MySQL permissions if this database is being shared with multiple systems.
(See Modifying access to the MySQL database for multiple systems.)
Mysql - removing access to a previously granted account:
--------------------------------------------------------
See also: http://dev.mysql.com/doc/refman/5.0/en/drop-user.html
mysql -u root -p mythconverg
mysql> select host, user from mysql.user;
mysql> show grants for 'mythtv'@'192.168.1.0/255.255.255.0';
mysql> revoke all privileges, grant option from 'mythtv'@'192.168.1.0/255.255.255.0';
mysql> revoke usage on *.* from 'mythtv'@'192.168.1.0/255.255.255.0';
mysql> drop user 'mythtv'@'192.168.1.0/255.255.255.0';
mysql> show grants for 'mythtv'@'192.168.1.0/255.255.255.0';
mysql> select host, user from mysql.user;
mysql> flush privileges;
mysql> quit
Deleting the MySQL database (ONLY IF YOU WANT TO DELETE ALL YOUR RECORDINGS DATA):
----------------------------------------------------------------------------------
NOTE: Performing this step will remove the entire database.
You will lose all of your settings and will need to re-run the mc.sql script to setup the database structure before running the mythtv-setup program:
$ mysql -u root
mysql> drop database mythconverg;
mysql> quit
Things to look into yet:
------------------------
MythstreamTV
Mythstream plugin:
------------------
yum -y --enablerepo=atrpms install mythstream
Streaming MythTV from MythWeb using FLASH:
------------------------------------------
http://chiefhacker.com/2007/01/22/streaming-mythtv-from-mythweb-using-flash/
Automaticly remove commercials from recorded files:
---------------------------------------------------
NOTE: This tends to remove some bits of the program you recorded, so I don't use it.
Normally, commercials are just flagged to be skipped while watching.
To free up some space, you can automaticly remove commercials by retranscoding the file.
See also: http://www.mythtv.org/wiki/index.php/Removing_Commercials
NOTES:
This example will re-transcode the file and remove the commercial sections that were flagged by mythtv as commercials.
You will want to periodically remove the .old files. This isn't automatic in case a commercial is cut incorrectly.
Switch to "mythtv" userID:
su - mythtv
Note: In this example, "mythtv" userID's home directory is in /var/lib/mythtv
Setup bin directory:
mkdir /var/lib/mythtv/bin
Copy this example file to /var/lib/mythtv/bin as removecommercials
Change "ADD_YOUR_MYTHTV_DATABASE_PASSWORD_HERE" to your mythtv userID database password at the top of the file:
vi removecommercials
Example: MYTHTVDATABASEPASSWORD=ADD_YOUR_MYTHTV_DATABASE_PASSWORD_HERE
Set permissions on the file:
chmod 700 /var/lib/mythtv/bin/removecommercials
Run mythtv-setup as the "mythtv" userID on the backend server.
mythtv-setup
click on "1.General"
Click "Next" until you get to the "Job Queue (Host-Specific)" section.
At "Job Queue (Host-Specific)", make sure these are all checked:
"Allow 'User Job #1' jobs"
"Allow Commercial Detection jobs"
"Allow Transcoding jobs"
Click "Next" until you get to "Job Queue (Job Commands)" section.
Note: In this example, "mythtv" userID's home directory is in /var/lib/mythtv
Setup User Job #1 as shown here:
User Job #1 Description: Remove Commercials
User Job #1 Command: /var/lib/mythtv/bin/removecommercials %FILE%
Click "Next" until you see "Finish", then click "Finish" and exit "mythtv-setup".
Option 1: Manually remove commercials from a recording using mythfrontend:
Run mythfrontend
Select "Media Library" - "Watch Recordings"
Select the recording you want to remove commercials from, and hit the right arrow on the keyboard
Select "Job Options" and press "Enter"
Select "Begin Remove Commercials" and press "Enter"
You can watch the job get queued on mythweb "Backend Status"
Option 2: Automaticly remove commercials after they are recorded using mythweb:
From mythweb, click on the "Recording Schedules (Manual, Custom)"
Click the title you want to automaticly remove commercials from future recordings
Check the "Remove Commercials" tab
Click Update Recording Settings
Option 3: Manually remove commercials from a recording using Unix command line:
Switch to mythtv userID and cd to your videos directory:
su - mythtv
cd /path/to/videos
Run the script manually to remove commercials:
/var/lib/mythtv/bin/removecommercials (filename)
Example: /var/lib/mythtv/bin/removecommercials 1048_20070616222813.mpg