From 30bb8137939abfd690697bc64f7f3dd9bd9955ac Mon Sep 17 00:00:00 2001
From: Michael Shigorin <mike@altlinux.org>
Date: Thu, 16 Sep 2010 13:01:32 +0300
Subject: [PATCH] initial groups support/selection

...along with obituary fixes.
---
 distro.mk                            |  3 +++
 image.in/Makefile                    |  6 ++---
 image.in/functions.mk                |  2 ++
 pkg.in/Makefile                      |  4 +++-
 pkg.in/groups/Makefile               | 11 ++++++++++
 pkg.in/groups/dhcp-server.directory  |  9 ++++++++
 pkg.in/groups/diag-tools.directory   |  9 ++++++++
 pkg.in/groups/dns-server.directory   |  9 ++++++++
 pkg.in/groups/ftp-server.directory   |  9 ++++++++
 pkg.in/groups/http-server.directory  |  9 ++++++++
 pkg.in/groups/ipmi.directory         |  9 ++++++++
 pkg.in/groups/kvm-server.directory   |  9 ++++++++
 pkg.in/groups/mail-server.directory  |  9 ++++++++
 pkg.in/groups/monitoring.directory   |  9 ++++++++
 pkg.in/groups/mysql-server.directory |  9 ++++++++
 pkg.in/lists/Makefile                |  4 +++-
 pkg.in/lists/dhcp-server             |  1 +
 pkg.in/lists/diag-tools              | 11 ++++++++++
 pkg.in/lists/dns-server              |  3 +++
 pkg.in/lists/ftp-server              |  2 ++
 pkg.in/lists/http-server             | 33 ++++++++++++++++++++++++++++
 pkg.in/lists/ipmi                    |  4 ++++
 pkg.in/lists/kvm-server              |  4 ++++
 pkg.in/lists/mail-server             |  2 ++
 pkg.in/lists/monitoring              | 18 +++++++++++++++
 pkg.in/lists/mysql-server            |  6 +++++
 sub.in/main/Makefile                 |  5 +++--
 27 files changed, 202 insertions(+), 7 deletions(-)
 create mode 100644 pkg.in/groups/Makefile
 create mode 100644 pkg.in/groups/dhcp-server.directory
 create mode 100644 pkg.in/groups/diag-tools.directory
 create mode 100644 pkg.in/groups/dns-server.directory
 create mode 100644 pkg.in/groups/ftp-server.directory
 create mode 100644 pkg.in/groups/http-server.directory
 create mode 100644 pkg.in/groups/ipmi.directory
 create mode 100644 pkg.in/groups/kvm-server.directory
 create mode 100644 pkg.in/groups/mail-server.directory
 create mode 100644 pkg.in/groups/monitoring.directory
 create mode 100644 pkg.in/groups/mysql-server.directory
 create mode 100644 pkg.in/lists/dhcp-server
 create mode 100644 pkg.in/lists/diag-tools
 create mode 100644 pkg.in/lists/dns-server
 create mode 100644 pkg.in/lists/ftp-server
 create mode 100644 pkg.in/lists/http-server
 create mode 100644 pkg.in/lists/ipmi
 create mode 100644 pkg.in/lists/kvm-server
 create mode 100644 pkg.in/lists/mail-server
 create mode 100644 pkg.in/lists/monitoring
 create mode 100644 pkg.in/lists/mysql-server

diff --git a/distro.mk b/distro.mk
index 896b70d8..d8edc6d6 100644
--- a/distro.mk
+++ b/distro.mk
@@ -47,6 +47,9 @@ distro/server-light: distro/server-base use/hdt
 	$(call set,BRANDING,sisyphus-server-light)
 	$(call add,DISK_LISTS,kernel-wifi)
 	$(call add,BASE_LISTS,$(call tags,base server))
+	$(call add,GROUPS,dns-server http-server ftp-server kvm-server)
+	$(call add,GROUPS,ipmi mysql-server dhcp-server mail-server)
+	$(call add,GROUPS,monitoring diag-tools)
 
 # FIXME: this belongs to bootsplash feature
 #use/bootsplash:
diff --git a/image.in/Makefile b/image.in/Makefile
index 6ee62bac..f04fdbb7 100644
--- a/image.in/Makefile
+++ b/image.in/Makefile
@@ -27,11 +27,11 @@ disk-info:
 	@[ -s files/.disk/commit ] || rm files/.disk/commit
 
 # see also alterator-pkg (backend3/pkg-install)
-# FIXME: groups unmerged, and only .base hardwired in
+# FIXME: if we copy --as-needed, maybe just tar . ?
 metadata:
 	@mkdir -p files/Metadata
 	@rm -f files/Metadata/pkg-groups.tar
-	@tar -cvf files/Metadata/pkg-groups.tar \
+	tar -cvf files/Metadata/pkg-groups.tar \
 		-C $(PKGDIR) \
-		$(shell echo $(call list,.base) | sed 's,$(PKGDIR)/*,,g')
+		$$(echo $(call list,.base) $(call list,$(GROUPS)) $(call group,$(GROUPS)) | sed 's,$(PKGDIR)/*,,g')
 
diff --git a/image.in/functions.mk b/image.in/functions.mk
index 4567b282..b02da3ff 100644
--- a/image.in/functions.mk
+++ b/image.in/functions.mk
@@ -3,3 +3,5 @@ PKGDIR=$(GLOBAL_BUILDDIR)/pkg
 # prefix pkglist name with its directory to form a path
 list = $(1:%=$(PKGDIR)/lists/%)
 
+# prefix/suffix group name to form a path
+group = $(1:%=$(PKGDIR)/groups/%.directory)
diff --git a/pkg.in/Makefile b/pkg.in/Makefile
index efeb63b1..d21ff8d3 100644
--- a/pkg.in/Makefile
+++ b/pkg.in/Makefile
@@ -1,2 +1,4 @@
 all:
-	$(MAKE) -C lists BUILDDIR=$(BUILDDIR)
+	for dir in lists groups; do \
+		$(MAKE) -C $$dir BUILDDIR=$(BUILDDIR); \
+	done
diff --git a/pkg.in/groups/Makefile b/pkg.in/groups/Makefile
new file mode 100644
index 00000000..fc25ff63
--- /dev/null
+++ b/pkg.in/groups/Makefile
@@ -0,0 +1,11 @@
+# copy package lists referenced in distro configuration
+# over to build dir
+
+include $(BUILDDIR)/.config.mk
+
+all: debug
+	@mkdir -p $(BUILDDIR)/pkg/groups \
+	&& cp -at $(BUILDDIR)/pkg/groups/ -- $(addsuffix .directory,$(GROUPS))
+
+debug:
+	@echo "** GROUPS: $(GROUPS)"
diff --git a/pkg.in/groups/dhcp-server.directory b/pkg.in/groups/dhcp-server.directory
new file mode 100644
index 00000000..073b8f8a
--- /dev/null
+++ b/pkg.in/groups/dhcp-server.directory
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=Directory
+Name=DHCP Server
+X-Alterator-PackageList=dhcp-server
+X-Alterator-Required=no
+Name[ru_RU]=Сервер DHCP
+Categories=Server;Networking
+
diff --git a/pkg.in/groups/diag-tools.directory b/pkg.in/groups/diag-tools.directory
new file mode 100644
index 00000000..051b4690
--- /dev/null
+++ b/pkg.in/groups/diag-tools.directory
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=Directory
+Name=Diagnostic tools
+X-Alterator-PackageList=diag-tools
+X-Alterator-Required=no
+Name[ru_RU]=Утилиты для диагностики
+Categories=Server;Diagnostics
+# NB: as the list may expand, skip adding Networking
diff --git a/pkg.in/groups/dns-server.directory b/pkg.in/groups/dns-server.directory
new file mode 100644
index 00000000..bd5c8a09
--- /dev/null
+++ b/pkg.in/groups/dns-server.directory
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=Directory
+Name=DNS Server
+X-Alterator-PackageList=dns-server
+X-Alterator-Required=no
+Name[ru_RU]=Сервер DNS
+Categories=Server;Networking
+
diff --git a/pkg.in/groups/ftp-server.directory b/pkg.in/groups/ftp-server.directory
new file mode 100644
index 00000000..3d603387
--- /dev/null
+++ b/pkg.in/groups/ftp-server.directory
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=Directory
+Name=FTP Server
+X-Alterator-PackageList=ftp-server
+X-Alterator-Required=no
+Name[ru_RU]=Сервер ftp
+Categories=Server;Networking
+
diff --git a/pkg.in/groups/http-server.directory b/pkg.in/groups/http-server.directory
new file mode 100644
index 00000000..0497df4e
--- /dev/null
+++ b/pkg.in/groups/http-server.directory
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=Directory
+Name=HTTP Server (Apache2,PHP)
+X-Alterator-PackageList=http-server
+X-Alterator-Required=no
+Name[ru_RU]=Сервер HTTP (Apache2,PHP)
+Categories=Server;Networking
+
diff --git a/pkg.in/groups/ipmi.directory b/pkg.in/groups/ipmi.directory
new file mode 100644
index 00000000..752ff8ac
--- /dev/null
+++ b/pkg.in/groups/ipmi.directory
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=Directory
+Name=IPMI tools
+X-Alterator-PackageList=ipmi
+X-Alterator-Required=no
+Name[ru_RU]=Утилиты для поддержки IPMI
+Categories=Server;IPMI
+
diff --git a/pkg.in/groups/kvm-server.directory b/pkg.in/groups/kvm-server.directory
new file mode 100644
index 00000000..a3ed095c
--- /dev/null
+++ b/pkg.in/groups/kvm-server.directory
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=Directory
+Name=Virtualization over kvm
+X-Alterator-PackageList=kvm-server
+X-Alterator-Required=no
+Name[ru_RU]=Сервер виртуализации kvm
+Categories=Server;Virtualization
+
diff --git a/pkg.in/groups/mail-server.directory b/pkg.in/groups/mail-server.directory
new file mode 100644
index 00000000..94e25f02
--- /dev/null
+++ b/pkg.in/groups/mail-server.directory
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=Directory
+Name=Mail Server  (SMTP, IMAP, POP3)
+X-Alterator-PackageList=mail-server
+X-Alterator-Required=no
+Name[ru_RU]=Почтовый сервер (SMTP, IMAP, POP3)
+Categories=Server;Networking
+
diff --git a/pkg.in/groups/monitoring.directory b/pkg.in/groups/monitoring.directory
new file mode 100644
index 00000000..d9211ecb
--- /dev/null
+++ b/pkg.in/groups/monitoring.directory
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=Directory
+Name=Monitoring
+X-Alterator-PackageList=monitoring
+X-Alterator-Required=no
+Name[ru_RU]=Средства мониторинга системы
+Categories=Server;Monitoring
+
diff --git a/pkg.in/groups/mysql-server.directory b/pkg.in/groups/mysql-server.directory
new file mode 100644
index 00000000..0cda3f51
--- /dev/null
+++ b/pkg.in/groups/mysql-server.directory
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Encoding=UTF-8
+Type=Directory
+Name=MySQL Server
+X-Alterator-PackageList=mysql-server
+X-Alterator-Required=no
+Name[ru_RU]=Сервер MySQL
+Categories=Server;Networking
+
diff --git a/pkg.in/lists/Makefile b/pkg.in/lists/Makefile
index 16a0daf4..a7502650 100644
--- a/pkg.in/lists/Makefile
+++ b/pkg.in/lists/Makefile
@@ -10,7 +10,7 @@ all: prep debug
 		$(if $(filter environment% file,$(origin $V)),\
 			$(shell cp --parents -at $(BUILDDIR)/pkg/lists/ \
 				-- $(value $V))))
-	@cp -a .base $(BUILDDIR)/pkg/lists/
+	@cp -a .base $(GROUPS) $(BUILDDIR)/pkg/lists/
 
 # moving this into 'all' spoils execution order (clobbers results)
 prep:
@@ -24,3 +24,5 @@ debug:
 		$(filter %_LISTS,$(sort $(.VARIABLES))), \
 		$(if $(filter environment% file,$(origin $V)),\
 			$(warning $V=$(value $V))))
+	@echo "** LISTS: -- see above"
+	@echo "** GROUPS: $(GROUPS)"
diff --git a/pkg.in/lists/dhcp-server b/pkg.in/lists/dhcp-server
new file mode 100644
index 00000000..00e2bede
--- /dev/null
+++ b/pkg.in/lists/dhcp-server
@@ -0,0 +1 @@
+dhcp-server
diff --git a/pkg.in/lists/diag-tools b/pkg.in/lists/diag-tools
new file mode 100644
index 00000000..cdad706a
--- /dev/null
+++ b/pkg.in/lists/diag-tools
@@ -0,0 +1,11 @@
+# diagnostic tools (see also disk-server-light.in)
+dsniff
+iftop
+lft
+mtr
+nmap
+scanssh
+tcptraceroute
+telnet
+whois
+
diff --git a/pkg.in/lists/dns-server b/pkg.in/lists/dns-server
new file mode 100644
index 00000000..c0b6b7b2
--- /dev/null
+++ b/pkg.in/lists/dns-server
@@ -0,0 +1,3 @@
+bind
+bind-control
+bind-utils
diff --git a/pkg.in/lists/ftp-server b/pkg.in/lists/ftp-server
new file mode 100644
index 00000000..6d98aa51
--- /dev/null
+++ b/pkg.in/lists/ftp-server
@@ -0,0 +1,2 @@
+vsftpd
+xinetd
diff --git a/pkg.in/lists/http-server b/pkg.in/lists/http-server
new file mode 100644
index 00000000..c44848ea
--- /dev/null
+++ b/pkg.in/lists/http-server
@@ -0,0 +1,33 @@
+apache2
+apache2-mod_php5
+php5
+php5-cgi
+php5-curl
+php5-dba
+php5-dbase
+php5-dom
+php5-eaccelerator
+php5-exif
+php5-facedetect
+php5-fileinfo
+php5-gd2
+php5-imagick2
+php5-imap
+php5-ldap
+php5-mbstring
+php5-mcrypt
+php5-memcache
+php5-mhash
+php5-mime_magic
+php5-mysql
+php5-pgsql
+php5-rrdtool
+php5-suhosin
+php5-xmlrpc
+php5-xsl
+php5-zip
+MySQL-bench
+MySQL-client
+MySQL-htmlhelp
+MySQL-server-perl
+
diff --git a/pkg.in/lists/ipmi b/pkg.in/lists/ipmi
new file mode 100644
index 00000000..ca791906
--- /dev/null
+++ b/pkg.in/lists/ipmi
@@ -0,0 +1,4 @@
+freeipmi-bmc-watchdog
+ipmitool
+freeipmi-doc
+freeipmi
diff --git a/pkg.in/lists/kvm-server b/pkg.in/lists/kvm-server
new file mode 100644
index 00000000..dea0895a
--- /dev/null
+++ b/pkg.in/lists/kvm-server
@@ -0,0 +1,4 @@
+kvm
+qemu
+libvirt
+mkve
diff --git a/pkg.in/lists/mail-server b/pkg.in/lists/mail-server
new file mode 100644
index 00000000..4aa65f37
--- /dev/null
+++ b/pkg.in/lists/mail-server
@@ -0,0 +1,2 @@
+dovecot
+postfix-dovecot
diff --git a/pkg.in/lists/monitoring b/pkg.in/lists/monitoring
new file mode 100644
index 00000000..16d849a1
--- /dev/null
+++ b/pkg.in/lists/monitoring
@@ -0,0 +1,18 @@
+monit
+
+# pull in subpackages which shouldn't toss
+# lots of extra dependencies into an image
+collectd
+collectd-apache
+collectd-bind
+collectd-cgi
+collectd-curl
+collectd-dbi
+collectd-ipmi
+collectd-libvirt
+collectd-mysql
+collectd-nginx
+collectd-openvz
+collectd-ping
+collectd-rrdtool
+collectd-sensors
diff --git a/pkg.in/lists/mysql-server b/pkg.in/lists/mysql-server
new file mode 100644
index 00000000..1c6d69e9
--- /dev/null
+++ b/pkg.in/lists/mysql-server
@@ -0,0 +1,6 @@
+MySQL-bench
+MySQL-client
+MySQL-server
+MySQL-htmlhelp
+MySQL-server-perl
+
diff --git a/sub.in/main/Makefile b/sub.in/main/Makefile
index e5938ba3..ef62842d 100644
--- a/sub.in/main/Makefile
+++ b/sub.in/main/Makefile
@@ -10,18 +10,19 @@ include $(GLOBAL_BUILDDIR)/.config.mk
 CHROOT_PACKAGES = apt-utils rsync
 PACKAGES_EXPAND_METHOD=regexp
 
+# TODO: map() list() onto these
 IMAGE_PACKAGES = $(call list,.base) \
 		 $(COMMON_PACKAGES) \
 		 $(MAIN_PACKAGES) \
 		 $(call list,$(BASE_LISTS)) \
-		 $(call list,$(DISK_LISTS))
+		 $(call list,$(DISK_LISTS)) \
+		 $(call list,$(GROUPS))
 
 MKI_DESTDIR = ALTLinux/RPMS.main
 MKI_PACK_RESULTS = data
 
 include $(MKIMAGE_PREFIX)/targets.mk
 
-# TODO: pkg groups
 all: debug copy-packages pack-image
 
 debug:
-- 
2.24.1