Minimyth Howto

From MythTV Official Wiki
Jump to: navigation, search

Minimyth - PXE NetworkBoot Example

Minimyth is a light linux distribution for Mythfrontend. This is an example of a typical setup utilising the main features including network boot. The backend in this example is a Mythdora Box.

It loads the distro across the network into memory. There is no HDD or any other storage device.

For links and other guides try Minimyth

Example

Network Topology

+----------------------+         +-----------------------+
|MythTv Backend Server |         |tv1                    |
|IP : 192.168.1.90     |   +-----|192.168.1.91           |
|Static IP             |   |     |Runs : Minimyth        |
|Runs : MythBackend,   |---+     |MAC : 00:40:63:EF:7E:D2|
|       dhcpd,         |   |     +-----------------------+
|       tftp, samba    |   |     +-----------------------+
+----------------------+   +-----|tvConserv              |
                                 |192.168.1.92           |
                                 |Runs : Minimyth        |
                                 |MAC : 48:5B:39:95:16:B5|
                                 +-----------------------+


Get the MAC Address of your frontend

You will need to enter setup on the BIOS and disable usual boot methods (ie CDROM, HDD) etc and track down the setting to enable network boot.

One this is done, fire up your box and you will see it will show up its MAC address as it looks for a DHCP server.

It will fail as we have not got everything setup yet, but write down the MAC address as we are going to need it later. The MAC address is prefixed '01-', in some cases below the '01-' is needed, for DHCPD server strip off the '01-'

DHCPD Server

To install a dhcpd server on your backend

# yum install dhcpd

The create the config file /etc/dhcp/dhcpd.conf

#Basic dhcpd.conf 

# option definitions common to all supported networks...
option domain-name "mydomain.com";
default-lease-time 600;
get-lease-hostnames true;
max-lease-time 7200;
authoritative;
log-facility local7;
allow booting;
allow bootp;
option domain-name-servers 192.168.1.1, 158.152.1.58;
option routers 192.168.1.1;
option ntp-servers 0.fedora.pool.ntp.org, 1.fedora.pool.ntp.org, 2.fedora.pool.ntp.org;
# leasable addresses
subnet 192.168.1.0 netmask 255.255.255.0 {
       range 192.168.1.220 192.168.1.250; }
host tv1 {
       hardware ethernet 00:40:63:EF:7E:D2;
       fixed-address 192.168.1.91;
       next-server 192.168.1.90;
       filename "PXEClient/pxelinux.0";
       option host-name "tv1"; } 
host tvConserv {
       hardware ethernet 48:5B:39:95:16:B5;
       fixed-address 192.168.1.92;
       next-server 192.168.1.90;
       filename "PXEClient/pxelinux.0";
       option host-name "tvConserv"; }

Enable the service

#chkconfig --levels 2345 dhcpd on

NOTE : The hostname is important as the directory structure will look for the config files per that hostname

tftp Server

To install tftp (Trivial File Transfer Protocol)

# yum install tftp-server

Tftp uses the Xinetd service (ie provides the service on demand) Most installs will automatically create the xinetd.d files, but we need to ammend them to provide write access to the server. (Ie the flags -c -v -s)

# default: off
# description: The tftp server serves files using the trivial file transfer \
#	protocol.  The tftp protocol is often used to boot diskless \
#	workstations, download configuration files to network-aware printers, \
#	and to start the installation process for some operating systems.
service tftp
{  
       disable	= no
       socket_type		= dgram
       protocol		= udp
       wait			= yes
       user			= root
       server			= /usr/sbin/in.tftpd
       server_args		= -c -v -s /tftpboot
       per_source		= 11
       cps			= 100 2
       flags			= IPv4
}

Samba Server for file access

In this example we need to access the backend file storage system. On the server in the example MythBackend folders are in the folder /storage.

To export this as a share in the samba server we need to add the following to the end of /etc/samba/smb.conf

[storage] 
       comment = MythTV Data Storage
       path = /storage
       writable = yes
       create mask = 0660
       force create mode = 0660
       force directory mode = 777
       directory mask = 0777

Ensure the samba server is set to start on boot

#chkconfig --levels 2345 smbd on

Note in the minimyth.conf file below, how this is accessed.

Directory Structure and Base Files

Create a directory structure as follows

#mkdir /tftpboot
#mkdir /tftpboot/PXEClient
#mkdir /tftpboot/PXEClient/conf/tv1
#mkdir /tftpboot/PXEClient/conf/tvConserv
#mkdir /tftpboot/PXEClient/conf-rw
#mkdir /tftpboot/PXEClient/pxelinux.cfg

You will then need to populate with some basic files (adjust downloads accordingly) Minimyth for i686 (Note VIA processors now are also i686 NOT c7)

#cd /tftpboot/PXEClient
#wget http://www.minimyth.org/download/test/latest-0.23/ram-minimyth-0.23.1-73b12.tar.bz2
#tar -xjf ram-minimyth-0.23.1-73b12.tar.bz

PXELinux Loader

For all Distros

#cd /tftpboot/PXEClient 
#mkdir temp
#cd temp
#wget http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-4.02.tar.gz
#gunzip syslinux-4.02.tar.gz
#tar -xvf syslinux-4.02.tar
#cd syslinux-4.02/core/
#cp pxelinux.0 /tftpboot/PXEClient/
#cd /tftpboot/PXEClient
#chmod +x pxelinux.0
#rm -rf temp

Some distros such as Fedora pxelinux.0 file is provided by syslinux.i386 installed via yum

#yum -y install syslinux.i386

yum will dump the file in /usr/lib/syslinux/pxelinux.0 so you will have to copy it to you tftpboot dir

#cp /usr/lib/syslinux/pxelinux.0 /tftpboot/PXEClient/

PXELinux Config Files

You can create a PXELinux loader for each MAC address, or a generic one called 'default' for all machines. Good if all your machines are same architecture and using same ram-minimyth file. In this example we will create one per MAC address even though they are the same.

#cd /tftpboot/PXEClient/pxelinux.cfg

Create a file 01-00-40-63-ef-7e-d2

DEFAULT minimyth-ram
LABEL minimyth-ram
       KERNEL ram-minimyth-0.23.1-73b12/kernel
       APPEND ro root=/dev/ram0 ramdisk_size=96000 initrd=ram-minimyth-0.23.1-73b12/rootfs

And one called 01-48-5b-39-95-16-b5 (which in this case is the same contents)

DEFAULT minimyth-ram
LABEL minimyth-ram
       KERNEL ram-minimyth-0.23.1-73b12/kernel
       APPEND ro root=/dev/ram0 ramdisk_size=96000 initrd=ram-minimyth-0.23.1-73b12/rootfs

The last things you need now are minimyth config files. These all go under the applicable /tftpboot/PXEClient/conf/frontend_hostname/

- minimyth.conf //Main Configuration file
- lircd.conf    //Lirc read file for the remote
- lircrc.mythtv //How to translate that remote for Mythtv
- lircrc.xine   //How to translate that remote for Xine
- lircrc.vlc etc etc

Example minimyth.conf below.

Permissions Cleanup

#chown -R nobody /tftpboot/PXEClient
#chgrp -R nobody /tftpboot/PXEClient
#chmod 777 /tftpboot/PXEClient/conf-rw 

minimyth.conf

This is the "magical" part about Minimyth and its immense strength. You create a file called minimyth.conf that each frontend picks up and configures Myth to suit that machine. The magical part is, when you upgrade your minimyth for fixes, you do not have to re-setup like a standard box. The new minimyth will pull in the minimyth.conf, setup xorg, video profiles and so on.

Here is a typical minimyth.conf (for Openchrome Via CLE266 with TV out and homebrew LIRC receiver on Com Port 1)

################################################################################
# minimyth.conf
#
# The required MiniMyth configuration file.
#
# For information on this file, see either
# <http://minimyth.org/document.shtml>
# or
# <http://{minimyth}/document.shtml>,
# where '{minimyth}' is the IPv4 address or hostname of your MiniMyth system.
################################################################################ 
################################################################################
# The following line will fetch and include a file named 'minimyth-common.conf'
# from the MiniMyth read-only configuration directory. If you have multiple
# MiniMyth systems with common configuration, then you can include this line
# in each 'minimyth.conf' file and put the common configuration in the file
# 'default/minimyth-common.conf'.
################################################################################
#mm_minimyth_conf_include minimyth-common.conf 
################################################################################
# MiniMyth configuration variables.
#
# MM_MINIMYTH_UPDATE_URL
# MM_MINIMYTH_BOOT_URL
# MM_MINIMYTH_FETCH_MINIMYTH_PM
################################################################################
#MM_MINIMYTH_BOOT_URL='http://tftp.home/minimyth/' 
################################################################################
# DHCP overrides configuration variables.
#
# MM_DHCP_ADDRESS
# MM_DHCP_BROADCAST
# MM_DHCP_SUBNET_MASK
# MM_DHCP_ROUTERS
# MM_DHCP_HOST_NAME
# MM_DHCP_DOMAIN_NAME
# MM_DHCP_DOMAIN_NAME_SERVERS
# MM_DHCP_NTP_SERVERS
# MM_DHCP_LOG_SERVERS
# MM_DHCP_TCODE
################################################################################
MM_DHCP_TCODE='Europe/London'
MM_DHCP_DOMAIN_NAME='mydomain.com' 
################################################################################
# Security configuration variables.
#
# MM_SECURITY_ENABLED
# MM_SECURITY_USER_MINIMYTH_UID
# MM_SECURITY_USER_MINIMYTH_GID
# MM_SECURITY_FETCH_CREDENTIALS_CIFS
# MM_SECURITY_FETCH_CA_BUNDLE_CRT
################################################################################
#MM_SECURITY_ENABLED='yes'
#MM_SECURITY_FETCH_CREDENTIALS_CIFS='yes'
#MM_SECURITY_FETCH_CA_BUNDLE_CRT='yes'
################################################################################
# Firmware configuration variables.
#
# MM_FIRMWARE_FILE_LIST
################################################################################ 
################################################################################
# ACPI configuration variables.
#
# MM_ACPI_EVENT_BUTTON_POWER
# MM_ACPI_VIDEO_FLAGS
################################################################################
################################################################################
# CPU configuration variables.
#
# MM_CPU_FREQUENCY_GOVERNOR
# MM_CPU_FETCH_MICROCODE_DAT
################################################################################
#MM_CPU_FREQUENCY_GOVERNOR='userspace'
################################################################################
# Audio configuration variables.
#
# MM_AUDIO_TYPE
# MM_AUDIO_CARD_NUMBER
# MM_AUDIO_DEVICE_NUMBER
# MM_AUDIO_GAIN
# MM_AUDIO_FETCH_ASOUND_CONF
# MM_AUDIO_FETCH_ASOUND_STATE
################################################################################
#MM_AUDIO_TYPE='digital'
################################################################################
# Video configuration variables.
#
# MM_VIDEO_ASPECT_RATIO
# MM_VIDEO_DECODER
# MM_VIDEO_DEINTERLACER
# MM_VIDEO_FONT_SCALE
# MM_VIDEO_PLAYBACK_PROFILE
# MM_VIDEO_RESIZE_ENABLED
################################################################################
MM_VIDEO_ASPECT_RATIO='16:9'
MM_VIDEO_DEINTERLACER='auto'
MM_VIDEO_DECODER='xvmc-vld'
MM_VIDEO_PLAYBACK_PROFILE='epia' 
################################################################################
# X configuration variables.
#
# MM_X_ENABLED
# MM_X_DRIVER
# MM_X_RESTART_ON_SLEEP_ENABLED
# MM_X_WM_ENABLED
# MM_X_VNC_ENABLED
# MM_X_SCREENSAVER
# MM_X_SCREENSAVER_TIMEOUT
# MM_X_SCREENSAVER_HACK
# MM_X_MYTH_PROGRAM
# MM_X_OUTPUT_HDMI
# MM_X_OUTPUT_DVI
# MM_X_OUTPUT_VGA
# MM_X_OUTPUT_TV
# MM_X_TV_TYPE
# MM_X_TV_OUTPUT
# MM_X_TV_OVERSCAN
# MM_X_SYNC
# MM_X_REFRESH
# MM_X_RESOLUTION
# MM_X_MODELINE
# MM_X_MODE
# MM_X_MODELINE_0
# MM_X_MODELINE_1
# MM_X_MODELINE_2
# MM_X_MODE_0
# MM_X_MODE_1
# MM_X_MODE_2
# MM_X_HACK_HIDE_BLUE_LINE_ENABLED
# MM_X_FETCH_XINITRC
# MM_X_FETCH_XMODMAPRC
# MM_X_FETCH_XORG_CONF
################################################################################
MM_X_DRIVER='openchome'
MM_X_MODE='848x480Over'
MM_X_VNC_ENABLED='yes' 
MM_X_OUTPUT_VGA='auto'
MM_X_OUTPUT_TV='auto'
MM_X_TV_TYPE='PAL'
MM_X_TV_OUTPUT='Composite' 
################################################################################
# Font configuration variables.
#
# MM_FONT_FILE_TTF_ADD
# MM_FONT_FILE_TTF_DELETE
################################################################################ 
################################################################################
# Myth master backend communication configuration variables.
#
# MM_MASTER_SERVER
# MM_MASTER_DBUSERNAME
# MM_MASTER_DBPASSWORD
# MM_MASTER_DBNAME
# MM_MASTER_WOL_ENABLED
# MM_MASTER_WOL_MAC
# MM_MASTER_WOLSQLRECONNECTWAITTIME
# MM_MASTER_WOLSQLCONNECTRETRY
# MM_MASTER_WOLSQLCOMMAND
# MM_MASTER_WOL_ADDITIONAL_DELAY
################################################################################
MM_MASTER_SERVER='192.168.1.90'
################################################################################
# Myth plugin configuration variables.
#
# MM_PLUGIN_INFORMATION_CENTER_ENABLED
# MM_PLUGIN_OPTICAL_DISK_ENABLED
# MM_PLUGIN_BROWSER_ENABLED
# MM_PLUGIN_DVD_ENABLED
# MM_PLUGIN_GALLERY_ENABLED
# MM_PLUGIN_GAME_ENABLED
# MM_PLUGIN_MUSIC_ENABLED
# MM_PLUGIN_NEWS_ENABLED
# MM_PLUGIN_PHONE_ENABLED
# MM_PLUGIN_STREAM_ENABLED
# MM_PLUGIN_VIDEO_ENABLED
# MM_PLUGIN_WEATHER_ENABLED
# MM_PLUGIN_ZONEMINDER_ENABLED
################################################################################
MM_PLUGIN_OPTICAL_DISK_ENABLED='yes'
MM_PLUGIN_BROWSER_ENABLED='no'
MM_PLUGIN_GALLERY_ENABLED='yes'
MM_PLUGIN_GAME_ENABLED='no'   
MM_PLUGIN_MUSIC_ENABLED='no'  
MM_PLUGIN_NEWS_ENABLED='yes'   
MM_PLUGIN_PHONE_ENABLED='no'  
MM_PLUGIN_STREAM_ENABLED='no' 
MM_PLUGIN_VIDEO_ENABLED='yes' 
MM_PLUGIN_WEATHER_ENABLED='yes'
MM_PLUGIN_ZONEMINDER_ENABLED='no'
################################################################################
# Extras directory configuration variables.
#
# MM_EXTRAS_URL
################################################################################ 
################################################################################
# CODECs directory configuration variables.
#
# MM_CODECS_URL
################################################################################
MM_CODECS_URL="auto" 
################################################################################
# Adobe Flash Player configuration variables.
#
# MM_FLASH_URL
################################################################################
################################################################################
# Hulu Desktop configuration variables.
#
# MM_HULU_URL
# MM_HULU_REMOTE
# MM_HULU_STORE_HULUDESKTOP_DATA
################################################################################
################################################################################
# Theme configuration variables.
#
# MM_THEME_NAME
# MM_THEMEOSD_NAME
# MM_THEME_URL
# MM_THEMEOSD_URL
# MM_THEMECACHE_URL
# MM_THEME_FILE_MENU_ADD
################################################################################
#MM_THEMEOSD_NAME='Titivillus-OSD'
#MM_THEME_NAME='MythCenter-wide'
#MM_THEMEOSD_NAME='Retro-OSD' 
MM_THEME_NAME='metallurgy'
#MM_THEME_NAME='Arclight' 
#MM_THEME_NAME='metallurgy'
MM_THEMEOSD_NAME='BlackCurves-OSD'
MM_THEME_URL='auto'
MM_THEMEOSD_URL='auto'
MM_THEMECACHE_URL='auto'
################################################################################
# Remote media directory configuration variables.
#
# MM_MEDIA_TV_MOUNTPOINT
# MM_MEDIA_TV_URL
# MM_MEDIA_GALLERY_MOUNTPOINT
# MM_MEDIA_GALLERY_URL
# MM_MEDIA_GAME_MOUNTPOINT
# MM_MEDIA_GAME_URL
# MM_MEDIA_MUSIC_MOUNTPOINT
# MM_MEDIA_MUSIC_URL
# MM_MEDIA_VIDEO_MOUNTPOINT
# MM_MEDIA_VIDEO_URL
# MM_MEDIA_DVD_RIP_MOUNTPOINT
# MM_MEDIA_DVD_RIP_URL
# MM_MEDIA_GENERIC_LIST
################################################################################
#MM_MEDIA_GALLERY_URL="cifs://${MM_TFTP_SERVER}/pictures?credentials=/etc/cifs/credentials_cifs"
#MM_MEDIA_GAME_URL="cifs://${MM_TFTP_SERVER}/games?credentials=/etc/cifs/credentials_cifs"
#MM_MEDIA_MUSIC_URL="cifs://${MM_TFTP_SERVER}/music?credentials=/etc/cifs/credentials_cifs"
#MM_MEDIA_VIDEO_URL="cifs://${MM_TFTP_SERVER}/videos?credentials=/etc/cifs/credentials_cifs"
#MM_MEDIA_DVD_RIP_URL="nfs://${MM_TFTP_SERVER}/home/public/minimyth/themecache"
MM_MEDIA_GALLERY_URL="nfs://mythtv:mythtv@192.168.1.90/storage/pictures"
MM_MEDIA_VIDEO_URL="cifs://mythtv:mythtv@192.168.1.90/storage/videos"
MM_MEDIA_DVD_RIP_URL="cifs://mythtv:mythtv@192.168.1.90/storage/temp"
################################################################################
# Game configuration variables.
#
# MM_GAME_SAVE_ENABLED
# MM_GAME_SAVE_LIST
# MM_GAME_BIOS_ROOT
# MM_GAME_GAME_ROOT
################################################################################ 
################################################################################
# Bluetooth configuration variables.
#
# MM_BLUETOOTH_DEVICE_LIST
################################################################################ 
################################################################################
# Wii remote control configuration variables.
#
# MM_WIIMOTE_ADDRESS_0
# MM_WIIMOTE_ADDRESS_1
# MM_WIIMOTE_ADDRESS_2
# MM_WIIMOTE_ADDRESS_3
################################################################################ 
################################################################################
# LIRC configuration variables.
#
# MM_LIRC_AUTO_ENABLED
# MM_LIRC_DEVICE_BLACKLIST
# MM_LIRC_DRIVER
# MM_LIRC_DEVICE
# MM_LIRC_KERNEL_MODULE
# MM_LIRC_KERNEL_MODULE_OPTIONS
# MM_LIRC_IREXEC_ENABLED
# MM_LIRC_IRXEVENT_ENABLED
# MM_LIRC_IRXKEYS_ENABLED
# MM_LIRC_SLEEP_ENABLED
# MM_LIRC_WAKEUP_ENABLED
# MM_LIRC_FETCH_LIRCD_CONF
# MM_LIRC_FETCH_LIRCMD_CONF
# MM_LIRC_FETCH_LIRCRC
# MM_LIRC_FETCH_LIRCRC_MINIMYTH
# MM_LIRC_FETCH_LIRCRC_MYTHTV
# MM_LIRC_FETCH_LIRCRC_MPLAYER
# MM_LIRC_FETCH_LIRCRC_VLC
# MM_LIRC_FETCH_LIRCRC_XINE
################################################################################
MM_LIRC_DRIVER='lirc_serial'
#MM_LIRC_DEVICE='/dev/lirc0'
MM_LIRC_KERNEL_MODULE='lirc_serial'
MM_LIRC_KERNEL_MODULE_OPTIONS='irq=4 io=0x3f8'
MM_LIRC_FETCH_LIRCD_CONF='yes'
#MM_LIRC_FETCH_LIRCRC='yes'
MM_LIRC_FETCH_LIRCRC_MYTHTV='yes'
MM_LIRC_FETCH_LIRCRC_VLC='yes'
MM_LIRC_FETCH_LIRCRC_XINE='yes' 
################################################################################
# LCDPROC configuration variables.
#
# MM_LCDPROC_DRIVER
# MM_LCDPROC_DEVICE
# MM_LCDPROC_KERNEL_MODULE
# MM_LCDPROC_KERNEL_MODULE_OPTIONS
# MM_LCDPROC_FETCH_LCDD_CONF
################################################################################ 
################################################################################
# External equipment control configuration variables.
#
# MM_EXTERNAL_POWER_OFF
# MM_EXTERNAL_POWER_ON
# MM_EXTERNAL_VOLUME_DOWN
# MM_EXTERNAL_VOLUME_UP
# MM_EXTERNAL_VOLUME_MUTE
# MM_EXTERNAL_AQUOS_ENABLED
# MM_EXTERNAL_AQUOS_DEVICE
# MM_EXTERNAL_AQUOS_PORT
# MM_EXTERNAL_AQUOS_POWER_ENABLED
# MM_EXTERNAL_AQUOS_VOLUME_ENABLED
# MM_EXTERNAL_AQUOS_INPUT
################################################################################
#MM_EXTERNAL_POWER_OFF='
#	/usr/bin/irsend <television> KEY_POWEROFF ;
#	/usr/bin/irsend <receiver> KEY_POWEROFF'
#MM_EXTERNAL_POWER_ON='
#	/usr/bin/irsend <television> KEY_POWERON ;
#	/usr/bin/irsend <receiver> KEY_POWERON'
#MM_EXTERNAL_VOLUME_DOWN='
#	/usr/bin/irsend <receiver> KEY_VOLUMEDOWN'
#MM_EXTERNAL_VOLUME_UP='
#	/usr/bin/irsend <receiver> KEY_VOLUMEUP'
#MM_EXTERNAL_VOLUME_MUTE='
#	/usr/bin/irsend <receiver> KEY_MUTE'
################################################################################
# SSH server configuration variables.
#
# MM_SSH_SERVER_ENABLED
################################################################################
#MM_SSH_SERVER_ENABLED='yes'
################################################################################
# Cron configuration variables.
#
# MM_CRON_FETCH_CRONTAB
################################################################################
################################################################################
# Slave backend configuration variables.
#
# MM_BACKEND_ENABLED
# MM_BACKEND_DEBUG_LEVEL
################################################################################
################################################################################
# MiniMyth direct Myth database configuration variables.
#
# MM_MYTHDB_JUMPPOINTS_{key}
# MM_MYTHDB_KEYBINDINGS_{key}
# MM_MYTHDB_SETTINGS_{key}
################################################################################
#MM_MYTHDB_JUMPPOINTS_MythGallery='MythGallery~Alt+G'
#MM_MYTHDB_JUMPPOINTS_Play_music='Play music~Alt+M'
#MM_MYTHDB_JUMPPOINTS_MythStream='MythStream~Alt+S'
#MM_MYTHDB_JUMPPOINTS_TV_Recording_Playback='TV Recording Playback~Alt+T'
#MM_MYTHDB_JUMPPOINTS_MythVideo='MythVideo~Alt+V'
#MM_MYTHDB_KEYBINDINGS_Music_FFWD='Music~FFWD~)'
#MM_MYTHDB_KEYBINDINGS_Music_RWND='Music~RWND~('
#MM_MYTHDB_KEYBINDINGS_Stream_FULLSCREEN='Stream~FULLSCREEN~W'
#MM_MYTHDB_KEYBINDINGS_TV_Playback_SEEKFFWD='TV Playback~SEEKFFWD~),Right'
#MM_MYTHDB_KEYBINDINGS_TV_Playback_SEEKRWND='TV Playback~SEEKRWND~(,Left'
#MM_MYTHDB_SETTINGS_GalleryMoviePlayerCmd='GalleryMoviePlayerCmd~xine -pfhq --no-splash --loop=loop'
#MM_MYTHDB_SETTINGS_VCDPlayerCommand='VCDPlayerCommand~xine -pfhq --no-splash  --loop=loop vcd://'
#MM_MYTHDB_SETTINGS_VideoDefaultPlayer='VideoDefaultPlayer~xine -pfhq --no-splash --loop=loop'