Code

Removed old fai stuff
authorcajus <cajus@594d385d-05f5-0310-b6e9-bd551577e9d8>
Mon, 25 Jun 2007 19:07:21 +0000 (19:07 +0000)
committercajus <cajus@594d385d-05f5-0310-b6e9-bd551577e9d8>
Mon, 25 Jun 2007 19:07:21 +0000 (19:07 +0000)
git-svn-id: https://oss.gonicus.de/repositories/gosa/branches/2.5@6683 594d385d-05f5-0310-b6e9-bd551577e9d8

19 files changed:
contrib/fai/README.fai [deleted file]
contrib/fai/get-debconf.sh [deleted file]
contrib/fai/get-packages.pl [deleted file]
contrib/fai/goto-fai/Makefile [deleted file]
contrib/fai/goto-fai/confdir.DEFAULT.source [deleted file]
contrib/fai/goto-fai/debian/README.debian [deleted file]
contrib/fai/goto-fai/debian/changelog [deleted file]
contrib/fai/goto-fai/debian/control [deleted file]
contrib/fai/goto-fai/debian/copyright [deleted file]
contrib/fai/goto-fai/debian/dirs [deleted file]
contrib/fai/goto-fai/debian/postrm [deleted file]
contrib/fai/goto-fai/debian/preinst [deleted file]
contrib/fai/goto-fai/debian/rules [deleted file]
contrib/fai/goto-fai/diversions/setup_harddisks [deleted file]
contrib/fai/goto-fai/faimond [deleted file]
contrib/fai/goto-fai/get_fai_dir [deleted file]
contrib/fai/goto-fai/goto-support.lib [deleted file]
contrib/fai/goto-fai/ldap2fai [deleted file]
contrib/fai/goto-fai/secret [deleted file]

diff --git a/contrib/fai/README.fai b/contrib/fai/README.fai
deleted file mode 100644 (file)
index 89afff5..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-FAI support for GOsa
-====================
-
-Please note, that FAI support is work in progress. Anyway here's a quick
-guide how it works:
-
-1) Preparing FAI
-
- a) adjust the secrets file to match the password of your terminal-admin
-    ldap user
- b) build the debian package in goto-fai (i.e. using dpkg-buidpackage)
- c) add the resulting package to your fai nfs-root
-
-2) Preparing GOsa
-
- a) use the get-packages.pl script to generate a stripped down list of your
-    packages lists, move them to /etc/gosa/fai/servername/dist/.
-
- b) use the get-debconf.sh script to extract the debconf templates from
-    your mirror, move the resulting debconf.d directory to
-       /etc/gosa/fai/servername/dist/debconf.d
-
-3) Create classes/etc in GOsa, follow the ordinary fai documentation to
-   get your clients booted
-
-
diff --git a/contrib/fai/get-debconf.sh b/contrib/fai/get-debconf.sh
deleted file mode 100755 (executable)
index dc7d2ed..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-# Call with:
-# find /path/to/your/debmirror -name \*.deb | xargs ./get-debconf
-# Move result to /etc/gosa/fai/server/debconf.d
-
-[ -d /tmp/debconf.d ] && mkdir /tmp/debconf.d
-for i in $@; do
-    dpkg -e $i /tmp/debconf.d/DEBIAN
-    if [ -f /tmp/debconf.d/DEBIAN/templates ]; then
-       pp=$(basename $i)
-       p=${pp%%_*}
-        echo $p has debconf template
-       mv /tmp/debconf.d/DEBIAN/templates /tmp/debconf.d/$p.templates
-    fi
-done
-
-
diff --git a/contrib/fai/get-packages.pl b/contrib/fai/get-packages.pl
deleted file mode 100755 (executable)
index 7df4194..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-#!/usr/bin/perl
-
-use strict;
-use File::Path;
-use File::Basename;
-
-# Check for parameters
-if ($ARGV[0] eq ""){
-       die ("Usage: parse-pkg <config-file>\n");
-}
-
-# Generate cache
-gen_cache($ARGV[0]);
-exit 0;
-
-#-----------------------------------------------------------------------------
-
-sub gen_cache
-{
-       my ($conffile)= @_;
-       my $line;
-
-       print "Generating GOsa package cache - this may take some time\n";
-       open(CONFIG, "<$conffile") or die("Failed to open '$conffile' - aborted\n");
-       
-       # Read lines
-       while ($line = <CONFIG>){
-               # Unify
-               chop($line);
-               $line =~ s/^\s+//;
-               $line =~ s/^\s+/ /;
-
-               # Strip comments
-               $line =~ s/#.*$//g;
-
-               # Skip empty lines
-               if ($line =~ /^\s*$/){
-                       next;
-               }
-
-               # Interpret deb line
-               if ($line =~ /^deb [^\s]+\s[^\s]+\s[^\s]+/){
-                       my ($baseurl)  = ($line =~ /^deb\s([^\s]+)/);
-                       my ($dist)     = ($line =~ /^deb\s[^\s]+\s([^\s]+)/);
-                       my ($sections) = ($line =~ /^deb\s[^\s]+\s[^\s]+\s(.*)$/);
-                       
-                       my $section;
-                       foreach $section (split(" ", $sections)){
-                               parse_package_info ("$baseurl", "$dist", "$section");
-                       }
-               }
-       }
-
-       close (CONFIG);
-}
-
-#-----------------------------------------------------------------------------
-
-sub parse_package_info
-{
-       my ($baseurl, $dist, $section)= @_;
-       my ($package, $server);
-
-       foreach $package ("Packages.gz"){
-               print ("* trying to retrieve $baseurl/dists/$dist/$section/binary-i386/$package\n");
-       
-               ($server)= ($baseurl =~ /^[^\/]+\/\/([^\/]+)\/.*$/);
-               get_package("$baseurl/dists/$dist/$section/binary-i386/$package", "/etc/gosa/fai/$server/$dist/$section");
-               parse_package("/etc/gosa/fai/$server/$dist/$section");
-               last;
-       }
-}
-
-#-----------------------------------------------------------------------------
-
-sub get_package
-{
-       my ($url, $dest)= @_;
-
-       # This is ugly, but I've no time to take a look at "how it works in perl"
-       system("wget '$url' -O '$dest'");
-       system("gzip -cd '$dest' > '$dest.in'");
-       system("rm -f '$dest'");
-
-       return 0;
-}
-
-#-----------------------------------------------------------------------------
-
-sub parse_package
-{
-       my ($path)= @_;
-       my ($name, $desc, $vers, $sect, $line);
-
-       my $tpath= dirname($path);
-       -d "$tpath" || mkpath "$tpath";
-
-       open(PACKAGES, "<$path.in") or die("Failed to open '$path.in' - aborted\n");
-       open(OUT, ">$path") or die("Failed to open '$path' - aborted\n");
-       
-       # Read lines
-       while ($line = <PACKAGES>){
-               # Unify
-               chop($line);
-
-               # Use empty lines as a trigger
-               if ($line =~ /^\s*$/){
-                       print OUT "$name|$vers|$sect|$desc\n";
-                       next;
-               }
-
-               # Trigger for package name
-               if ($line =~ /^Package:\s/){
-                       ($name)= ($line =~ /^Package: (.*)$/);
-                       next;
-               }
-
-               # Trigger for version
-               if ($line =~ /^Version:\s/){
-                       ($vers)= ($line =~ /^Version: (.*)$/);
-                       next;
-               }
-
-               # Trigger for description
-               if ($line =~ /^Description:\s/){
-                       ($desc)= ($line =~ /^Description: (.*)$/);
-                       next;
-               }
-
-               # Trigger for description
-               if ($line =~ /^Section:\s/){
-                       ($sect)= ($line =~ /^Section: (.*)$/);
-                       next;
-               }
-       }
-
-       close (OUT);
-       close (PACKAGES);
-}
-
diff --git a/contrib/fai/goto-fai/Makefile b/contrib/fai/goto-fai/Makefile
deleted file mode 100644 (file)
index 85756c2..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-all:
-       @echo "Nothing to do for all"
-
-install:
-       mkdir -p $(DESTDIR)/usr/sbin
-       mkdir -p $(DESTDIR)/etc/goto
-       mkdir -p $(DESTDIR)/usr/lib/goto
-       mkdir -p $(DESTDIR)/fai/hooks
-       cp secret $(DESTDIR)/etc/goto
-       cp -a get_fai_dir faimond $(DESTDIR)/usr/sbin
-       cp -a goto-support.lib $(DESTDIR)/usr/lib/goto
-       cp -a ldap2fai $(DESTDIR)/usr/sbin
-       cp confdir.DEFAULT.source $(DESTDIR)/fai/hooks
-       chmod go-rwx $(DESTDIR)/etc/goto/secret
-
-       # Install diversions
-       mkdir -p $(DESTDIR)/usr/lib/fai/sbin
-       cp diversions/setup_harddisks $(DESTDIR)/usr/lib/fai/sbin
-
diff --git a/contrib/fai/goto-fai/confdir.DEFAULT.source b/contrib/fai/goto-fai/confdir.DEFAULT.source
deleted file mode 100755 (executable)
index afed2a2..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-# undef default shell subroutine get_fai_dir
-# instead the new script get_fai_dir will be used
-
-setterm -cursor off >/dev/tty3
-/usr/sbin/faimond >/dev/tty3 & 
-chvt 3
-unset get_fai_dir
-unset sndmon
-
-sndmon() {
-       # send message to monitor daemon
-       [ "$faimond" -eq 0 ] && return 0
-       if [ "$debug" ];then
-               echo "$sndhostname $*" | nc localhost 4711
-       else
-               echo "$sndhostname $*" | nc localhost 4711 2>/dev/null
-       fi
-       return $?
-}
diff --git a/contrib/fai/goto-fai/debian/README.debian b/contrib/fai/goto-fai/debian/README.debian
deleted file mode 100644 (file)
index 584b1da..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-goto-fai for Debian
--------------------
-
-Comments regarding the Package
-
-Cajus Pollmeier <pollmeier@gonicus.de>, Thu, 17 Mar 2005 09:05:17 +0100
diff --git a/contrib/fai/goto-fai/debian/changelog b/contrib/fai/goto-fai/debian/changelog
deleted file mode 100644 (file)
index 905c15e..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-goto-fai (2.0-1) unstable; urgency=low
-
-  * Initial release.
-
- -- Cajus Pollmeier <pollmeier@gonicus.de>  Thu, 17 Mar 2005 09:05:17 +0100
diff --git a/contrib/fai/goto-fai/debian/control b/contrib/fai/goto-fai/debian/control
deleted file mode 100644 (file)
index 1cf6184..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-Source: goto-fai
-Section: lhm/main
-Priority: optional
-Maintainer: Cajus Pollmeier <pollmeier@gonicus.de>
-Standards-Version: 3.6.1
-Build-Depends: debmake
-
-Package: goto-fai
-Architecture: any
-Depends: ${shlibs:Depends}, libnet-ldap-perl, hwdata-knoppix, hwsetup, ddcxinfo-knoppix
-Description: GOto support scripts
- Support and build scripts for terminal server
diff --git a/contrib/fai/goto-fai/debian/copyright b/contrib/fai/goto-fai/debian/copyright
deleted file mode 100644 (file)
index e18fe19..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-This package was debianized by cajus cajus@ots-2.gonicus.local on
-Thu, 17 Mar 2005 09:05:17 +0100.
-
-It was downloaded from <fill in ftp site>
-
-Copyright:
-
-<Must follow here>
diff --git a/contrib/fai/goto-fai/debian/dirs b/contrib/fai/goto-fai/debian/dirs
deleted file mode 100644 (file)
index ca882bb..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-usr/bin
-usr/sbin
diff --git a/contrib/fai/goto-fai/debian/postrm b/contrib/fai/goto-fai/debian/postrm
deleted file mode 100755 (executable)
index 526aaad..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh -e
-
-#DEBHELPER#
-
-if [ "remove" = "$1" ]; then
-       dpkg-divert --package goto-fai --remove --rename \
-               --divert /usr/lib/fai/sbin/setup_harddisks.goto-fai \
-                       /usr/lib/fai/sbin/setup_harddisks
-fi
-
-exit 0
diff --git a/contrib/fai/goto-fai/debian/preinst b/contrib/fai/goto-fai/debian/preinst
deleted file mode 100755 (executable)
index fa469b9..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh -e
-
-#DEBHELPER#
-#
-if [ ! -e /usr/lib/fai/sbin/setup_harddisks.goto-fai ]; then
-       dpkg-divert --package goto-fai --add --rename \
-               --divert /usr/lib/fai/sbin/setup_harddisks.goto-fai \
-               /usr/lib/fai/sbin/setup_harddisks
-fi
-
-exit 0
diff --git a/contrib/fai/goto-fai/debian/rules b/contrib/fai/goto-fai/debian/rules
deleted file mode 100755 (executable)
index 6967ca5..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/make -f
-# Made with the aid of debmake, by Christoph Lameter,
-# based on the sample debian/rules file for GNU hello by Ian Jackson.
-
-package=goto
-
-build:
-       $(checkdir)
-       
-       $(MAKE) CFLAGS="-O2 -g -Wall"
-       touch build
-
-clean:
-       $(checkdir)
-       rm -f build
-       -$(MAKE) clean
-       rm -f `find . -name "*~"`
-       rm -rf debian/tmp debian/files* core debian/substvars
-
-binary-indep: checkroot build
-       $(checkdir)
-# There are no architecture-independent files to be uploaded
-# generated by this package.  If there were any they would be
-# made here.
-
-binary-arch: checkroot build
-       $(checkdir)
-       rm -rf debian/tmp
-       install -d debian/tmp
-       cd debian/tmp && install -d `cat ../dirs`
-       $(MAKE) install DESTDIR=`pwd`/debian/tmp
-# Must have debmake installed for this to work. Otherwise please copy
-# /usr/bin/debstd into the debian directory and change debstd to debian/debstd
-       debstd 
-       dpkg-gencontrol -isp
-       chown -R root:root debian/tmp
-       chmod -R go=rX debian/tmp
-       dpkg --build debian/tmp ..
-
-define checkdir
-       test -f debian/rules
-endef
-
-binary: binary-indep binary-arch
-
-checkroot:
-       $(checkdir)
-       test root = "`whoami`"
-
-.PHONY: binary binary-arch binary-indep clean checkroot
diff --git a/contrib/fai/goto-fai/diversions/setup_harddisks b/contrib/fai/goto-fai/diversions/setup_harddisks
deleted file mode 100755 (executable)
index de1427c..0000000
+++ /dev/null
@@ -1,954 +0,0 @@
-#!/usr/bin/perl
-
-# $Id: setup_harddisks,v 1.41 2005/04/08 10:08:54 lange Exp $
-#*********************************************************************
-#
-# setup_harddisks -- create partitions and filesystems on harddisk
-#
-# This script is part of FAI (Fully Automatic Installation)
-# Copyright (c) 1999, 2000 by ScALE Workgroup, Universitaet zu Koeln
-# Copyright (c) 2000-2005 by Thomas Lange, Uni Koeln
-#
-#*********************************************************************
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; see the file COPYING. If not, write to the
-# Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-# MA 02111-1307, USA.
-#*********************************************************************
-#
-# This program first read the configfiles, partitions and formats the harddisks,
-# produces fstab and FAI-variables-file.  It uses sfdisk, mke2fs, mkswap
-#
-# Parameters:
-# [-X]                     no test, your harddisks will be formated
-#                          default: only test, no real formating
-# [-f<config-filename>]    default: parse classes
-# [-c<class-path>]         default: $FAI/disk_config/
-# [-d]                     default: no DOS alignment
-#
-#---------------------------------------------------
-# Last changes:  31.3.2005 by Thomas Lange add sub mapdisk{}
-# Last changes:  8.11.2004 by Thomas Lange add $devdisklist when calling sfdisk
-# Last changes:   3.2.2004 by Thomas Lange typos
-# Last changes: 14.07.2003 by Thomas Lange add xfs filesystem support
-# Last changes: 23.01.2003 by Thomas Lange print info data to stdout
-# Last changes: 03.12.2002 by Thomas Lange remove ida, cciss stuff. Just match everything
-# Last changes: 27.11.2002 by Thomas Lange allow more that 3 primary partitions
-# Last changes: 14.05.2002 by Thomas Lange use strict
-# Last changes: 04.05.2002 by Thomas Lange use strict
-# Last changes: 29.04.2002 by Thomas Lange add swaplist
-# Last changes: 12.01.2002 by Thomas Lange
-# /dev/ida/ patch 12.01.2002 by Marc Martinez <lastxit+fai@technogeeks.org>
-# Last changes: 9.11.2001 by Thomas Lange
-# reiserfs patch 8.11.2001 by Diane Trout <diane@caltech.edu>
-# Last changes: 25.10.2001 by Thomas Lange
-# Last changes: 09.07.2001 by Thomas Lange
-# Last changes: 04.07.2001 by Thomas Lange
-# Last changes: 06.05.2001 by Thomas Lange
-# Last changes: 09.03.2001 by Thomas Lange
-# Last changes: 05.12.2000 by Thomas Lange
-# Last changes: 03.05.2000 by Thomas Lange
-# Last changes: 03.04.2000 by Mattias Gaertner
-#---------------------------------------------------
-#
-# config-file format:
-#   lines beginning with # are comments
-#
-# "disk_config <device>|first|end"
-#   The disk_config command starts the parsing.
-#   It has to be the first command.
-#    <device> is the harddisk to format in short form like "hda" or "sdc".
-#    if first is used, the first of $ENV{disklist} is used
-#    "end"    = end parsing here
-#   Example: "disk_config hdb"
-#   Example: "disk_config first"
-#
-# Defining one partition:
-# "primary|logical mountpoint|swap|- <size in mb>|preserve<No> [fstab-options][;extraordinary options]"
-#    "primary|logical":
-#      "primary": this are the bootable partitions like the
-#         root directory "/" or the DOS "C:" disk.
-#      "logical": this are all other partitions like a linux
-#         "/var" or a swap partition or a DOS disk.
-#
-#    "mountpoint|swap|-":
-#      "mountpoint": 
-#         This is the mount-point for fstab.
-#         For example "/","/var","/usr". There must not
-#         be a space in the mountpoint.
-#      "swap":
-#         swap-partitions
-#      "-":
-#         do not mount this partition.
-#
-#    "<size in mb>|preserve<No>":
-#      "<size in mb>":
-#        The size of the partition in megabyte
-#         Examples:
-#          "30"     = 30 mb
-#          "10-100" = 10 to 100 mb
-#          "20-"    = minimum of 20 mb
-#          "-500"   = 1 to 500 mb
-#          The megabytes will be rounded up to cylinders.
-#      "preserve<No>":
-#         This is the alternative for the size attribute.
-#         <No> is the partition number. For example
-#         preserve3 for the third partition. If the
-#         <device> was hda then this results in hda3.
-#         The partition will be left unchanged. This
-#         is useful if you have partitions that do not
-#         need re-installation or if you want to have
-#         other operation systems on the device together
-#         with Linux. Extended Partitions can not be preserved.
-#         The bootable flag will not be preserved.
-#         Preserved partitions are mounted readonly during
-#         installation.
-#
-#    "fstab-options":
-#         These options are copied to the fstab-file. The
-#         default is "default"
-#
-#   After the semicolon there could be extra options like:
-#     -i <bytes>   : Bytes per inodes
-#                    (only ext2/3 filesystem)
-#     -m <blocks>% : reserved blocks percentage for superuser
-#                    (only ext2/3 filesystem)
-#     -j          : format in ext3
-#     -c           : check for bad blocks
-#     format       : Always format this partition even if preserve
-#     lazyformat   : Do not format if partition has not moved
-#                    (useful for testing the installation)
-#     boot         : make this partition the boot-partition (the
-#                    linux root filesystem is the default)
-#     ext2         : Extended 2 filesystem (this is the default)
-#     swap         : swap partition
-#     dosfat16     : DOS 16bit FAT file system
-#     winfat32     : Win95 FAT32 file system
-#     writable     : mounts a preserved partition writable
-#     xfs          : xfs
-#     reiser       : reiserfs
-#       -h <hash>  : set reiserfs hash
-#       -v <ver>   : set reiserfs version
-#
-use strict;
-# getopts variables:
-our ($opt_X, $opt_f, $opt_c, $opt_d);
-my $test;
-
-$| = 1;                     # flush always
-
-#****************************************************
-# Variables
-#****************************************************
-
-my $Version = "version 0.35fai";
-
-my $megabyte = 1024 * 1024;    # guess
-# $gigabyte = 1024 * $megabyte;
-my $sectorsize = 512;
-
-# used programs
-my $sfdisk_options = "-q $ENV{sfdisk}";     # be quiet
-my $mke2fs_options = "-q";     # be quiet
-my $mkreiserfs_options = "";
-my $mkxfs_options = "-f";
-my $mkswap_options = "";
-
-# FAI input variables
-my $ClassPath = "$ENV{FAI}/disk_config";# this directory contains the classes
-my $ConfigFileName = "";   # alternative classfile, only for tests
-my $DOS_Alignment = "";    # align partitions for tracks
-
-# FAI output variables
-my $BootPartition = "";    # the boot partition like "hda1"
-my $BOOT_DEVICE = "";      # the root device like "hda" or "sdb"
-my $FAIOutputFile = $ENV{diskvar}; # write output variables to this file
-
-# old partition tables
-my %DiskUnits = ();        # unit size of each disk in sectors
-my %DiskSize = ();         # size of every disk in units
-my %SectorsAlignment = ();  # tracksize in sectors
-my %PartOldBoot = ();      # partition was bootable. "yes"=yes
-my %PartOldStart = ();     # old startunit of partition
-my %PartOldEnd = ();       # old endunit of partition
-my %PartOldStartSec = ();  # old startsector of partition
-my %PartOldEndSec = ();    # old endsector of partition
-my %PartOldID = ();        # old ID of partition
-my %OldNotAligned = (); # "yes" if old partition boundaries are not DOS aligned
-
-# mountpoints  ("/<path>" or "swap<No>" or "no<No>" or "extended<disk>")
-my $NofSwapPart = 0;       # number of swap partitions
-my $NofNotMoPart = 0;      # number of not mountet partitions
-my %DiskMountpoints = ();  # mountpoints of every disk. separated by spaces
-my %MountpointPart = ();   # partition of every mountpoint. e.g. "hda2"
-my %PartMountpoint = ();   # mountpoint of every partition.
-my @swaplist;              # list of all swpa devices
-
-# size of partition/mountpoint
-my %MPMinSize = ();        # minimum size of mountpoint in units
-my %MPMaxSize = ();        # maximum size of mountpoint in units
-my %MPPreserve = ();       # preserve partition: "yes"=yes
-my %MPPrimary = ();        # primary partition: "yes"=yes
-my %MPStart = ();          # start of partition in units
-my %MPSize = ();           # size of partition in units
-my %MPID = ();             # id of partition
-
-# options
-my %MPfstaboptions = ();   # fstab options for every mountpoint
-my %MPOptions = ();        # extra options for every mountpoint
-
-# sfdisk partition tables
-my %sfdiskTables = ();     # partition tables for sfdisk
-
-my $verbose = 0;
-$verbose = $ENV{verbose} if $ENV{verbose};
-
-# Parse command line
-
-use Getopt::Std;
-&getopts('Xf:c:d') || die "
-USAGE: [-X]                     no test, your harddisks will be formated
-                                default: only test, no real formating
-       [-f<config-filename>]    default: parse classes
-       [-c<class-path>]         default: \$FAI/disk_config/
-       [-d]                     default: no DOS alignment
-";
-
-print "setup_harddisks $Version\n";
-if (defined $opt_X){
-    $test = 2;
-} else {
-    print "TEST ONLY - no real formating\n\n";
-    $test = 1;
-}
-$ConfigFileName = $opt_f if $opt_f;# alternative config file
-$ClassPath      = $opt_c if $opt_c;# search classes here
-$DOS_Alignment  = "yes" if $opt_d; # track alignment
-
-# main part
-&GetAllDisks;
-&ParseAllConfigFiles;
-&BuildNewPartTables;
-&PartitionPersfdisk;
-&FormatDisks;
-&WriteFSTab;
-&WriteFAIVariables;
-exit 0;
-#****************************************************
-
-#****************************************************
-# get a partition pathname
-#****************************************************
-sub PartName {
-    my ($disk, $partno) = @_;
-    my $ppath;
-    for ($disk) {
-       /^[a-z]+$/ and $ppath = "${disk}${partno}";
-       /\d$/ and $ppath = "${disk}p${partno}";
-    }
-    return $ppath;
-}
-
-#****************************************************
-# Read all partition tables of this machine
-#****************************************************
-sub GetAllDisks{
-    my $line=""; my $disk=""; my $device=""; my $rest; my $result; my $divi;
-    my $devdisklist="";
-
-    foreach my $device(split(/\s/,$ENV{disklist})){
-      $devdisklist = "$devdisklist /dev/$device";
-    }
-    print "Probing disks: $devdisklist\n";
-    print "Disks found:";
-    $result = `sh -c "LC_ALL=C sfdisk -g -q $devdisklist"`;
-    foreach my $line(split(/\n/,$result)){
-       if($line =~ m'^/dev/(.+?):\s+(\d+)\s+cylinders,\s+(\d+)\s+heads,\s+(\d+)\s+sectors'i){
-           $disk = $1;
-           $DiskUnits{$disk} = $3 * $4;# heads * sectors = cylinder size in sectors
-           $DiskSize{$disk} = $2;      # cylinders
-           ($DOS_Alignment eq "yes") ? ($SectorsAlignment{$disk} = $4) : ($SectorsAlignment{$disk} = 1);
-           print " $disk";
-       }
-    }
-    $result = `sh -c "LC_ALL=C sfdisk -d -q $devdisklist"`;
-    foreach my $line(split(/\n/,$result)){
-#      if($line =~ m'# partition table of /dev/(cciss/c\dd\d|ida/c\dd\d|rd/c\dd\d|[a-z]+)'i){
-# now just match all devices
-       if($line =~ m'# partition table of /dev/(\S+)$'i){
-          $disk = $1;
-        }
-       if($line =~ m#^/dev/(.+?)\s*:\s+start=\s*(\d+),\s+size=\s*(\d+),\s+Id=\s*([a-z0-9]+)\b(.*)$#i){
-           $device = $1;
-            # Sectors
-            $PartOldStartSec{$device} = $2;
-            $PartOldEndSec{$device} = $2 + $3 - 1;
-            # DiskUnits
-           $PartOldStart{$device} = int ($2 / $DiskUnits{$disk});
-           $PartOldEnd{$device} = int (($2 + $3 - 1) / $DiskUnits{$disk});
-           $divi = $2 / $SectorsAlignment{$disk};
-           ($divi != int ($divi)) && ($OldNotAligned{$device} = "yes");
-           $divi = $3 / $SectorsAlignment{$disk};
-           ($divi != int ($divi)) && ($OldNotAligned{$device} = "yes");
-           $PartOldID{$device} = $4;
-           $rest = $5;
-           $PartOldBoot{$device} = ($rest =~ /bootable/) ? "yes" : "";
-       }
-    }
-    print "\n\n";
-}
-
-#****************************************************
-# parse config file or all class files
-#****************************************************
-sub ParseAllConfigFiles{
-    my $ConfigFileExists = 0;  # no config file parsed yet
-    if ($ConfigFileName){
-       # Read config filename
-       &ParseConfigFile($ConfigFileName);
-       $ConfigFileExists = 1;
-    } else {
-       # Read classes
-       foreach my $classfile (reverse split(/\s+/,$ENV{"classes"})){
-           my $filename = "$ClassPath/$classfile";
-           if (($classfile) && (-r $filename)) {
-               &ParseConfigFile($filename);
-               $ConfigFileExists = 1;
-            }
-           ($ConfigFileExists) && last;
-       }
-    }
-    ($ConfigFileExists == 0) && die "ERROR: no config file for setup_harddisk found. Please check you classes and files in disk_config.\n";
-}
-
-#****************************************************
-# map "disk_config first" to real disk device
-#****************************************************
-sub mapdisk {
-
-  my ($disk) = @_;
-  my @dlist = split /\s+/,$ENV{disklist};
-
-  if ($disk eq "disk1") {
-    print "Mapping disk name disk1 to $dlist[0]\n";
-    $disk = $dlist[0];
-  }
-  if ($disk eq "disk2") {
-    print "Mapping disk name disk2 to $dlist[1]\n";
-    $disk = $dlist[1];
-  }
-  return $disk;
-}
-
-#****************************************************
-# parse config-file
-#****************************************************
-sub ParseConfigFile{
-    my $size=""; my $mountpoint=""; my $device ="";
-    my $fstaboptions=""; my $options=""; my $disk=""; my $command = "";
-    my $LogPartNo; my $PrimPartNo; my $NoMoreLogicals;
-    my $LastPresPart; my $extmp; my $Min; my $Max;
-    my $filename = shift;
-    open (FILE,"$filename")
-      || die "config file not found: $filename\n";
-    (print "Using config file: $filename\n");
-    $disk = "";
-    my $a = 1, my $paras ="", my $number=0;
-    while (my $line = <FILE>){
-       chomp($line);
-       $a++;
-       next if( $line =~ /^#|^\s*$/ );
-
-       # disk_config - command
-       if ($line =~ /^disk_config(.*)/i){
-           $paras = $1;
-           if ($paras =~ / end/i){
-               $disk = "";
-           } else {
-#              if($paras =~ m# (/dev/)?(cciss/c\dd\d|ida/c\dd\d|rd/c\dd\d|[a-z]+)#i){
-# now match all devives
-               if($paras =~ m# (/dev/)?(\S+)#i){
-                   $disk = mapdisk($2);
-                   ($DiskMountpoints{$disk})
-                     && die "ERROR: there are more than one configuration of disk $disk.\n";
-                   ($DiskSize{$disk}) || die "ERROR: could not read device /dev/$disk\n";
-                   ($test != 1) || (print "config: $disk\n");
-                   $DiskMountpoints{$disk} = "";
-                   $MPPrimary{"extended$disk"} = "";
-                   $LogPartNo = 4;
-                   $PrimPartNo = 0;
-                   $NoMoreLogicals = 0;
-                   $LastPresPart = "";
-                   $extmp = "extended$disk";
-               } else {
-                   die "SYNTAX ERROR: in config file line $a, unknown disk_config parameter $paras\n$line\n";
-               }
-           }
-       }
-
-       if ($disk){
-           # primary|partition - command
-           if($line =~ /^\s*(primary|logical)\s+(.*)$/i){
-               $command = $1;
-               # split variables
-               $paras = $2;
-               $options = "";
-               if($paras =~ /(.*?)\s*;\s*(.*)$/){
-                   $paras = $1;
-                   $options = $2;
-               }
-               $size="";
-               $mountpoint ="";
-               $fstaboptions = "";
-               ($mountpoint,$size,$fstaboptions)=split(/\s+/,$paras);
-               # mountpoint
-               ($mountpoint =~ m#^/.*|^swap$|^-$#i)
-                 || die "SYNTAX ERROR in config file line $a, mountpoint: $mountpoint\n$line\n";
-               ($MountpointPart{$mountpoint})
-                 && die "SYNTAX ERROR in config file line $a. Mountpoint $mountpoint redefined.\n$line\n";
-               if($mountpoint eq "/"){
-                   ($BootPartition) || ($BOOT_DEVICE = $disk);
-               }
-               if($mountpoint eq "-"){
-                   $NofNotMoPart++;
-                   $mountpoint = "no$NofNotMoPart";
-               }
-               if($mountpoint eq "swap"){
-                   $NofSwapPart++;
-                   $mountpoint = "swap$NofSwapPart";
-                   ($options !~ /\bswap\b/i) && ($options .= " swap");
-                   ($fstaboptions) || ($fstaboptions = "sw");
-               }
-               if($mountpoint =~ m#^/#){
-                   ($fstaboptions) || ($fstaboptions = "defaults");
-               }
-               if ($command eq "primary") {
-                   ($MPPrimary{$extmp} eq "yes") && ($NoMoreLogicals = 1);
-                   $MPPrimary{$mountpoint} = "yes";
-                   $PrimPartNo++;
-#                  ($PrimPartNo == 3) && ($disk =~ /^sd/) && ($PrimPartNo++);
-                    ($PrimPartNo >4 ) && die "ERROR: Too much primary partitions (max 4).".
-                                " All logicals together need one primary too.\n";
-                   $MountpointPart{$mountpoint} = PartName($disk,$PrimPartNo);
-                   if($options =~ /\bboot\b/i){
-                       ($BootPartition) && die "ERROR: only one partition can be bootable at a time.";
-                       $BootPartition = $MountpointPart{$mountpoint};
-                       $BOOT_DEVICE = $disk;
-                   }
-               } else {
-                   ($NoMoreLogicals != 0) && die "ERROR: the logical partitions must be together.\n";
-                   $MPPrimary{$mountpoint} = "";
-                   $LogPartNo++;
-                   $MountpointPart{$mountpoint} = PartName($disk,$LogPartNo);
-                   if (!$MPPrimary{$extmp}){
-                       $MPPreserve{$extmp} = "";
-                       $MPPrimary{$extmp} = "yes";
-                       $MPMinSize{$extmp} = 0;
-                       $MPMaxSize{$extmp} = 0;
-                       $MPID{$extmp} = 5;
-                       $PrimPartNo++;
-                       ($PrimPartNo == 3) && ($disk =~ /^sd/) && ($PrimPartNo++);
-                        ($PrimPartNo >4 ) 
-                         && die "ERROR: too much primary partitions (max 4).".
-                               " All logicals together need one primary too.\n";
-                       $MountpointPart{$extmp} = PartName($disk,$PrimPartNo);
-                       $DiskMountpoints{$disk} .= " $extmp";
-                   }
-#                  ($options =~ /\bboot\b/i) && die "ERROR: line $a, only primary partitions can be bootable.\n";
-               }
-               $DiskMountpoints{$disk} .= " $mountpoint";
-               # size
-               ($size =~ /^preserve\d+$|^\d+\-?\d*$|^-\d+$/i)
-                   || die "SYNTAX ERROR in config file line $a, size: $size\n$line\n";
-               if($size =~ /^preserve(\d+)$/i){
-                   my $number = $1;
-                   $device = PartName($disk,$number);
-                   ($OldNotAligned{$device} eq "yes")
-                     && die "ERROR: unable to preserve partition /dev/$device. Partition is not DOS aligned.";
-                   ($command eq "primary") && ($number != $PrimPartNo)
-                       && die "NUMERATION ERROR in line $a, the number of the partition can not be preserved:\n$line\n";
-                   ($command eq "logical") && ($number != $LogPartNo)
-                       && die "NUMERATION ERROR in line $a, the number of the partition can not be preserved:\n$line\n";
-                   if ($PartOldEnd{$device}){
-                       (($PartOldID{$device} == 5) || ($PartOldID{$device} == 85)) &&
-                         die "ERROR in config file line $a.".
-                              " Extended partitions can not be preserved. /dev/$device\n$line\n";
-                       $MPPreserve{$mountpoint}="yes";
-                       $MPMinSize{$mountpoint} = $PartOldEnd{$device}-$PartOldStart{$device}+1;
-                       $MPMaxSize{$mountpoint} = $MPMinSize{$mountpoint}; # Max=Min
-                       $MPStart{$mountpoint} = $PartOldStart{$device};
-                       $MPSize{$mountpoint} = $MPMinSize{$mountpoint};
-                       $MPID{$mountpoint} = $PartOldID{$device};
-                   } else {
-                       die "ERROR: cannot preserve partition $device. partition not found.$PartOldEnd{$device}\n";
-                   }
-                   if ($LastPresPart) {
-                       ($PartOldStart{$device} < $PartOldStart{$LastPresPart}) &&
-                         die "ERROR: misordered partitions: cannot preserve partitions $LastPresPart and $device\n".
-                              "       in this order because of their positions on disk.";
-                   }
-                   $LastPresPart = $device;
-                   ($MPMinSize{$mountpoint} < 1)
-                     && die "ERROR: unable to preserve partitions of size 0.\n$line\n ";
-                 } else {
-                   # If not preserve we must know the filesystemtype
-                   ($options !~ /\b(ext2|ext3|auto|swap|dosfat16|winfat32|reiser|xfs)\b/i ) && ($options .= " auto");
-                 }
-               if($size =~ /^(\d*)(\-?)(\d*)$/){
-                   $Min = $1;
-                   $Min||= 1;
-                   $Max = $3;
-                   $MPMinSize{$mountpoint} = int (($Min * $megabyte - 1) / ($DiskUnits{$disk} * $sectorsize)) + 1;
-                   if ($2 eq "-"){
-                       if($Max =~ /\d+/){
-                           $MPMaxSize{$mountpoint} = int (($Max * $megabyte - 1) / ($DiskUnits{$disk} * $sectorsize)) + 1;
-                       } else {
-                           $MPMaxSize{$mountpoint} = $DiskSize{$disk};
-                       }
-                   } else {
-                       $MPMaxSize{$mountpoint} = $MPMinSize{$mountpoint}; # Max=Min
-                   }
-                   ($MPMinSize{$mountpoint} > $DiskSize{$disk})
-                     && die "ERROR in config file line $a: Minsize larger than disk.\n$line\n";
-                   ($MPMinSize{$mountpoint} > $MPMaxSize{$mountpoint}) 
-                       && die "SYNTAX ERROR in config file line $a, MIN-MAX-size: $MPMinSize{$mountpoint}-$MPMaxSize{$mountpoint}\n$line\n";
-                   ($MPMinSize{$mountpoint} < 1)
-                     && die "SYNTAX ERROR in config file line $a. Minsize must be greater than 1.\n$line\n";
-                   $MPPreserve{$mountpoint} = "";
-               }
-               # fstaboptions
-               $MPfstaboptions{$mountpoint} = $fstaboptions;
-               # extra options
-               ($options =~ /\b(ext[23]|auto)\b/i) && ($MPID{$mountpoint} = 83); # Linux native
-               ($options =~ /\bswap\b/i) && ($MPID{$mountpoint} = 82); # Linux swap
-               ($options =~ /\bdosfat16\b/i) && ($MPID{$mountpoint} = 6); # DOS FAT 16bit (>=32MB, will be changed later)
-               ($options =~ /\bwinfat32\b/i) && ($MPID{$mountpoint} = "b"); # Win 95 FAT 32
-               $MPOptions{$mountpoint} = $options;
-               if($test == 1){
-                   print "$mountpoint,$MPMinSize{$mountpoint}-$MPMaxSize{$mountpoint},";
-                   print "$fstaboptions,$options";
-                   ($MPPreserve{$mountpoint} eq "yes") && (print " Preserve: $MountpointPart{$mountpoint}");
-                   print "\n";
-               }
-           }
-       }
-    }
-    close(FILE);
-}
-
-#****************************************************
-# Build all partition tables
-#****************************************************
-sub BuildNewPartTables{
-    my ($disk, $mountpoint, $part, $PrimaryMP, $LogicalMP);
-    ($test != 1) || (print "\nBuilding partition tables:\n");
-    # Build PartMountpoint array
-    foreach $disk(keys %DiskMountpoints) {
-       $DiskMountpoints{$disk} =~ s/\s(\s)/$1/g;
-       $DiskMountpoints{$disk} =~ s/^\s//;
-       $DiskMountpoints{$disk} =~ s/\s$//;
-       foreach $mountpoint(split(/\s/,$DiskMountpoints{$disk})) {
-           $PartMountpoint{$MountpointPart{$mountpoint}} = $mountpoint;
-       }
-    }
-    foreach $disk(keys %DiskMountpoints) {
-       &SetPartitionPositions($disk);
-        # change units to sectors
-        foreach $mountpoint(split(/\s/,$DiskMountpoints{$disk})) {
-            if($MPPreserve{$mountpoint} eq "yes"){
-               $MPStart{$mountpoint} = $PartOldStartSec{$MountpointPart{$mountpoint}};
-               $MPSize{$mountpoint} = $PartOldEndSec{$MountpointPart{$mountpoint}} - $MPStart{$mountpoint} + 1;
-           } else {
-               $MPStart{$mountpoint} *= $DiskUnits{$disk};
-               $MPSize{$mountpoint} *= $DiskUnits{$disk};
-               # align first partition for mbr
-               if($MPStart{$mountpoint} == 0){
-                   $MPStart{$mountpoint} += $SectorsAlignment{$disk};
-                   $MPSize{$mountpoint} -= $SectorsAlignment{$disk};
-               }
-           }
-       }
-       # align all logical partitions
-        foreach $mountpoint(split(/\s/,$DiskMountpoints{$disk})) {
-            next if ($MPPrimary{$mountpoint} eq "yes");
-           if ($MountpointPart{$mountpoint} eq "${disk}5") {
-               # partition with number 5 is first logical partition and start of extended partition
-               $MPStart{"extended$disk"} = $MPStart{$mountpoint};
-                ($MPPreserve{$mountpoint} eq "yes") && ($MPStart{"extended$disk"} -= $SectorsAlignment{$disk});
-           }
-            if ($MPPreserve{$mountpoint} ne "yes") {
-               $MPStart{$mountpoint} += $SectorsAlignment{$disk};
-               $MPSize{$mountpoint} -= $SectorsAlignment{$disk};
-           }
-       }
-        &CalculateExtPartSize($disk);
-        # sort mountpoints of partition number
-        $PrimaryMP = "";
-        $LogicalMP = "";
-        foreach $mountpoint(split(/\s/,$DiskMountpoints{$disk})) {
-         ($MPPrimary{$mountpoint} eq "yes") ? ($PrimaryMP .= " $mountpoint") : ($LogicalMP .= " $mountpoint");
-       }
-       $DiskMountpoints{$disk} = "$PrimaryMP$LogicalMP";
-       $DiskMountpoints{$disk} =~ s/^\s//;
-       # print partition table
-        ($test != 1) || (PrintPartitionTable($disk));
-    }
-    if (!$BootPartition){
-        $BootPartition = $MountpointPart{"/"};
-    }
-}
-
-#****************************************************
-# set position for every partition
-#****************************************************
-sub SetPartitionPositions{
-    my $disk = shift;
-    my $mountpoint; my $DynGroup =""; my $StartPos; my $EndPos;
-    # Build groups of unpreserved partitions between
-    # preserved partitions
-    $StartPos = 0;
-    foreach $mountpoint(split(/\s/,$DiskMountpoints{$disk})) {
-        if ($MPPreserve{$mountpoint} eq "yes") {
-           $EndPos = $PartOldStart{$MountpointPart{$mountpoint}} - 1;
-            &SetGroupPos($DynGroup,$StartPos,$EndPos);
-           $DynGroup = "";
-           $StartPos = $PartOldEnd{$MountpointPart{$mountpoint}} + 1;
-        } else {
-           $DynGroup .= " $mountpoint";
-       }
-    }
-    $EndPos = $DiskSize{$disk} - 1;
-    &SetGroupPos($DynGroup,$StartPos,$EndPos);
-    foreach $mountpoint(split(/\s/,$DiskMountpoints{$disk})) {
-       ($MPOptions{$mountpoint} =~ /\bdosfat16\b/i)
-           && (($MPSize{$mountpoint} * $DiskUnits{$disk} * $sectorsize) < 32 * $megabyte)
-               && ($MPID{$mountpoint} = 4); # DOS 16-bit FAT <32MB
-    }
-}
-
-#****************************************************
-# set position for a group of unpreserved partitions
-# between start and end
-#****************************************************
-sub SetGroupPos{
-    my ($PartGroup,$Start,$End) = @_;
-    $PartGroup =~ s/^ //;
-    ($PartGroup) || return;
-    my $totalsize = $End - $Start + 1;
-    ($totalsize <= 0) && return;
-    my $mountpoint; my $mintotal = 0; my $maxmintotal = 0; my $rest = 0; my $EndUnit = 0;
-    # compute total of MinSizes and difference to MaxSizes
-    foreach $mountpoint (split(/\s/,$PartGroup)) {
-        $mintotal += $MPMinSize{$mountpoint};
-        $maxmintotal += ($MPMaxSize{$mountpoint} - $MPMinSize{$mountpoint});
-        $MPSize{$mountpoint} = $MPMinSize{$mountpoint};
-    }
-    # Test if partitions fit
-    ($mintotal > $totalsize)
-      && die "ERROR: Mountpoints $PartGroup do not fit.\n";
-    # Maximize partitions
-    $rest = $totalsize - $mintotal;
-    ($rest > $maxmintotal) && ($rest = $maxmintotal);
-    if ($rest > 0) {
-        foreach $mountpoint (split(/\s/,$PartGroup)) {
-            $MPSize{$mountpoint} += int ((($MPMaxSize{$mountpoint} - $MPMinSize{$mountpoint}) * $rest) / $maxmintotal);
-        }
-    }
-    # compute rest
-    $rest = $totalsize;
-    foreach $mountpoint (split(/\s/,$PartGroup)) {
-        $rest -= $MPSize{$mountpoint};
-    }
-    # Minimize rest
-    foreach $mountpoint (split(/\s/,$PartGroup)) {
-        if (($rest >0) && ($MPSize{$mountpoint} < $MPMaxSize{$mountpoint})){
-            $MPSize{$mountpoint}++;
-           $rest--;
-       }
-    }
-    # Set start for every partition
-    foreach $mountpoint (split(/\s/,$PartGroup)) {
-        $MPStart{$mountpoint} = $Start;
-       $Start += $MPSize{$mountpoint};
-       $EndUnit = $MPStart{$mountpoint} + $MPSize{$mountpoint} - 1;
-    }
-}
-
-#****************************************************
-# calculate extended partition size
-#****************************************************
-sub CalculateExtPartSize{
-    my ($disk) = @_;
-    my $extmp = "extended$disk";
-    my $mountpoint; my $ExtEnd; my $NewEnd;
-    ($MPPrimary{$extmp}) || return;
-    $ExtEnd = $MPStart{$extmp};
-    foreach $mountpoint(split(/\s/,$DiskMountpoints{$disk})) {
-        next if ($MPPrimary{$mountpoint} eq "yes");
-       $NewEnd = $MPStart{$mountpoint} + $MPSize{$mountpoint} - 1;
-       ($NewEnd > $ExtEnd) && ($ExtEnd = $NewEnd);
-    }
-    $MPSize{$extmp} = ($ExtEnd - $MPStart{$extmp} + 1);
-}
-
-#****************************************************
-# Print partition "number - mountpoint" table
-#****************************************************
-sub PrintPartitionTable{
-    my ($disk) = @_;
-    my $part; my $mountpoint; my $mountpointname; my $end;
-    foreach $part (sort %MountpointPart) {
-        next if($part !~ /^$disk/);
-       $mountpoint = $PartMountpoint{$part};
-        if ($mountpoint =~ /^no(.*)/){
-            $mountpointname = "no mountpoint ($1)";
-       } else {
-           $mountpointname = $mountpoint;
-       }
-       $end = $MPStart{$mountpoint} + $MPSize{$mountpoint} - 1;
-       print <<"EOM";
-/dev/$part $mountpointname start=$MPStart{$mountpoint} size=$MPSize{$mountpoint} end=$end id=$MPID{$mountpoint}
-EOM
-      }
-}
-
-#****************************************************
-# build all partition tables for sfdisk
-#****************************************************
-sub PartitionPersfdisk{
-    my ($disk, $mountpoint, $line, $part, $PrimaryNo);
-    my ($command, $result, $filename, $number);
-    print "Creating partition table: ";
-    foreach $disk(keys %DiskMountpoints) {
-        $sfdiskTables{$disk} = "# partition table of device: /dev/$disk\nunit: sectors\n\n";
-       $PrimaryNo = 1;
-        foreach $mountpoint(split(/\s/,$DiskMountpoints{$disk})) {
-           $part = $MountpointPart{$mountpoint};
-           $part =~ /(\d+)$/;
-           ($1 < 5) && ($PrimaryNo++);
-           if ( ($1 == 5) && ($PrimaryNo < 5) ){
-               for my $number($PrimaryNo..4) {
-                   $sfdiskTables{$disk} .= BuildsfdiskDumpLine(PartName($disk,$number),0,0,0)."\n";
-               }
-           }
-           $line = BuildsfdiskDumpLine($MountpointPart{$mountpoint},$MPStart{$mountpoint},$MPSize{$mountpoint},$MPID{$mountpoint});
-            ($part eq $BootPartition) && ($line .= ", bootable");
-            $sfdiskTables{$disk} .= "$line\n";
-       }
-#      print $sfdiskTables{$disk};
-       $filename = "$ENV{LOGDIR}/partition." . (($disk=~ m#/#) ? join('_', split('/', $disk)) : $disk);
-       if(($test != 1) && ($filename)){
-           open(FILE, ">$filename") || die "unable to write temporary file $filename\n";
-           print FILE $sfdiskTables{$disk};
-           close(FILE);
-        }
-       $command = "LC_ALL=C sfdisk $sfdisk_options /dev/$disk < $filename";
-       if($test != 1){
-            print "$command\n";
-           $result = `sh -c "$command"`;
-           (($? >> 8) == 0) || (die "\nSFDISK ERROR:\n $result\n");
-       }
-    }
-}
-
-#****************************************************
-# build a sfdisk dump line
-#****************************************************
-sub BuildsfdiskDumpLine{
-
-  sprintf "/dev/%-5s: start=%10s, size=%10s, Id=%3s",@_;
-}
-
-#****************************************************
-# Format all disks
-#****************************************************
-sub FormatDisks{
-    my ($disk, $device, $mountpoint, $mountpointname, $command, $result);
-    print "Creating file systems:\n";
-    foreach $disk(keys %DiskMountpoints) {
-        foreach $mountpoint (split(/\s/,$DiskMountpoints{$disk})) {
-           $device = $MountpointPart{$mountpoint};
-            if ($mountpoint =~ /^no/){
-                $mountpointname = "no mountpoint";
-            } else {
-               $mountpointname = $mountpoint;
-           }
-           # preserved partition
-           if ( ($MPPreserve{$mountpoint} eq "yes") && ($MPOptions{$mountpoint} !~ /\bformat\b/i)){
-               print "Preserve partition $device";
-                if ($mountpoint =~ /^no$1/){
-                    print " with no mountpoint\n";
-                } else {
-                   print " with mountpoint $mountpoint\n";
-               }
-               next;
-           }
-           # lazy format
-           if ( ( $MPOptions{$mountpoint} =~ /\blazyformat\b/i )
-              && ($MPStart{$mountpoint} == $PartOldStartSec{$device})
-              && (($MPStart{$mountpoint} + $MPSize{$mountpoint} - 1) == $PartOldEndSec{$device}) ){
-               print "Lazy format: $device";
-                if ($mountpoint =~ /^no$1/){
-                    print " with no mountpoint";
-                } else {
-                   print " with mountpoint $mountpoint";
-               }
-                print " was neither moved nor formated.\n";
-               next;
-           }
-           # swap
-           if ($mountpoint =~ /^swap/i) {
-#              print "Make swap partition:\n";
-               $command = "mkswap $mkswap_options";
-               ($MPOptions{$mountpoint} =~ /(\-c)\b/i) && ($command .= " $1");
-               push @swaplist, "/dev/$device";
-               $command .= " /dev/$device";
-               print "  $command\n";
-               if($test != 1){
-                   $result = `$command`;
-                   (($? >> 8) == 0) || (die "\nMKSWAP ERROR:\n $result\n");
-               }
-               next;
-           }
-           # Linux Reiser file system
-           if ($MPOptions{$mountpoint} =~ /\breiser\b/i) {
-#              print "Make Reiser Filesystem:\n";
-               $command = "echo y | mkreiserfs $mkreiserfs_options";
-               ($MPOptions{$mountpoint} =~ /(\-h\s*\w+)\b/) && ($command .= " $1");
-               ($MPOptions{$mountpoint} =~ /(\-v\s*\d+)\b/) && ($command .= " $1");
-               $command .= " /dev/$device";
-               print "  $command\n";
-               if ($test != 1){
-                   $result = `$command`;
-                   (($? >> 8) == 0) || die "\nMKREISERFS ERROR:\n $result\n";
-               }
-               next;
-           }
-           # Linux XFS file system
-           if ($MPOptions{$mountpoint} =~ /\bxfs\b/i) {
-#              print "Make XFS Filesystem:\n";
-               $command = "mkfs.xfs $mkxfs_options";
-               $command .= " /dev/$device";
-               print "  $command\n";
-               if ($test != 1){
-                   $result = `$command`;
-                   (($? >> 8) == 0) || die "\nMKFS.XFS ERROR:\n $result\n";
-               }
-               next;
-           }
-           # Linux Extended 2 file system
-           if ($MPOptions{$mountpoint} =~ /\b(ext[23]|auto)\b/i) {
-#              print "Make Extended 2/3 Filesystem:\n";
-               $command = "mke2fs $mke2fs_options";
-               ($MPOptions{$mountpoint} =~ /(\-c)\b/i) && ($command .= " $1");
-               ($MPOptions{$mountpoint} =~ /(\-i\s*\d+)\b/) && ($command .= " $1");
-               ($MPOptions{$mountpoint} =~ /(\-m\s*\d+)\b/) && ($command .= " $1");
-               ($MPOptions{$mountpoint} =~ /(\-j)\b/) && ($command .= " $1");
-               $command .= " /dev/$device";
-               print "  $command\n";
-               if ($test != 1){
-                   $result = `$command`;
-                   (($? >> 8) == 0) || die "\nMKE2FS ERROR:\n $result\n";
-               }
-               next;
-           }
-           # DOS 16bit FAT / Win95 FAT 32
-           if ($MPOptions{$mountpoint} =~ /\b(dosfat16|winfat32)\b/i) {
-               print "Clear first sector for DOS/Windows\n";
-               $command = "dd if=/dev/zero of=/dev/$MountpointPart{$mountpoint} bs=512 count=1";
-               print "  $command\n";
-               if ($test != 1){
-                   $result = `$command`;
-                   (($? >> 8) == 0) || die "\nDD ERROR:\n $result\n";
-               }
-               next;
-           }
-        }
-    }
-}
-
-#****************************************************
-# Build fstab and write it to <root>/etc/fstab
-#****************************************************
-sub WriteFSTab{
-    my ($FileSystemTab, $device, $type, $filename);
-    $FileSystemTab  = << "EOM";
-# /etc/fstab: static file system information.
-#
-#<file sys>          <mount point>     <type>   <options>   <dump>   <pass>
-EOM
-    # 1. /
-    $type = "ext2";
-    ($MPOptions{'/'} =~ /\b(reiser)\b/i) && ($type = "reiserfs");
-    ($MPOptions{'/'} =~ /\b(xfs)\b/i) && ($type = "xfs");
-    ($MPOptions{'/'} =~ /\b(ext3)\b/i) && ($type = "ext3");
-    ($MPOptions{'/'} =~ /\b(ext2)\b/i) && ($type = "ext2");
-    $FileSystemTab .= BuildfstabLine("/dev/$MountpointPart{'/'}","/",$type,$MPfstaboptions{'/'},0,1);
-    # 2. swap partitions
-    foreach my $mountpoint (%PartMountpoint){
-       next if( $mountpoint !~ /^swap/i);
-       $FileSystemTab .= BuildfstabLine("/dev/$MountpointPart{$mountpoint}",
-                           "none","swap",$MPfstaboptions{$mountpoint},0,0);
-    }
-    # 3. /proc
-    $FileSystemTab .= BuildfstabLine("none","/proc","proc","defaults",0,0);
-    # 4. sorted others
-    foreach my $mountpoint (sort %PartMountpoint){
-       next if ( ($mountpoint !~ m#^/#) || ($mountpoint eq "/"));
-       $device = $MountpointPart{$mountpoint};
-       $type = "ext2";
-       ($MPOptions{$mountpoint} =~ /\b(dosfat16|winfat32)\b/i) && ($type = "vfat");
-       ($MPOptions{$mountpoint} =~ /\b(reiser)\b/i) && ($type = "reiserfs");
-       ($MPOptions{$mountpoint} =~ /\b(xfs)\b/i) && ($type = "xfs");
-       ($MPOptions{$mountpoint} =~ /\b(ext3)\b/i) && ($type = "ext3");
-       ($MPOptions{$mountpoint} =~ /\b(ext2)\b/i) && ($type = "ext2");
-       $FileSystemTab .= BuildfstabLine("/dev/$device",$mountpoint,$type,$MPfstaboptions{$mountpoint},0,2);
-    }
-    # write it
-    $filename = "$ENV{LOGDIR}/fstab";
-#    print $FileSystemTab;
-    print "Write fstab to $filename\n" if $verbose;
-    if($test != 1){
-       open(FILE, ">$filename") || die "unable to write fstab $filename\n";
-       print FILE $FileSystemTab;
-       close(FILE);
-    }
-}
-
-#****************************************************
-# Build fstab line
-#****************************************************
-sub BuildfstabLine{
-
-    sprintf "%-10s   %-15s   %-6s  %-8s  %-4s %-4s\n",@_;
-}
-
-#****************************************************
-# Write all FAI variables of this program to file
-#****************************************************
-sub WriteFAIVariables{
-
-  my $swaps;
-
-  print "Write FAI variables to file $FAIOutputFile\n" if $verbose;
-    return if ($test == 1);
-  $swaps = join ' ',@swaplist;
-    open(FILE, ">$FAIOutputFile") || die "Unable to write file $FAIOutputFile\n";
-    print FILE << "EOM";
-BOOT_DEVICE=/dev/$BOOT_DEVICE
-ROOT_PARTITION=/dev/$MountpointPart{'/'}
-BOOT_PARTITION=/dev/$BootPartition
-SWAPLIST="$swaps"
-EOM
-    close(FILE);
-}
diff --git a/contrib/fai/goto-fai/faimond b/contrib/fai/goto-fai/faimond
deleted file mode 100755 (executable)
index 3ebdd5d..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/perl
-
-# $Id: faimond,v 1.2 2004/06/27 11:18:55 lange Exp $
-#*********************************************************************
-#
-# faimond -- monitor daemon which collects client status info
-#
-# This script is part of FAI (Fully Automatic Installation)
-# (c) 2003-2004 by Thomas Lange, lange@informatik.uni-koeln.de
-# Universitaet zu Koeln
-#
-#*********************************************************************
-
-#use strict;
-use Socket;
-
-$| = 1;
-my $port = 4711;
-
-@tasklist = qw/confdir defclass defvar partition mountdisks extrbase updatebase instsoft configure finish/;
-
-%tasks = (
-confdir => [' ', "Beziehe System-Einstellungen"],
-defclass => [' ',"Definieren von Klassen"],
-defvar => [' ',"Definieren von Variablen"],
-partition => [' ',"Paritionieren der Festplatten"],
-mountdisks => [' ',"Einbinden der Dateisysteme"],
-extrbase => [' ',"Installieren des Basis-Systems"],
-updatebase => [' ',"Aktualisieren des Basis-Systems"],
-instsoft => [' ',"Installieren der Software"],
-configure => [' ',"Abschließende Konfiguration"],
-finish => [' ',"Abschließen der Installation"]
-);
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub server_init() {
-
-  my $proto = getprotobyname('tcp');
-  socket(SERVER, PF_INET, SOCK_STREAM, $proto) or die "socket: $!";
-  setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1) or die "setsock: $!";
-
-  my $paddr = sockaddr_in($port, INADDR_ANY);
-
-  bind(SERVER, $paddr) or die "bind: $!";
-  listen(SERVER, SOMAXCONN) or die "listen: $!";
-#  print "FAI monitoring daemon started on port $port\n";
-}
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub big_loop() {
-
-  # accept a connection, print message received and close
-  my ($client_addr,$inp);
-  while ($client_addr = accept(CLIENT, SERVER)) {
-    $inp = <CLIENT>;
-    close CLIENT;
-    ($host,$begend,$task,$ecode) = split /\s+/,$inp;
-    chomp $ecode;
-    $strecode = sprintf "%-3s",$ecode;
-    $sym = ($begend =~ /TASKEND/) ? "   \\Z2OK\\Zn" : "   ->";
-    $tasks{$task}[0] = $ecode ? " \\Z1E$strecode\\Zn" : $sym;
-    showtab();
-
-    # Stop if we've reached faiend
-    if ( $task =~ /faiend/ ){
-       system("dialog --timeout 60 --msgbox '\nDie Installation wurde abgeschlossen. Drücken Sie die Eingabetaste um das System neu zu starten.' 8 60");
-       break;
-    }
-  }
-}
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub showtab() {
-
-# nach taskbeg soll es blinken, bei taskend, X oder error code
-
-  my $pre = '--colors --title " Aktueller Installationsverlauf "';
-  my $s2 = " --infobox \"\n";
-  # show tabular %tasks
-
-  $str = "$pre $s2";
-  foreach (@tasklist) {
-    $x = sprintf "%5s  $tasks{$_}[1]\n", $tasks{$_}[0];
-    $str .= $x;
-  }
-
-  $str .=  "\" 14 50\n";
-#  print $str;
-  system("dialog $str");
-
-}
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-server_init;
-big_loop;
diff --git a/contrib/fai/goto-fai/get_fai_dir b/contrib/fai/goto-fai/get_fai_dir
deleted file mode 100755 (executable)
index 5f24697..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-#!/bin/sh
-# FAI script for preparing LDAP objects. It calls ldap2fai to generate
-# the config space after everything is done.
-#
-# (C) 2005 Cajus Pollmeier <pollmeier@gonicus.de>
-echo 0 > /proc/sys/kernel/printk
-trap '' INT
-PATH=/bin:/sbin:/usr/bin:/usr/sbin:$PATH
-LANG=C
-
-. /usr/lib/goto/goto-support.lib
-
-#dialog() {
-#      echo $*
-#}
-
-abort() {
-       setterm -cursor off
-       while true; do sleep 60; done
-}
-       
-# Try to figure out which interface is configured, in doubt
-# choose the first one.
-interfaces=$(ifconfig | awk '/^[a-z0-9]/ {print $1}' | grep -v "lo")
-for int in $interfaces; do
-       ip=$(v=`ifconfig $int | awk '/inet addr/ {print $2}'`; echo ${v##*:})
-       mac=$(ifconfig $int | awk '/HWaddr/ {print $5}')
-       [ -n "$ip" ] && break
-done
-
-# Cancel if there's no IP available
-if [ -z "$ip" ]; then
-       dialog --title 'Fehler' --no-shadow --infobox 'Fehler: Das System konnte keine Netzwerk-Adresse ermitteln.\n\nDie Installation kann ohne diese Adresse nicht fortgesetzt werden.' 5 60
-       abort
-fi
-
-# Check if DNS setup is correct and set the hostname
-hostname=$(get_hostname_from_ip $ip)
-if [ "$hostname" == "unknown" ]; then
-       dialog --title 'Fehler' --no-shadow --infobox 'Fehler: Das System konnte keinen Rechner-Namen ermitteln.\n\nDie Installation kann ohne diese Information nicht fortgesetzt werden.' 5 60
-       abort
-fi
-
-echo "* setting hostname: $hostname"
-hostname "$hostname"
-mount -t tmpfs tmpfs /etc/ldap
-
-
-# Look for interesting parameters on kernel commandline
-ldap=""; splash=""
-for v in $(cat /proc/cmdline); do
-   case $v in
-      ldap=*)
-                echo -n "* found LDAP information, adapting configuration: "
-                ldap=$(echo ${v##ldap=}|base64-decode)
-
-               # ldap://hostname:389/basedn
-               LDAP_HOST=$(echo $ldap|sed 's!^[^:][^:]*://\([^:/][^:/]*\).*$!\1!g')
-               LDAP_PORT=$(echo $ldap|sed 's!^[^:]*://[^:][^:]*:\([0-9]*\)/.*$!\1!g')
-               echo -n $ldap_port | grep -q '^[0-9]*$' || LDAP_PORT=389
-               LDAP_BASE=$(echo $ldap|sed 's!^[^:][^:]*://[^/][^/]*/\(.*\)$!\1!g')
-               echo -e "BASE   $LDAP_BASE\nURI     ldap://$LDAP_HOST:$LDAP_PORT\n" > /etc/ldap/ldap.conf
-                echo "ok"
-                ;;
-      splash=*)
-                echo -n "* setting splash mode: "
-                splash=$(echo ${v##splash=})
-                [ $splash == "silent" ] && echo "silent" || echo "normal"
-                ;;
-    esac
-done
-
-[ -z "$ldap" ] && exit 0
-
-# Check if autosetup is needed at this point
-echo -n "* configurator: "
-if ! terminal_has_hardware_profile $mac; then
-    setterm -cursor off
-    echo "not configured yet - please wait, detecting hardware"
-
-    # Switch from bootsplash to normal screen, show dialog
-    [ -f /proc/splash ] && echo "verbose" > /proc/splash
-
-    setterm -blank 60
-    chvt 1
-    dialog --infobox 'Bitte warten, die installierte Hardware wird untersucht...' 3 64
-
-    # Get common config
-    hwsetup
-    terminal_alsa_setup
-    terminal_autofs_setup
-
-    # Save hardware profile
-    terminal_save_hardware_profile $mac
-fi
-
-if ! terminal_activated $mac; then
-    # wait till we get activated
-    setterm -blank 60
-    chvt 1
-    dialog --infobox 'Warte auf Aktivierung durch den Systemadministrator.' 3 60
-
-    while ! terminal_activated $mac; do
-                sleep 2
-    done
-
-    # GOsa writes the GOto entry in three steps. To continue, we check
-    # if XDRIVER is present.
-    dialog --infobox 'System wurde aktiviert. Eintr�e werden nun bernommen.' 3 60
-    while ! terminal_load_hardware_profile $mac &> /dev/null; do
-       cat /etc/sysconfig/GOto | grep -v 'XDRIVER="unknown"' | grep -q 'XDRIVER'
-       sleep 2
-    done
-
-    # Enable splash if it was enabled before
-    [ -f /proc/splash ] && echo "silent" > /proc/splash
-
-    echo -n "* configurator (pass2): "
-    setterm -cursor on
-fi
-
-# Mount configuration space
-[ ! -d /tmp/goto-fai ] && mkdir /tmp/goto-fai
-mount -obind /tmp/goto-fai /fai
-ldap2fai $mac
-
-chvt 3
-exit 0
diff --git a/contrib/fai/goto-fai/goto-support.lib b/contrib/fai/goto-fai/goto-support.lib
deleted file mode 100644 (file)
index c6bdbba..0000000
+++ /dev/null
@@ -1,510 +0,0 @@
-#!/bin/sh
-###############################################################################
-#                             GOsa agent library                              #
-###############################################################################
-
-SSH='ssh -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile /dev/null" -o "BatchMode yes" '
-
-get_hostname_from_ip() {
-       v=$(host -i $1); w=${v##*[      ]}
-       echo ${w%%.*} | grep -q 'NX'
-       if [ $? -eq 0  ]; then
-               echo "unknown"
-       else
-               echo "$v" | grep -q ';;'
-               if [ $? -eq 0 ]; then
-                       if [ -n "$HOSTNAME" ]; then
-                               echo "$HOSTNAME"
-                       else
-                               echo "unknown"
-                       fi
-               else
-                       echo ${w%%.*}
-               fi
-       fi
-}
-
-get_hostname_from_display()
-{
-        if [ -n "$DISPLAY" ]; then
-
-                HOST=${DISPLAY%%:*}
-                NUMBER=${DISPLAY##*:}
-
-                # IP addresses are not supported here
-                echo $HOST | grep -q '^[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*$'
-                if [ $? -ne 0 ]; then
-                        echo ${DISPLAY%%.*}
-                               else
-                                       get_hostname_from_ip $HOST
-                               fi
-
-        else
-                echo "unknown"
-        fi
-}
-
-
-kill_user_processes() {
-       # don't let root do this
-       if [ "$USER" == "root" -o $UID -eq 0 ]; then
-               return
-       fi
-
-       # Preset, or load from file
-       candidates="kdeinit\: soffice.bin mozilla-bin"
-       [ -r /etc/goto/kill-process.conf ] && candidates=$(cat /etc/goto/kill-process.conf)
-
-       # kill old existing user processes
-       for process in $candidates; do
-               ps -fu $USER | grep "$process" | grep -v 'kprogress' | awk ' FS=" " { system("kill "$2) } '
-       done
-
-       # kill old existing user processes that didn't left us with SIGTERM
-       for process in $candidates; do
-               ps -fu $USER | grep "$process" | grep -v 'kprogress' | awk ' FS=" " { system("kill "$2) } '
-       done
-}
-
-fix_ldif() {
-        (cat -; echo "bank") | awk '
-/^[a-zA-Z]/     {
-        if(line!=""){
-                print line
-        }
-
-        line    = $0
-}
-/^ /    {
-        line    = line substr($0,2)
-}
-'
-}
-
-
-ldap_init() {
-       if [ $# -ne 2 ]; then
-               for config in /etc/*ldap/ldap.conf /etc/ldap.conf; do
-
-                       # Not readable? Continue
-                       [ ! -r $config ] && continue
-
-                       # Try to read config
-                       touch /tmp/agent.$$
-                       cat $config | while read line; do
-                               echo $line | grep -q '^BASE'
-                               [ $? -eq 0 ] && echo LDAP_BASE="\"$(echo $line|tr '\t' ' '|cut -d\  -f2-)\"" >>/tmp/agent.$$
-                               echo $line | grep -q '^HOST'
-                               [ $? -eq 0 ] && echo LDAP_HOST="$(echo $line|tr '\t' ' '|cut -d\  -f2-)" >>/tmp/agent.$$
-                               echo $line | grep -q '^URI'
-                               [ $? -eq 0 ] && echo LDAP_HOST="$(v=`echo $line|tr '\t' ' '|cut -d\  -f2-`;echo ${v##*://})" >> /tmp/agent.$$
-                       done
-                       eval $(cat /tmp/agent.$$)
-                       rm /tmp/agent.$$
-
-                       # One successful configuration should be enough
-                       break
-               done
-               if [ -z "$LDAP_HOST" -o -z "$LDAP_BASE" ]; then
-                       echo "Critical: no LDAP configuration found!"
-                       exit
-               fi
-       else
-               LDAP_HOST=$1
-               LDAP_BASE=$2
-       fi
-}
-
-
-ldap_count() {
-       ldapsearch -x -LLL -h "$LDAP_HOST" -b "$LDAP_BASE" "$1" dn | grep '^dn:' | wc -l
-}
-
-
-decode_blob() {
-       base64-decode > /tmp/agent-lib-decode.$$
-       file /tmp/agent-lib-decode.$$ 2>/dev/null| grep -qi 'text'
-       [ $? -eq 0 ] && cat /tmp/agent-lib-decode.$$ | recode 'utf8..latin1'
-       [ -f /tmp/agent-lib-decode.$$ ] && rm /tmp/agent-lib-decode.$$
-}
-
-ldap_import() {
-  for v in $(set grep ldap_import_ | cut -d= -f1); do unset $v; done
-  vname_lastrun=""
-  counter=0
-  > /tmp/agent-lib.$$
-  (ldapsearch -x -LLL -h "$LDAP_HOST" -b "$LDAP_BASE" $2 "$1" $3 2> /dev/null) | fix_ldif | sed 's/^\([^:]*\):\(.*\)$/\1="\2"/' | while read line; do
-               vname=$(echo $line|cut -d= -f1)
-               vvalue=$(echo $line|cut -d= -f2-)
-
-               echo $line | grep -q '=": '
-               if [ $? -eq 0 ]; then
-                       vvalue=`echo $line|sed 's/^[^="]*=": //'|decode_blob`
-                       vvalue="$vvalue\""
-               else
-                       vvalue=`echo $line|sed 's/^[^="]*=" //'`
-               fi
-
-               if [ "$vname_lastrun" == "$vname" ]; then
-                       counter=$(( $counter + 1 ));
-               else
-                       counter=0
-                       vname_lastrun=$vname
-               fi
-               
-               echo "ldap_import_$vname[$counter]=\"$vvalue" >> /tmp/agent-lib.$$
-       done
-
-       eval $(cat /tmp/agent-lib.$$)
-       rm /tmp/agent-lib.$$
-}
-
-ldap_cat() {
-   vname_lastrun=""
-   counter=0
-   > /tmp/agent-lib.$$
-   (ldapsearch -x -LLL -h "$LDAP_HOST" -b "$1" -s base 2> /dev/null) | fix_ldif | sed 's/
-^\([^:]*\):\(.*\)$/\1="\2"/' | while read line; do
-               vname=$(echo $line|cut -d= -f1)
-               vvalue=$(echo $line|cut -d= -f2-)
-
-               echo $line | grep -q '=": '
-               if [ $? -eq 0 ]; then
-                       vvalue=`echo $line|sed 's/^[^="]*=": //'|decode_blob`
-                       vvalue="$vvalue\""
-               else
-                       vvalue=`echo $line|sed 's/^[^="]*=" //'`
-               fi
-
-               if [ "$vname_lastrun" == "$vname" ]; then
-                       counter=$(( $counter + 1 ));
-               else
-                       counter=0
-                       vname_lastrun=$vname
-               fi
-
-               echo "ldap_import_$vname[$counter]=\"$vvalue" >> /tmp/agent-lib.$$
-       done
-
-       eval $(cat /tmp/agent-lib.$$)
-       rm /tmp/agent-lib.$$
- }
-
-
-
-ldap_get_group_membership_of() {
-       ldapsearch -x -LLL -h "$LDAP_HOST" -b "$LDAP_BASE" "(memberUid=$1)" \
-                               cn 2> /dev/null | fix_ldif | awk '/^cn: / {print $2}'
-}
-
-
-ldap_get_applications_of() {
-       ldapsearch -x -LLL "(memberUid=$1)" gosaMemberApplication | fix_ldif | \
-                               awk '/^gosaMemberApplication:/ {print $2}'| sort | uniq
-}
-
-
-ldap_get_appservers() {
-       ldapsearch -x -LLL "(objectclass=goTerminalServer)" cn | fix_ldif | grep -w cn: |cut -d' ' -f 2
-}
-
-
-translate() {
-       # Look for translation
-       while read line; do
-               string="${line%%=*}"
-               if [ "$string" == "$*" ]; then
-                       echo "${line##*=}"
-                       return
-               fi
-       done < /etc/goto/goto-locales.dat
-       echo $*
-}
-
-
-show_progress() {
-       # No translation available
-       echo $PROGRESS $(translate "$*")
-}
-
-
-create_desktop_link() {
-       echo "$gosaApplicationFlags" | grep -q "D"
-       if [ $? -eq 0 ]; then
-               [ $DEBUG -eq 1 ] && echo "goto_setup: creating desktop link for application $application" 1>&2
-               cat << EOF > ~/Desktop/$cn
-[Desktop Entry]
-Comment=$description
-Encoding=UTF-8
-Exec=$gosaApplicationExecute
-Icon=$HOME/.kde/share/icons/${cn}.png
-Name=$gosaApplicationName
-Type=Application
-EOF
-       fi
-}
-
-
-create_menu_entry() {
-       echo "$gosaApplicationFlags" | grep -q "M"
-       if [ $? -eq 0 ]; then
-               [ $DEBUG -eq 1 ] && echo "goto_setup: creating menu link for application $application" 1>&2
-               cat << EOF > ~/.local/share/applications/$cn.desktop
-[Desktop Entry]
-Type=Application
-Encoding=UTF-8
-Exec=$gosaApplicationExecute
-Name=$gosaApplicationName
-GenericName=
-Comment=$description
-Icon=$HOME/.kde/share/icons/${cn}.png
-Terminal=false
-Categories=$appcat;
-EOF
-       fi
-}
-
-delete_all_applinks() {
-       list=`ldapsearch -x "objectClass=gosaApplication" cn | fix_ldif | awk '/^cn: / {print $2}'`
-       for link in $list; do
-               [ -f $HOME/Desktop/$link ] && rm -f $HOME/Desktop/$link
-               [ -f $HOME/.kde/share/applnk/$link.desktop ] && rm -rf $HOME/.kde/share/applnk/$link.desktop
-       done
-}
-
-
-function terminal_load_hardware_profile() {
-       rm -f $RAM/etc/sysconfig/GOto && touch $RAM/etc/sysconfig/GOto
-       ldapsearch -x -LLL -h $LDAP_HOST -b "$LDAP_BASE" -D "cn=terminal-admin,$LDAP_BASE" -w "$(cat /etc/goto/secret)" "(&(objectClass=gotoWorkstation)(macAddress=$1))" 2> /dev/null | fix_ldif | sed -e 's/^\([^:]*\): \(.*\)$/\U\1\E="\2"/' -e 's/^GOTO//g' >> /etc/sysconfig/GOto
-
-       # Get DN and load all parent defaults from tree
-       current=$(grep "^DN=" /etc/sysconfig/GOto|sed 's/\"//g;s/, /,/g;s/^.*,ou=terminals,ou=systems,//g')
-
-       # Load potential object group entries 
-       ldapsearch -x -LLL -h $LDAP_HOST -b "$LDAP_BASE" -D "cn=terminal-admin,$LDAP_BASE" -w "$(cat /etc/goto/secret)" "(&(objectClass=gosaGroupOfNames)(member=$(echo -n $current|sed 's/^DN=//')))" 2> /dev/null | fix_ldif | sed -e 's/^\([^:]*\): \(.*\)$/\U\1\E="\2"/' -e 's/^GOTO//g' >> /etc/sysconfig/GOto
-
-       # get reverse list of potential default entries - for backward compatibility
-       { while true; do
-               # write out current value
-               echo "ou=terminals,ou=systems,$current"
-
-               # prepare next entry
-               echo $current | grep -q ','
-               [ $? -ne 0 ] && break
-               [ "$LDAP_BASE" == "$current" ] && break
-               current=${current#*,}
-       done } | tac | while read line; do
-
-    # Read potential default entries and append
-    # them to sysconfig/GOto
-       ldapsearch -x -LLL -h $LDAP_HOST -D "cn=terminal-admin,$LDAP_BASE" -w "$(cat /etc/goto/secret)" -b $line "(&(objectClass=gotoWorkstation)(cn=wdefault))" 2> /dev/null | fix_ldif | sed -e 's/^\([^:]*\): \(.*\)$/\U\1\E="\2"/' -e 's/^GOTO//g' >> /etc/sysconfig/GOto
-  done
-
-  # Reverse sysconfig/GOto
-  tac /etc/sysconfig/GOto > /etc/sysconfig/GOto.tmp
-  mv /etc/sysconfig/GOto.tmp /etc/sysconfig/GOto
-}
-
-
-terminal_has_hardware_profile() {
-       # Do we have a configuration?
-       terminal_load_hardware_profile $1
-       grep -v "cn=default," /etc/sysconfig/GOto | grep -q "DN="
-}
-
-
-terminal_activated() {
-       # Do we have a configuration?
-       terminal_load_hardware_profile $1
-       grep -v ',ou=incoming,' /etc/sysconfig/GOto | grep -v 'cn=default,' | grep -q "DN="
-}
-
-
-terminal_dump_hwprofile() {
-       # Save mac address
-       mac=$1
-       name=$(hostname)
-       
-       # Source hardware information detected by hwsetup
-       for module in xserver sound netcard mouse; do
-               [ -f /etc/sysconfig/$module ] && . /etc/sysconfig/$module
-       done
-
-       # Get hardware information directly from /proc
-       cpu=$(cat /proc/cpuinfo | awk 'BEGIN { FS=": "; ORS="" } /^vendor_id/ {print $2" / "} /^model name/{print $2" - "} /^cpu MHz/ {print $2" MHz"}')
-       mem=$(cat /proc/meminfo | awk '/^MemTotal:/ {print $2" KB"}')
-       modlist=$(lsmod | sed -e '/^Module/d;/^snd/d;s/^\(\w*\).*$/\1/g')
-       hsync=$(ddcxinfo-knoppix -hsync|tr -d ' ')
-       vsync=$(ddcxinfo-knoppix -vsync|tr -d ' ')
-
-       # USB support?
-       [ -d /proc/bus/usb ] && usb="true" || usb="false"
-
-       # Add floppy/cdrom
-       grep -q 'floppy' /etc/sysconfig/autofs && FLOPPY='YES' || FLOPPY='NO'
-       grep -q 'cdrom' /etc/sysconfig/autofs && CDROM='YES' || CDROM='NO'
-
-       cat << EOF
-dn: cn=$name,ou=incoming,$LDAP_BASE
-objectClass: gotoWorkstation
-objectClass: goHard
-cn: $name
-macAddress: $mac
-gotoMode: locked
-gotoXDriver: $XMODULE
-gotoXMouseType: $XMOUSETYPE
-gotoXMouseport: $DEVICE
-gotoXHsync: $hsync
-gotoXVsync: $vsync
-ghUsbSupport: $usb
-gotoFloppyEnable: $FLOPPY
-gotoCdromEnable: $CDROM
-gotoSndModule: $SNDMODULE
-EOF
-
-       # Insert IDE-Devices
-       for f in /proc/ide/ide?/hd?/model; do
-               [ -f $f ] && echo "ghIdeDev: "$(echo $f | cut -d/ -f5)" ("$(cat $f)")"
-       done
-
-       (cat /proc/scsi/scsi | sed -ne 's/.*Vendor: \([^ ]*\) *Model: \([^ ]*\) *.*$/\1 \2/p') 2> /dev/null|while read line; do
-               echo ghScsiDev: $line
-       done
-
-       # Insert modules
-       for m in $modlist; do
-               echo "gotoModules: $m"
-       done | sort | uniq
-
-       # Add potential swap filesystems
-       [ -f /etc/sysconfig/swap ] && cat /etc/sysconfig/swap | while read line; do
-               echo "gotoFilesystem: $line"
-       done
-
-       # Add autofs devices
-       [ -f /etc/sysconfig/autofs ] && cat /etc/sysconfig/autofs | while read line; do
-               echo "gotoAutoFs: $line"
-       done
-
-       cat << EOF
-ghGfxAdapter: $XDESC
-ghNetNic: `cat /etc/sysconfig/netcard|grep "^FULLNAME"|cut -d= -f2|tr -d "\""`
-ghSoundAdapter: `cat /etc/sysconfig/sound|grep "^FULLNAME"|cut -d= -f2|tr -d "\""`
-ghMemSize: $mem
-ghCpuType: $cpu
-EOF
-}
-
-
-terminal_save_hardware_profile() {
-       # Get hardware ldif and strip out possibly broken entries
-    terminal_dump_hwprofile $1 | grep -v '^[^:]*: *$' &> /tmp/upload.ldif
-
-       # Upload ldif
-       while true; do
-               error=$(ldapadd -x -h "$LDAP_HOST" -D "cn=terminal-admin,$LDAP_BASE" -w "$(cat /etc/goto/secret)" < /tmp/upload.ldif 2>&1)
-               if [ $? -ne 0 ]; then
-                       dialog --msgbox "Das Terminal konnte sich nicht am LDAP anmelden. Bitte prüfen Sie de Einstellungen: $error" 14 60
-               else
-                       break
-               fi
-       done
-}
-
-
-terminal_alsa_setup() {
-       audio=$(lspci -n | awk '/ 0401/ {print $3}' | sed 's/://g' | head -1)
-       KVER=$(uname -r)
-       MODULE=$(cat /lib/modules/$KVER/modules.pcimap | (while read driver vendor device dummy; do
-               if expr $driver : 'snd-.*' > /dev/null; then
-                       printf '%04x%04x %s\n' $vendor $device $driver | grep "^$audio" | cut -d\  -f2
-               fi
-       done))
-       echo "SNDMODULE=\"$MODULE\"" >> /etc/sysconfig/sound
-}
-
-
-terminal_autofs_setup(){
-       wcount=1
-       lcount=1
-
-       # Remove old ones
-       rm -f /etc/sysconfig/autofs /etc/sysconfig/swap
-
-       # Generate autofs entries for removable devices
-       for d in /dev/floppy/?; do
-               [ "$d" == "/dev/floppy/?" ] && break
-               nr=$(echo $d | sed 's/^.*\/\([^/]*$\)/\1/g')
-               echo "floppy$nr -fstype=auto,sync,nodev,nosuid,umask=000,quiet,rw :$d" >> /etc/sysconfig/autofs
-       done
-
-       for d in /dev/cdroms/*; do
-               [ "$d" == "/dev/cdroms/*" ] && break
-               name=`echo $d | sed 's/^.*\/\([^/]*$\)/\1/g'`
-               echo "$name -fstype=iso9660,sync,nodev,nosuid,umask=000,quiet,ro :$d" >> /etc/sysconfig/autofs
-       done
-
-       # Generate autofs entries for fixed drives
-       (sfdisk -qLl | grep "^/" | tr -d '\*') | while read device d1 d2 d3 d4 type d5; do
-        case $type in
-         [4bce])
-               echo "win$wcount -fstype=vfat,sync,nodev,nosuid,umask=000,quiet,rw :$device" >> /etc/sysconfig/autofs
-               wcount=$(( $wcount + 1 ))
-               ;;
-         7)
-               echo "win$wcount -fstype=ntfs,sync,nodev,nosuid,umask=000,quiet,ro :$device" >> /etc/sysconfig/autofs
-               wcount=$(( $wcount + 1 ))
-               ;;
-         83)
-               echo "linux$lcount -fstype=ext3,sync,nodev,nosuid,umask=000,quiet,rw :$device" >> /etc/sysconfig/autofs
-               lcount=$(( $lcount + 1 ))
-               ;;
-      82)
-                echo "$device none swap sw 0 0" >> /etc/sysconfig/swap
-               ;;
-        esac
-       done
-}
-
-
-get_xdmcp_server(){
-       SERVERS=$(ldapsearch -LLL -b "$LDAP_BASE" -H $LDAP_HOST -x '(&(objectclass=goTerminalServer)(goXdmcpIsEnabled=true))'| awk '/^cn/{print $2}' 2> /dev/null)
-
-       # Generate load sorted server list
-       { for s in $SERVERS; do
-               xdmping $s -v -t 1 2> /dev/null | awk '!/contacting/ {print $5"|"$1"|"$2}' | sed 's/[:,]//g'
-       done } | egrep "^[0-9]" | sort -n > /tmp/xservers.tmp
-
-       case $(cat /tmp/xservers.tmp | wc -w | awk '{print $1}') in
-               0)
-                       return
-                       ;;
-               1)
-                       cat /tmp/xservers.tmp | cut -d\| -f2
-                       return
-            ;;
-               *)
-                       AVAILABLE=""
-                       for i in $(cat /tmp/xservers.tmp); do
-                               NEW=$(echo "$i" | awk -F "|" '{if ($1 < 0.5) print $1"|"$2}')
-                               [ -n "$NEW" ] && AVAILABLE="$NEW\n$AVAILABLE"
-                       done
-                       if [ -n "$AVAILABLE" ]; then
-                               echo -e "$AVAILABLE" > /tmp/xservers.tmp
-                               NUM=$(cat /tmp/xservers.tmp | wc -l | awk '{print $1 - 1}')
-                               ROW=$(echo $NUM | awk '{print rand() * $1 + 1 ;}' | cut -d . -f1)
-                               cat /tmp/xservers.tmp | sed -n "${ROW}p" | cut -d\| -f2
-                       else
-                               cat /tmp/xservers.tmp|egrep "^[0-9]"|tr "." ","|sort -n|head -1|cut -d\| -f2
-                       fi
-                       ;;
-       esac
-}
-
-
-get_fontpath() {
-       ldapsearch -x -LLL -h $LDAP_HOST -b "$LDAP_BASE" "(&(objectClass=goTerminalServer)(cn=$1))" |
-               grep "^goFontPath" | cut -d\  -f2- | sed 's!\/!\/!g'
-}
-
diff --git a/contrib/fai/goto-fai/ldap2fai b/contrib/fai/goto-fai/ldap2fai
deleted file mode 100755 (executable)
index 50f315d..0000000
+++ /dev/null
@@ -1,630 +0,0 @@
-#!/usr/bin/perl
-# $Id$
-#*********************************************************************
-#
-# ldap2fai -- read FAI config from LDAP and create config space
-#
-# This script is part of FAI (Fully Automatic Installation)
-# (c) 2005, Thomas Lange <lange@informatik.uni-koeln.de>
-# (c) 2005, Jens Nitschke <jens.nitschke@2int.de>
-# (c) 2005, Jan-Marek Glogowski <glogow@fbihome.de>
-# (c) 2005, Cajus Pollmeier <pollmeier@gonicus.de>
-#
-#*********************************************************************
-
-use strict;
-use Net::LDAP;
-use MIME::Base64;
-use Getopt::Std;
-use File::Path;
-use File::Copy;
-use vars qw/ %opt /;
-
-my $base;
-my $ldapuri;
-my $ldapdir = "/etc/ldap/ldap.conf";
-my $outdir = "/fai";
-my $verbose = 0;
-my $opt_string = 'c:d:hv';
-my $hostname;
-
-getopts( "$opt_string", \%opt ) or usage("Hello");
-usage("Help") if $opt{h};
-
-$verbose = $opt{v} ? 1 : 0;
-$outdir  = $opt{d} ? $opt{d} : $outdir;
-$ldapdir = $opt{c} ? $opt{c} : $ldapdir;
-
-# Get MAC from cmdline
-my $mac = shift @ARGV;
-$mac eq '' && usage("MAC address not specified.");
-
-# Is outdir a directory
--d "$outdir" || usage("'$outdir' is not a directory.\n");
-
-my @classes=(); # the classes a host belongs to
-
-# initialize ldap
-setup();
-my $ldap = Net::LDAP->new("$ldapuri") or die "$@";
-my $mesg = $ldap->bind;
-
-# create class hooks debconf disk_config package_config scripts files
-my @dirs= qw/class hooks debconf disk_config package_config scripts files/;
-foreach (@dirs) {
-  -d "$outdir/$_" || mkpath "$outdir/$_" 
-    || warn "WARNING: Can't create subdir $outdir/$_ $!\n";
-}
-
-@classes= get_classes($mac);
-prt_scripts();
-prt_package_list();
-prt_debconf();
-prt_templates();
-prt_var();
-prt_hooks();
-prt_disk_config();
-
-# create sources list
-if (!$hostname) {
-  -d "${outdir}/files/etc/apt/sources.list" 
-    || mkpath "${outdir}/files/etc/apt/sources.list";
-  copy ("${outdir}/tmp/apt-sources.list",
-    "${outdir}/files/etc/apt/sources.list/$hostname") ;
-}
-
-$mesg = $ldap->unbind;   # take down session
-exit 0;
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub setup
-{
-  # Read LDAP
-  open (LDAPCONF,"${ldapdir}") 
-    || usage("Can't open LDAP configuration$!\n");
-  my @content=<LDAPCONF>;
-  close(LDAPCONF);
-
-  # Scan LDAP config
-  foreach my $line (@content) {
-    $line =~ /^\s*(#|$)/ && next;
-    chomp($line);
-
-    if ($line =~ /^BASE\s+(.*)$/) {
-      $base= $1;
-      next;
-    }
-    if ($line =~ m#^URI\s+ldaps?://([^/:]+).*$#) {
-      $ldapuri= $1;
-      next;
-    }
-  }
-}
-
-sub usage
-{
-  (@_) && print STDERR "\n@_\n\n";
-
-  print STDERR << "EOF";
-usage: $0 [-hv] [-c config] [-d outdir] <MAC>
-
--h        : this (help) message
--c        : LDAP config file (default: ${ldapdir})
--d        : output dir (default: ${outdir})
--v        : be verbose
-EOF
-       exit -1;
-}
-#-----------------------------------------------------------------------------------
-
-sub write_file {
-
-       my @opts = @_;
-       my $len = scalar @_;
-       ($len < 2) && return;
-
-       my $filename = shift;
-       my $data = shift;
-
-       open (SCRIPT,">${filename}") || warn "Can't create ${filename}. $!\n";
-       print SCRIPT $data;
-       close(SCRIPT);
-
-  ($opts[2] ne "") && chmod oct($opts[2]),${filename};
-       ($opts[3] ne "") && chown_files(${filename}, $opts[3]);
-}
-
-#-----------------------------------------------------------------------------------
-
-sub chown_files
-{
-  my @owner = split('.',@_[1]);
-  my $filename = @_[0];
-  my ($uid,$gid);
-  $uid = getpwnam(@owner[0]);
-  $gid = getgrnam(@owner[1]);
-  
-  chown $uid, $gid, $filename;
-}
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub get_classes {
-
-       # return list of FAI classes defined for host
-       my $mac = shift;
-       my (@classes,$mesg,$entry);
-
-  $mesg = $ldap->search(
-    base => "ou=systems,$base",
-    filter => "(&(macAddress=$mac)(objectClass=gotoWorkstation))",
-    attrs => [ 'FAIclass', 'cn']);
-  $mesg->code && die $mesg->error;
-  # normally, only one value should be returned
-  if ($mesg->count != 1) {
-      die "LDAP search for client failed. ".$mesg->count." entries have been returned\n";
-    }
-  
-   # this assigns the last value to @classes     
-   $entry= ($mesg->entries)[0];
-   @classes= split /\s+/,$entry->get_value('FAIclass');
-
-  # get hostname
-       my $hname= $entry->get_value('cn');
-  my $dn= $entry->dn;
-  $hostname= $hname;
-
-  # Search for object groups containing this client
-  $mesg = $ldap->search(
-    base => "ou=groups,$base",
-    filter => "(&(objectClass=gosaGroupOfNames)(objectClass=FAIobject)(member=$dn))",
-    attrs => [ 'FAIclass' ]);
-  $mesg->code && die $mesg->error;
-       foreach my $m ($mesg->entries) {
-    push @classes, split /\s+/,$m->get_value('FAIclass');
-  }
-
-       # print all classes to the file with hostname
-       open (FAICLASS,">$outdir/class/$hname") || warn "Can't create $outdir/class/$hname. $!\n";
-  my @newclasses;
-       foreach my $class (@classes) {
-
-    # We need to walk through the list of classes and watch out for
-    # a profile which is named like the class. Replace the profile
-    # name by the names of the included classes.
-    $mesg = $ldap->search(
-      base => "ou=systems,$base",
-      filter => "(&(objectClass=FAIprofile)(cn=$class))",
-      attrs => [ 'FAIclass' ]);
-    $mesg->code && die $mesg->error;
-
-    if ($mesg->count > 0){
-      foreach my $m ($mesg->entries) {
-        foreach my $tc (split /\s+/,$m->get_value('FAIclass')){
-          print FAICLASS "$tc\n";
-          push @newclasses, $tc;
-        }
-      }
-    } else {
-      print FAICLASS "$class\n";
-      push @newclasses, $class;
-    }
-  }
-       close(FAICLASS);
-       print "Host $hname belongs to FAI classes: ",join ' ',@newclasses,"\n" if $verbose;
-       return @newclasses;
-}
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub get_variables {
-       # gets all variables defined for a class
-       # returns a list of lines in bourne shell syntax
-
-   my $class = shift; 
-        my ($mesg,$var_base,$entry,$line,@vars);
-
-        $mesg = $ldap->search(
-                      base => "$base",
-                      filter => "(&(cn=$class)(objectClass=FAIvariable))",
-                      attrs => [ 'cn']);
-        return if ($mesg->count() == 0); # skip if no such object exists              
-        $mesg->code && die $mesg->error;
-
-        $entry=($mesg->entries)[0];
-        $var_base=$entry->dn;
-
-        $mesg = $ldap->search(
-                        base => "$var_base",
-                        filter => "(objectClass=FAIvariableEntry)",
-                        attrs => ['cn', 'FAIvariableContent']);
-        return if ($mesg->count() == 0); # skip if no such object exists
-        $mesg->code && die $mesg->error;
-                        
-
-        foreach $entry ($mesg->entries) {
-                $line= sprintf "%s=\'%s\'\n", $entry->get_value('cn'), 
-                        $entry->get_value('FAIvariableContent');
-                push @vars,$line;
-        }
-        return @vars;
-}
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub prt_var {
-
-       my (@lines, $hname);
-
-       foreach my $class (@classes) {
-               @lines = get_variables($class);
-               next until @lines; # do not create .var file if no variables are defined
-               open (FAIVAR,">$outdir/class/${class}.var") 
-      || warn "Can't create $outdir/class/$hname.var.$!\n";
-               print FAIVAR @lines;
-               close(FAIVAR);
-       }
-}
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub get_disk_config {
-
-       my $class = shift;
-  my ($mesg,$entry,$line,@diskconfig,$partition_base,$dn,%diskline,$xxmesg);
-
-       # Search for partition schema for the specified class
-       $mesg = $ldap->search(
-                     base => "$base",
-                     filter => "(&(cn=$class)(objectClass=FAIpartitionTable))" );
-
-       return if ($mesg->count() == 0); # skip if no such object exists
-       $mesg->code && die $mesg->error;
-
-       $entry=($mesg->entries)[0];
-       $partition_base= $entry->dn;
-       
-       # Search for disks
-       $mesg = $ldap->search(
-                     base => "$partition_base",
-                     filter => "(objectClass=FAIpartitionDisk)" );
-
-       return if ($mesg->code == 32); # skip if no such object exists
-       $mesg->code && die $mesg->error;
-
-       foreach $entry ($mesg->entries) {
-    my $logic_count= 4;
-    my $primary_count= 0;
-               my $dn=$entry->dn;
-               my $disk=$entry->get_value('cn');
-    my $part;
-               undef %diskline;
-               $diskline{0} = "disk_config $disk\n";
-               $xxmesg = $ldap->search(
-                       base => "$dn",
-                       filter => "objectClass=FAIpartitionEntry" );
-               $xxmesg->code && die $xxmesg->error;
-               foreach my $dl ($xxmesg->entries) {
-      if ($dl->get_value('FAIpartitionType') eq 'primary'){
-        $primary_count++;
-      } else {
-        $logic_count++;
-      }
-                       if ($dl->get_value('FAIpartitionFlags') eq 'preserve'){
-        if ($dl->get_value('FAIpartitionType') eq 'primary'){
-          $part= 'preserve'.$primary_count;
-        } else {
-          $part= 'preserve'.$logic_count;
-        }
-                               $line= sprintf "%-7s %-12s %-12s %-10s ; %s\n",
-                                       $dl->get_value('FAIpartitionType'),
-                                       $dl->get_value('FAImountPoint'),
-                                       $part,
-                                       $dl->get_value('FAImountOptions') eq '' 
-                                               ? 'rw' : $dl->get_value('FAImountOptions'),
-                                       $dl->get_value('FAIfsOptions');
-                       }         
-                       elsif ($dl->get_value('FAIfsType') eq 'swap'){
-                               $line= sprintf "%-7s %-12s %-12s %-10s\n",
-                               $dl->get_value('FAIpartitionType'),
-                               $dl->get_value('FAImountPoint'),
-                               $dl->get_value('FAIpartitionSize'),
-                               $dl->get_value('FAImountOptions') eq '' 
-                                       ? 'rw' : $dl->get_value('FAImountOptions');
-                       } 
-                       else {
-                               $line= sprintf "%-7s %-12s %-12s %-10s ; %s %s\n",
-                               $dl->get_value('FAIpartitionType'),
-                               $dl->get_value('FAImountPoint'),
-                               $dl->get_value('FAIpartitionSize'),
-                               $dl->get_value('FAImountOptions') eq '' 
-                                       ? 'rw' : $dl->get_value('FAImountOptions'),
-                               $dl->get_value('FAIfsOptions'),
-                               $dl->get_value('FAIfsType');
-                       }
-
-                       $diskline{$dl->get_value('FAIpartitionNr')}=$line;
-               }
-               foreach my $l (sort {$a <=> $b} keys %diskline) {
-                       push @diskconfig, $diskline{$l};
-               }
-       }
-       return @diskconfig;
-}
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub prt_disk_config {
-
-       # create one disk_config file
-
-       my ($class,@lines);
-
-       foreach $class (reverse @classes) {
-               @lines=get_disk_config($class);
-               next until @lines; # skip if nothing is defined for this class
-
-    print "Generating partition layout for class '${class}'\n." if $verbose;
-               open (FAIVAR,">${outdir}/disk_config/${class}") 
-      || warn "Can't create $outdir/disk_config/$class. $!\n";
-               print FAIVAR join '',@lines;
-               close(FAIVAR);
-               last; # finish when one config file is created
-       }
-}
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub get_packages {
-
-       # gets list of packages defined for a class
-
-       my $class = shift;
-       my ($mesg,$entry,$line,$method,%packlist);
-
-  -d "${outdir}/tmp" || mkpath "${outdir}/tmp"
-    || warn "Can't create ${outdir}/tmp. $!\n";
-  print "Generate sources.list for install\n" if $verbose;
-       open (SOURCES,">>${outdir}/tmp/apt-sources.list") 
-    || warn "Can't create ${outdir}/tmp/apt-sources.list. $!\n";
-
-       $mesg = $ldap->search(
-                       base => "$base",
-                       filter => "(&(cn=$class)(objectClass=FAIpackageList))" ,
-                       attrs => [ 'FAIpackage', 'FAIinstallMethod', 
-                 'FAIdebianMirror', 'FAIdebianRelease', 'FAIdebianSection']);
-
-       $mesg->code && die $mesg->error;
-       # should also return only one value
-
-       undef %packlist;
-       foreach $entry ($mesg->entries) {
-               $method=$entry->get_value('FAIinstallMethod');
-               push @{$packlist{$method}}, $entry->get_value('FAIpackage');
-
-               print SOURCES "deb ".$entry->get_value('FAIdebianMirror')." ".$entry->get_value('FAIdebianRelease')." ";
-    my $section;
-    foreach $section ($entry->get_value('FAIdebianSection')){
-      print SOURCES "$section ";
-    }
-    print SOURCES "\n";
-       }
-
-  close (SOURCES);
-
-       # return a ref to the hash of arrays (key of the hash is the method),
-       # the value is the array of package names for this method
-       return \%packlist;
-}
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub prt_package_list {
-
-       my (@lines,$plist,$method,$value);
-
-       foreach my $class (@classes) {
-               $plist=get_packages($class);
-               # test if hash contains any keys or values
-               unless (keys %{$plist}) {
-                       next;
-               }
-
-    print "Generate package list for class '$class'.\n" if $verbose;
-               open (PACKAGES,">$outdir/package_config/$class") 
-      || warn "Can't create $outdir/package_config/$class. $!\n";
-               while (($method, $value) = each %{$plist}) {
-                       print PACKAGES "PACKAGES $method\n";
-                       print PACKAGES join "\n",@{$value};
-                       print PACKAGES "\n";
-               }
-               close(PACKAGES);
-       }
-}
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub get_templates {
-
-       # get list of template-files defined for a class
-       my $class = shift;
-       my ($mesg,$entry,$str,$pfad,$name,$owner,$mode,$template_base,@template);
-
-       $mesg = $ldap->search(
-                       base => "$base",
-                       filter => "(&(cn=$class)(objectClass=FAItemplate))",
-                       attrs => ['cn']);
-       return if ($mesg->count() == 0); # skip if no such object exists
-       $mesg->code && die $mesg->error;
-
-       $entry=($mesg->entries)[0];
-       $template_base=$entry->dn;
-
-       $mesg = $ldap->search(
-                       base => "$template_base",
-                       filter => "(objectClass=FAItemplateEntry)",
-                       attrs => ['FAItemplateFile', 'FAItemplatePath', 'FAIowner', 'FAImode' ,'cn']);
-       return if ($mesg->count() == 0); # skip if no such object exists
-       $mesg->code && die $mesg->error;
-
-       foreach $entry ($mesg->entries) {
-               $name = $entry->get_value('cn');
-               $owner = $entry->get_value('FAIowner');
-               $owner = $entry->get_value('FAImode');
-               $pfad = $entry->get_value('FAItemplatePath');
-               chomp($pfad);
-               -d "${outdir}/files/${pfad}" || mkpath "${outdir}/files/${pfad}"
-      || warn "WARNING: Can't create subdir ${outdir}/files/${pfad} !$\n";
-    print "Generate template '$pfad' ($name) for class '$class'.\n" if $verbose;
-               write_file( "${outdir}/files/${pfad}/${class}", 
-                       $entry->get_value('FAItemplateFile'),$entry->get_value('FAImode'),$entry->get_value('FAIowner'));
-       }
-}
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub prt_templates {
-       my ($class);
-
-       foreach $class (reverse @classes) {
-               get_templates($class);
-       }
-}
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub get_debconf {
-
-       # gets list of packages defined for a class
-
-       my $class = shift; 
-       my ($mesg,$entry,$str,$debconf_base,@debconf);
-
-       $mesg = $ldap->search(
-                       base => "$base",
-                       filter => "(&(cn=$class)(objectClass=FAIpackageList))",
-                       attrs => ['cn']);
-       return if ($mesg->count() == 0); # skip if no such object exists
-       $mesg->code && die $mesg->error;
-
-       $entry=($mesg->entries)[0];
-       $debconf_base=$entry->dn;
-
-       $mesg = $ldap->search(
-                       base => "$debconf_base",
-                       filter => "(objectClass=FAIdebconfInfo)" ,
-                       attrs => [ 'FAIpackage', 'FAIvariable', 
-                               'FAIvariableType','FAIvariableContent']);
-       $mesg->code && die $mesg->error;
-
-       # undef @debconf;
-       foreach $entry ($mesg->entries) {
-               $str = sprintf "%s %s %s %s\n",
-               $entry->get_value('FAIpackage'),
-               $entry->get_value('FAIvariable'),
-               $entry->get_value('FAIvariableType'),
-               $entry->get_value('FAIvariableContent');
-               push @debconf, $str;
-       }
-       return @debconf;
-}
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub prt_debconf {
-
-       my @lines;
-       my $class;
-
-       foreach $class (@classes) {
-               @lines = get_debconf($class);
-               next until @lines;
-    print "Generate DebConf for class '$class'.\n" if $verbose;
-               open (DEBCONF,">${outdir}/debconf/${class}") || warn "Can't create $outdir/debconf/$class. $!\n";
-               print DEBCONF @lines;
-               close(DEBCONF);
-       }
-}
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub prt_scripts {
-       my ($class,@lines);
-
-       foreach $class (@classes) {
-               get_scripts($class);
-       }
-}
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub get_scripts {
-
-       # gets list of packages defined for a class
-
-       my $class = shift;
-       my ($mesg,$entry,$str,$script_base,$prio,$name,$script);
-
-       $mesg = $ldap->search(
-                       base => "$base",
-                       filter => "(&(cn=$class)(objectClass=FAIscript))",
-                       attrs => ['cn']);
-       return if ($mesg->count() == 0); # skip if no such object exists
-       $mesg->code && die $mesg->error;
-
-       $entry=($mesg->entries)[0];
-       $script_base= $entry->dn;
-
-       $mesg = $ldap->search(
-                       base => "$script_base",
-                       filter => "(objectClass=FAIscriptEntry)",
-                       attrs => ['FAIpriority', 'FAIscript', 'cn']);
-       return if ($mesg->count() == 0); # skip if no such object exists
-       $mesg->code && die $mesg->error;
-       
-       foreach $entry ($mesg->entries) {
-               $name  = $entry->get_value('cn');
-               $prio  = $entry->get_value('FAIpriority');
-               $script= sprintf('%02d-%s', $prio, $name);
-
-    -d "$outdir/scripts/$class" || mkpath "$outdir/scripts/$class" ||
-       warn "WARNING: Can't create subdir $outdir/scripts/$class !$\n";
-
-               write_file("${outdir}/scripts/${class}/${script}",
-                       $entry->get_value('FAIscript'), "0700");
-       }
-}
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub prt_hooks {
-       my ($class,@lines);
-
-       foreach $class (reverse @classes) {
-               get_hooks($class);
-       }
-}
-
-# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-sub get_hooks {
-
-       # gets list of packages defined for a class
-
-       my $class = shift;
-       my ($mesg,$entry,$str,$hook_base,$prio,$task,$hook,$name);
-
-       $mesg = $ldap->search(
-                       base => "$base",
-                       filter => "(&(cn=$class)(objectClass=FAIhook))",
-                       attrs => ['cn']);
-       return if ($mesg->count() == 0); # skip if no such object exists
-       $mesg->code && die $mesg->error;
-
-       $entry=($mesg->entries)[0];
-       $hook_base= $entry->dn;
-
-       $mesg = $ldap->search(
-                       base => "$hook_base",
-                       filter => "(objectClass=FAIhookEntry)",
-                       attrs => ['FAItask', 'FAIscript', 'cn']);
-       return if ($mesg->count() == 0); # skip if no such object exists
-       $mesg->code && die $mesg->error;
-       
-       foreach $entry ($mesg->entries) {
-               $name = $entry->get_value('cn');
-               $task = $entry->get_value('FAItask');
-               $prio = $entry->get_value('FAIpriority');
-               $hook = sprintf('%s.%s', ${task}, ${class});
-
-               write_file("${outdir}/hooks/${hook}", 
-                       $entry->get_value('FAIscript'), "0700");
-       }
-}
-
-# vim:ts=2:sw=2:expandtab:shiftwidth=2:syntax:paste
diff --git a/contrib/fai/goto-fai/secret b/contrib/fai/goto-fai/secret
deleted file mode 100644 (file)
index 7f480a8..0000000
+++ /dev/null
@@ -1 +0,0 @@
-your secret terminal-admin password