aboutsummaryrefslogtreecommitdiff
blob: ba7060ac80ef6137e3d96a1c7dc357be0989f72b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# Copyright 1999-2005 Gentoo Foundation
# This source code is distributed under the terms of version 2 of the GNU
# General Public License as published by the Free Software Foundation, a copy
# of which can be found in the main directory of this project.

import gtk
import gobject
import os
from GLIScreen import *
from gettext import gettext as _

class Panel(GLIScreen):

	title = _("Startup Services")
	_helptext = """
<b><u>Startup Services</u></b>

On this screen, you can select services that you would like to startup at boot. \
Common choices are sshd (remote access) and xdm (graphical login...choose this \
for kdm, gdm, and entrance, as well). Only services that are provided by a \
package you already have installed and are not already in a runlevel are \
displayed.
"""

	def __init__(self, controller):
		GLIScreen.__init__(self, controller)
		vert = gtk.VBox(False, 0)
		vert.set_border_width(10)

#		self.cur_runlevel = "default"
#		self.runlevels = {}
		self.existing_services = []
		for runlevel in os.listdir(self.controller.install_profile.get_root_mount_point() + "/etc/runlevels/"):
#			self.runlevels[runlevel] = os.listdir(self.controller.install_profile.get_root_mount_point() + "/etc/runlevels/" + runlevel)
			for service in os.listdir(self.controller.install_profile.get_root_mount_point() + "/etc/runlevels/" + runlevel):
				self.existing_services.append(service)
		self.new_services = []
		for service in os.listdir(self.controller.install_profile.get_root_mount_point() + "/etc/init.d/"):
			if service.endswith(".sh"): continue
			if not service in self.existing_services:
				self.new_services.append(service)
		self.new_services.sort()

		self.choice_list = {
		  "alsasound": _(u"Loads ALSA modules and restores mixer levels"),
		  "apache": _(u"Common web server (version 1.x)"),
		  "apache2": _(u"Common web server (version 2.x)"),
		  "distccd": _(u"Allows your system to help other systems compile"),
		  "hdparm": _(u"Makes it easy to set drive parameters automatically at boot"),
		  "portmap": _(u"Necessary for mounting NFS shares"),
		  "proftpd": _(u"Common FTP server"),
		  "sshd": _(u"OpenSSH server (allows remote logins)"),
		  "xfs": _(u"X Font Server (available if xorg-x11 compiled with USE=font-server)"),
		  "xdm": _(u"Gives you a graphical login which then starts X")
		}

		self.treedata = gtk.ListStore(gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, gobject.TYPE_STRING)
		self.treeview = gtk.TreeView(self.treedata)
		self.toggle_renderer = gtk.CellRendererToggle()
		self.toggle_renderer.set_property("activatable", True)
		self.toggle_renderer.connect("toggled", self.flag_toggled)
		self.columns = []
		self.columns.append(gtk.TreeViewColumn("", self.toggle_renderer, active=0))
		self.columns.append(gtk.TreeViewColumn("Service", gtk.CellRendererText(), text=1))
		self.columns.append(gtk.TreeViewColumn("Description", gtk.CellRendererText(), text=2))
		for column in self.columns:
#			column.set_resizable(True)
			self.treeview.append_column(column)
		self.treewindow = gtk.ScrolledWindow()
		self.treewindow.set_size_request(-1, 400)
		self.treewindow.set_shadow_type(gtk.SHADOW_IN)
		self.treewindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
		self.treewindow.add(self.treeview)
		vert.pack_start(self.treewindow, expand=False, fill=False, padding=10)

		self.services = self.controller.install_profile.get_services()
		if self.services:
			if isinstance(self.services, str):
				self.services = self.services.split(',')
			else:
				self.services = list(self.services)
		else:
			self.services = []
		self.treedata.clear()
		for service in self.new_services:
			self.treedata.append([(service in self.services), service, self.choice_list.get(service, "")])

		self.add_content(vert)

	def flag_toggled(self, cell, path):
		model = self.treeview.get_model()
		model[path][0] = not model[path][0]
		service = model[path][1]
		if model[path][0]:
			if not service in self.services:
				self.services.append(service)
		else:
			if service in self.services:
				self.services.pop(self.services.index(service))

	def activate(self):
		self.controller.SHOW_BUTTON_BACK    = False
		self.controller.SHOW_BUTTON_FORWARD = True

	def next(self):
		self.controller.install_profile.set_services(None, ",".join(self.services), None)
		progress = ProgressDialog(self.controller, ("set_services", ), self.progress_callback)
		progress.run()

	def progress_callback(self, result, data=None):
		if result == PROGRESS_DONE:
			self.controller.load_screen("OtherSettings")
		else:
			GLIScreen.progress_callback(self, result, data)