diff --git a/make/defs.mk b/make/defs.mk index 0e831fae..a5aec357 100644 --- a/make/defs.mk +++ b/make/defs.mk @@ -185,7 +185,7 @@ LOCAL_C += $(wildcard *.c) LOCAL_CPP += $(wildcard *.cc *.cpp *.C) LOCAL_H += $(wildcard *.h *.H) SFILES += $(wildcard *.S) -PREREQ_H += $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.h)) +#PREREQ_H += $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.h)) ALL_H += $(LOCAL_H) $(PREREQ_H) SRC_ALL_CPP += $(LOCAL_C) $(LOCAL_CPP) $(LOCAL_H) SRC_C += $(filter %.c, $(SRC_ALL_CPP)) @@ -193,12 +193,12 @@ SRC_CPP += $(filter %.cc %.cpp %.C, $(SRC_ALL_CPP)) OBJ += $(patsubst %.C,%.o,$(patsubst %.cpp,%.o,$(patsubst %.cc,%.o,$(patsubst %.c,%.o,$(filter %.c %.cpp %.cc %.C, $(SRC_ALL_CPP)))))) OBJ += $(patsubst %.S,%.o,$(SFILES)) -PREREQ_DIR += $(addprefix $(MODDIR)/,$(LOCAL_PREREQ)) -PREREQ_DONE += $(addsuffix /all.done,$(PREREQ_DIR)) -PREREQ_C += $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.c)) -PREREQ_CPP += $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.c)) \ - $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.cpp)) -PREREQ_CSRC += $(PREREQ_H) $(PREREQ_C) $(PREREQ_CPP) +#PREREQ_DIR += $(addprefix $(MODDIR)/,$(LOCAL_PREREQ)) +#PREREQ_DONE += $(addsuffix /all.done,$(PREREQ_DIR)) +#PREREQ_C += $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.c)) +#PREREQ_CPP += $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.c)) \ +# $(foreach dir,$(PREREQ_DIR),$(wildcard $(dir)/*.cpp)) +#PREREQ_CSRC += $(PREREQ_H) $(PREREQ_C) $(PREREQ_CPP) CONTRIB_MOD += $(addprefix contrib/,$(CONTRIB_LIBS)) REQUIRED := $(CONTRIB_MOD) $(REQUIRED) @@ -626,8 +626,8 @@ ifeq ($(USE_MPATROL),true) endif ifeq ($(USE_VALGRIND),true) - CFLAGS += -include /usr/include/valgrind/memcheck.h -D_VALGRIND_ - CPPFLAGS += -include /usr/include/valgrind/memcheck.h -D_VALGRIND_ + #CFLAGS += -include /usr/include/valgrind/memcheck.h -D_VALGRIND_ + #CPPFLAGS += -include /usr/include/valgrind/memcheck.h -D_VALGRIND_ # LDFLAGS += endif @@ -708,7 +708,10 @@ ifeq ($(USE_COMPILER_OPTIMIZATION_OPTS),true) else NO_OPT_FLAGS = \ -fno-inline-functions-called-once \ - -fno-tree-loop-optimize + -fno-tree-loop-optimize \ + -fno-early-inlining + +# -fconserve-stack _NO_OPT_FLAGS = \ -O0 \ @@ -758,6 +761,7 @@ USE_JUX = true INCLUDE += -I$(JUX2_DIR)/include LIBFLAGS += -L$(JUX2_DIR)/lib -ljux2 EXE_SEARCH_PATH += $(JUX2_DIR)/bin +PREREQ += JUX2 endif ifeq ($(USE_JUX),true) @@ -776,6 +780,7 @@ USE_JUX_SHARED = true INCLUDE += -I$(JUX_DIR)/include LIBFLAGS += -L$(JUX_DIR)/lib -ljux EXE_SEARCH_PATH += $(JUX_DIR)/bin +PREREQ += JUX endif ifeq ($(USE_JUX_CLIENT_JAVA),true) @@ -785,6 +790,7 @@ RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)jux-client-java-run = $(JUX_CLIENT RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)jux-client-java-devel = $(JUX_CLIENT_JAVA_VERSION) USE_JUX_CLIENT = true LIBFLAGS += -L$(JUX_CLIENT_JAVA_DIR)/lib -ljux-client-java +PREREQ += JUX_CLIENT_JAVA endif ifeq ($(USE_JUX_CLIENT),true) @@ -797,6 +803,7 @@ USE_JUX_SHARED = true INCLUDE += -I$(JUX_CLIENT_DIR)/include LIBFLAGS += -L$(JUX_CLIENT_DIR)/lib -ljux-client EXE_SEARCH_PATH += $(JUX_CLIENT_DIR)/bin +PREREQ += JUX_CLIENT endif ifeq ($(USE_JUX_SHARED),true) @@ -811,6 +818,7 @@ USE_FEEDFS_UTILS = true USE_BTOOLS = true INCLUDE += -I$(JUX_SHARED_DIR)/include LIBFLAGS += -L$(JUX_SHARED_DIR)/lib -ljux-shared +PREREQ += JUX_SHARED endif ifeq ($(USE_CCASFS),true) @@ -823,6 +831,7 @@ USE_CCONSOLE = true INCLUDE += -I$(CCASFS_DIR)/include #LIBFLAGS += -L$(CCONSOLE_DIR)/lib -lcconsole EXE_SEARCH_PATH += $(CCASFS_DIR)/bin +PREREQ += CCASFS endif ifeq ($(USE_CCONSOLE),true) @@ -839,6 +848,7 @@ LIBFLAGS += -L$(ENV_PREFIX)/opt/$(FLAVOUR_PATH_PREFIX)dspider/f endif LIBFLAGS += -ldspider-cconsole EXE_SEARCH_PATH += $(CCONSOLE_DIR)/bin +PREREQ += CCONSOLE endif ifeq ($(USE_DSPCD),true) @@ -854,6 +864,7 @@ USE_USERVER = true INCLUDE += -I$(DSPCD_DIR)/include LIBFLAGS += -L$(DSPCD_EXE_PREFIX)/lib -ldspcd EXE_SEARCH_PATH += $(DSCD_DIR)/bin +PREREQ += DSPCD endif ifeq ($(USE_DSPROUT),true) @@ -868,6 +879,7 @@ USE_USERVER = true INCLUDE += -I$(DSPROUT_DIR)/include LIBFLAGS += -L$(DSPROUT_EXE_PREFIX)/lib -ldsprout EXE_SEARCH_PATH += $(DSPROUT_DIR)/bin +PREREQ += DSPROUT endif ifeq ($(USE_DSPIDER_SHARED),true) @@ -881,6 +893,7 @@ USE_YTOOLS = true INCLUDE += -I$(DSPIDER_SHARED_DIR)/include LIBFLAGS += -L$(DSPIDER_SHARED_EXE_PREFIX)/lib -ldspider-shared EXE_SEARCH_PATH += $(DSPIDER_SHARED_DIR)/bin +PREREQ += DSPIDER_SHARED endif ifeq ($(USE_FEEDFS_QT),true) @@ -894,6 +907,7 @@ USE_YTOOLS = true INCLUDE += -I$(FEEDFS_QT_DIR)/include LIBFLAGS += -L$(FEEDFS_QT_DIR)/lib -lfeedfs-qt EXE_SEARCH_PATH += $(FEEDFS_QT_DIR)/bin +PREREQ += FEEDFS_QT endif ifeq ($(USE_FEEDFS_WT),true) @@ -909,6 +923,7 @@ USE_WT_JANNET = true INCLUDE += -I$(FEEDFS_WT_DIR)/include LIBFLAGS += -L$(FEEDFS_WT_DIR)/lib -lfeedfs-wt EXE_SEARCH_PATH += $(FEEDFS_WT_DIR)/bin +PREREQ += FEEDFS_WT endif ifeq ($(USE_FEEDFS_GUI),true) @@ -923,6 +938,7 @@ USE_FEEDFS_QT = true INCLUDE += -I$(FEEDFS_GUI_DIR)/include LIBFLAGS += -L$(FEEDFS_GUI_DIR)/lib -lfeedfs-gui EXE_SEARCH_PATH += $(FEEDFS_GUI_DIR)/bin +PREREQ += FEEDFS_GUI endif ifeq ($(USE_FEEDFSD),true) @@ -935,6 +951,7 @@ USE_YTOOLS = true INCLUDE += -I$(FEEDFSD_DIR)/include LIBFLAGS += -L$(FEEDFSD_DIR)/lib -lfeedfsd EXE_SEARCH_PATH += $(FEEDFSD_DIR)/bin +PREREQ += FEEDFSD endif ifeq ($(USE_FEEDFS_LDAP),true) @@ -947,6 +964,7 @@ USE_YTOOLS = true INCLUDE += -I$(FEEDFS_LDAP_DIR)/include LIBFLAGS += -L$(FEEDFS_LDAP_DIR)/lib -lfeedfs-ldap -lldap EXE_SEARCH_PATH += $(FEEDFS_LDAP_DIR)/bin +PREREQ += FEEDFS_LDAP endif ifeq ($(USE_FEEDFS_UTILS),true) @@ -960,6 +978,7 @@ USE_YTOOLS = true INCLUDE += -I$(FEEDFS_UTILS_DIR)/include LIBFLAGS += -L$(FEEDFS_UTILS_DIR)/lib -lfeedfs-utils EXE_SEARCH_PATH += $(FEEDFS_UTILS_DIR)/bin +PREREQ += FEEDFS_UTILS endif ifeq ($(USE_FEEDFS_NET),true) @@ -975,6 +994,7 @@ USE_YTOOLS = true INCLUDE += -I$(FEEDFS_NET_DIR)/include LIBFLAGS += -L$(FEEDFS_NET_DIR)/lib -lfeedfs-net EXE_SEARCH_PATH += $(FEEDFS_NET_DIR)/bin +PREREQ += FEEDFS_NET endif ifeq ($(USE_FEEDFS_LOCAL),true) @@ -986,6 +1006,7 @@ USE_FEEDFS = true # no build-time linkage necessary, no headers exported LD_LIB_PATH += $(FEEDFS_LOCAL_DIR)/lib EXE_SEARCH_PATH += $(FEEDFS_LOCAL_DIR)/bin +PREREQ += FEEDFS_LOCAL endif ifeq ($(USE_FEEDFS_REWRITE),true) @@ -998,6 +1019,7 @@ USE_FEEDFS = true LD_LIB_PATH += $(FEEDFS_REWRITE_DIR)/lib EXE_SEARCH_PATH += $(FEEDFS_REWRITE_DIR)/bin LIBFLAGS += -lboost_regex +PREREQ += FEEDFS_REWRITE endif ifeq ($(USE_FEEDFS_FMEMFS),true) @@ -1011,6 +1033,7 @@ LD_LIB_PATH += $(FEEDFS_FMEMFS_DIR)/lib INCLUDE += -I$(FEEDFS_FMEMFS_DIR)/include LIBFLAGS += -L$(FEEDFS_FMEMFS_DIR)/lib -lfeedfs-fmemfs EXE_SEARCH_PATH += $(FEEDFS_FMEMFS_DIR)/bin +PREREQ += FEEDFS_FMEMFS endif ifeq ($(USE_FEEDFS_SYSLOG),true) @@ -1024,6 +1047,7 @@ LD_LIB_PATH += $(FEEDFS_SYSLOG_DIR)/lib INCLUDE += -I$(FEEDFS_SYSLOG_DIR)/include LIBFLAGS += -L$(FEEDFS_SYSLOG_DIR)/lib -lfeedfs-syslog EXE_SEARCH_PATH += $(FEEDFS_SYSLOG_DIR)/bin +PREREQ += FEEDFS_SYSLOG endif ifeq ($(USE_FEEDFS_OBJECTS),true) @@ -1036,6 +1060,7 @@ USE_YTOOLS = true INCLUDE += -I$(FEEDFS_OBJECTS_DIR)/include LIBFLAGS += -L$(FEEDFS_OBJECTS_DIR)/lib -lfeedfs-objects EXE_SEARCH_PATH += $(FEEDFS_OBJECTS_DIR)/bin +PREREQ += FEEDFS_OBJECTS endif ifeq ($(USE_FEEDFS),true) @@ -1049,6 +1074,7 @@ USE_AUTH = true INCLUDE += -I$(FEEDFS_DIR)/include LIBFLAGS += -L$(FEEDFS_DIR)/lib -lfeedfs EXE_SEARCH_PATH += $(FEEDFS_DIR)/bin +PREREQ += FEEDFS endif ifeq ($(USE_USERVER),true) @@ -1061,6 +1087,7 @@ USE_YTOOLS = true INCLUDE += -I$(USERVER_DIR)/include LIBFLAGS += -L$(USERVER_DIR)/lib -luserver EXE_SEARCH_PATH += $(USERVER_DIR)/bin +PREREQ += USERVER endif ifeq ($(USE_XCHANGE),true) @@ -1073,6 +1100,7 @@ USE_VALDI = true INCLUDE += -I$(XCHANGE_DIR)/include LIBFLAGS += -L$(XCHANGE_DIR)/lib -lxchange EXE_SEARCH_PATH += $(XCHANGE_DIR)/bin +PREREQ += XCHANGE endif ifeq ($(USE_BTOOLS),true) @@ -1084,6 +1112,7 @@ USE_YTOOLS = true INCLUDE += -I$(BTOOLS_DIR)/include LIBFLAGS += -L$(BTOOLS_DIR)/lib -ldspider-btools EXE_SEARCH_PATH += $(BTOOLS_DIR)/bin +PREREQ += BTOOLS endif ifeq ($(USE_JACKJART),true) @@ -1095,6 +1124,7 @@ USE_YTOOLS = true INCLUDE += -I$(JACKJART_DIR)/include LIBFLAGS += -L$(JACKJART_DIR)/lib -ldspider-jackjart EXE_SEARCH_PATH += $(JACKJART_DIR)/bin +PREREQ += JACKJART endif ifeq ($(USE_JACKRTAI),true) @@ -1106,6 +1136,7 @@ USE_YTOOLS = true INCLUDE += -I$(JACKRTAI_DIR)/include LIBFLAGS += -L$(JACKRTAI_DIR)/lib -ldspider-jackrtai EXE_SEARCH_PATH += $(JACKRTAI_DIR)/bin +PREREQ += JACKRTAI endif ifeq ($(USE_JACKDUMMY),true) @@ -1117,6 +1148,7 @@ USE_YTOOLS = true INCLUDE += -I$(JACKDUMMY_DIR)/include LIBFLAGS += -L$(JACKDUMMY_DIR)/lib -ldspider-jackdummy EXE_SEARCH_PATH += $(JACKDUMMY_DIR)/bin +PREREQ += JACKDUMMY endif ifeq ($(USE_ALSART),true) @@ -1128,6 +1160,7 @@ USE_YTOOLS = true INCLUDE += -I$(ALSART_DIR)/include LIBFLAGS += -L$(ALSART_DIR)/lib -lalsart EXE_SEARCH_PATH += $(ALSART_DIR)/bin +PREREQ += ALSART endif ifeq ($(USE_DSPFS),true) @@ -1139,6 +1172,7 @@ USE_YTOOLS = true INCLUDE += -I$(DSPFS_DIR)/include LIBFLAGS += -L$(DSPFS_DIR)/lib -ldspfs EXE_SEARCH_PATH += $(DSPFS_DIR)/bin +PREREQ += DSPFS endif ifeq ($(USE_AUTH),true) @@ -1151,6 +1185,7 @@ USE_VALDI = true INCLUDE += -I$(AUTH_DIR)/include LIBFLAGS += -L$(AUTH_DIR)/lib -lauth EXE_SEARCH_PATH += $(AUTH_DIR)/bin +PREREQ += AUTH endif ifeq ($(USE_VALDI),true) @@ -1160,8 +1195,10 @@ RPM_REQUIRES_RUN += $(FLAVOUR_PREFIX)valdi-run = $(VALDI_VERSION) RPM_REQUIRES_DEVEL += $(FLAVOUR_PREFIX)valdi-devel = $(VALDI_VERSION) USE_YTOOLS = true #INCLUDE += -I$(VALDI_DIR)/include +LIBFLAGS += -L$(VALDI_DIR)/lib #LIBFLAGS += -L$(VALDI_DIR)/lib -lvaldi EXE_SEARCH_PATH += $(VALDI_DIR)/bin +PREREQ += VALDI endif ifeq ($(USE_WT_JANNET),true) @@ -1175,6 +1212,8 @@ USE_FEEDFS = true INCLUDE += -I$(WT_JANNET_DIR)/include LD_LIB_PATH += $(WT_JANNET_DIR)/lib EXE_SEARCH_PATH += $(WT_JANNET_DIR)/bin +PREREQ += WT_JANNET +CATCH_ONLY_YERROR = false endif ifeq ($(USE_APACHE2_JANNET),true) @@ -1186,6 +1225,7 @@ USE_FEEDFS = true # no build-time linkage necessary, no headers exported LD_LIB_PATH += $(APACHE2_JANNET_DIR)/lib EXE_SEARCH_PATH += $(APACHE2_JANNET_DIR)/bin +PREREQ += APACHE2_JANNET endif ifeq ($(USE_FPTEST),true) @@ -1197,6 +1237,7 @@ USE_YTOOLS = true INCLUDE += -I$(FPTEST_DIR)/include LIBFLAGS += -L$(FPTEST_DIR)/lib -lfptest -L$(HOME)/opt/iowkit/lib -liowkit EXE_SEARCH_PATH += $(FPTEST_DIR)/bin +PREREQ += FPTEST endif ifeq ($(USE_YTOOLS),true) @@ -1213,6 +1254,7 @@ endif INCLUDE += -I$(YTOOLS_DIR)/include LIBFLAGS += -L$(YTOOLS_DIR)/lib -lytools EXE_SEARCH_PATH += $(YTOOLS_DIR)/bin +PREREQ += YTOOLS endif ifeq ($(USE_SCOPE_CASMIX),true) diff --git a/make/rules.mk b/make/rules.mk index a5ec4e0c..2986a3f5 100644 --- a/make/rules.mk +++ b/make/rules.mk @@ -185,8 +185,8 @@ strip.done: $(EXE_ALL) $(STRIP) $^ touch $@ -%.done: - make -$(MAKEFLAGS) -C $(shell dirname $@) `basename $@` +#%.done: +# make -$(MAKEFLAGS) -C $(shell dirname $@) `basename $@` .%.o.dep.mk: %.cpp $(BUILD_HDR) $(CC) -M $(CPPFLAGS) $(DEPEND_CPPFLAGS) $< -o $@ @@ -321,6 +321,7 @@ $$(BUILD_$(1)DIR)/%: % $$(TOPDIR)/dir_build_$(1).done @if [ ! $$< -ef $$@ -a "`echo $$< | sed 's/\..*//'`" != local ]; then \ echo install -m $($(1)MODE) $$< $$@ ;\ install -m $($(1)MODE) $$< $$@ ;\ + rm -f $$(TOPDIR)/dirs.done ;\ fi $$(TOPDIR)/dir_install_$(1).done: diff --git a/make/topdir.mk b/make/topdir.mk index 543d49b6..a6183379 100644 --- a/make/topdir.mk +++ b/make/topdir.mk @@ -11,7 +11,7 @@ ifneq ($(wildcard $(TOPDIR)/make/defs.mk),) endif include $(MODDIR)/make/defs.mk -include $(MODDIR)/make/subdirs.mk +include $(MODDIR)/make/dirs.mk include $(MODDIR)/make/rpmdist.mk include $(MODDIR)/make/rules.mk include $(MODDIR)/make/doc-rules.mk diff --git a/scripts/integrate-distro.sh b/scripts/integrate-distro.sh new file mode 100644 index 00000000..1696d786 --- /dev/null +++ b/scripts/integrate-distro.sh @@ -0,0 +1,735 @@ +#!/bin/sh + +# -- defaults +# install_dev=/dev/sdb +arch=`uname -m` +o_name=suse-11.4 +cmd=install +initrd_modules="aufs via e1000 e1000e myri10ge forcedeth" +umask 0022 + +unused_pkgs=" + sysvinit-systemd +" + +# -- pciutils +# used by jux, should be done by grepping /proc-files + +# -- sysvinit +# systemd-sysvinit boots, but doesn't work cleanly as of now + +payload_pkgs=" + + kernel + kernel-default-2.6.37.6~jng135-4 + aufs + aufs-kmp + mkinitrd + sysvinit + grub + splashy + + kbd + + insserv + pam_ldap + pam_apparmor + gnome-keyring-pam + + portmap + proftpd + proftpd-ldap + xntp + rsyslog + openldap2 + courier-authlib-ldap + bind + xinetd + apache2 + + unscd + nss_ldap + + fuse + mdadm + device-mapper + + dhcpcd + nfs-client + sudo + sysconfig + glibc-locale + + xorg-x11 + xorg-x11-driver-video + xorg-x11-fonts-100dpi + xorg-x11-fonts-75dpi + xorg-x11-fonts-cyrillic + xorg-x11-fonts-scalable + xorg-x11-fonts-syriac + xorg-x11-libs + xorg-x11-libxcb + xorg-x11-man + xorg-x11-sdk + xorg-x11-server + xorg-x11-server-glx + xorg-x11-Xnest + xorg-x11-Xvfb + xorg-x11-Xvnc + + man + findutils-locate + vim + grep + + iputils strace + lsof + + wget lukemftp + openssh + + tar zip unzip + + gcc-c++ libtool autoconf automake make + cvs + patch + + ytools-run + pciutils + jux-run + jux-client-run + feedfsd-run + snmp-manager-run +" +# -- functions +usage() +{ + echo " + usage: $myname -h + $myname [-d target-device] [-n target-name] [-p file with root password] [install|mount|unmount] +" + [ "$1" ] && exit $1 +} + +get_opts() +{ + set -- `getopt 'hd:n:a:p:' $*` + while [ "$1" != -- ] ; do + case "$1" in + -h) + usage 0 + ;; + -d) + install_dev=$2 + shift + ;; + -n) + o_name=$2 + shift + ;; + -a) + arch=$2 + shift + ;; + -p) + root_password_file=$2 + shift + ;; + *) + usage 1 + ;; + esac + shift + done + shift + + [ "$1" ] && cmd="$1" +} + +log() +{ + echo $@ >&2 +} + +run() +{ + local exit_on_error=0 + + while [[ "$1" =~ ^- ]]; do + case $1 in + -e) + exit_on_error=1 + esac + shift + done + log =========== running $@ + $@ + local r=$? + if [ "$exit_on_error" = 1 -a $r != 0 ]; then + die "exiting after error during command \"$@\"" + fi + return $r +} + +die() +{ + log "$@" + exit 1 +} + +_cat() +{ + cat | sed 's/^[ ]*|//' +} + +check_var_set() +{ + local var val + for var in $@; do + eval val=\$$var + [ "$val" ] || { + log "$var is not set" + return 1 + } + done + return 0 +} + +_run_chroot() +{ + local cmd + set +x + while read cmd; do + cmd=`echo $cmd | sed 's/[ ]*#.*//'` + [ "$cmd" ] || continue + echo == running LANG=POSIX chroot $root $cmd + LANG=POSIX chroot $root $cmd || { + die "failed to run >$cmd<" + } + done + set -x +} + +run_chroot() +{ + echo == running LANG=POSIX chroot $root "$@" + LANG=POSIX chroot $root "$@" || { + die "failed to run >$@<, exiting" + } +} + +run_parted() +{ + while read cmd; do + run parted --script $install_dev $cmd + done +} + +create_partition_table() +{ + assert_not_mounted + + _cat << EOT | run_parted + |mklabel gpt + |mkpart primary 1M 2M + |name 1 grub + |set 1 bios_grub + |mkpart primary 2M 10G + |name 2 boot + |mkpart primary 10G 40G + |name 3 swap + |mkpart primary 40G 100% + |name 4 root +EOT + + grub_boot_partition_num=0 + grub_slash_boot_partition_num=1 +} + +create_file_systems() +{ + run mkfs -t ext4 $install_dev_boot + run mkswap $install_dev_swap + run mkfs -t ext4 $install_dev_root +} + +canonicalize() +{ + readlink -f $1 2>/dev/null +} + +check_mount() +{ + local canonicalized=`canonicalize $root/$1` + [ ! "$canonicalized" ] && return 1 + grep -q $canonicalized /proc/mounts || return 1 + return 0 +} + +assert_not_mounted() +{ + if grep $install_dev /proc/mounts; then + echo "$install_dev is mounted, exiting" + exit 1 + fi +} + +setup_bind_mounts() +{ + local fs + for fs in /dev /sys /proc; do + check_mount $fs || { + run -e mkdir -p -m 755 $root$fs + run -e mount -o bind $fs $root$fs + } + done +} + +mount_devices() +{ + check_mount / || { + run -e install -d -m 755 $root + run -e mount $install_dev_root $root + } + + check_mount /boot || { + run -e mkdir -p -m 755 $root/boot + run -e mount $install_dev_boot $root/boot + } +} + +unmount_devices() +{ + local devices="/proc /sys /dev /boot /" + [ "$1" ] && devices="$@" + local d + for d in $devices; do + check_mount $d && run umount $root$d + done +} + +zypper_repos_base() +{ + _cat << EOT | grep -v " #" + |distro-oss ftp://ftp/pub/mirror/suse/distribution/11.4/repo/oss +EOT +} + +zypper_repos_update() +{ + zypper_repos_base + _cat << EOT | grep -v " #" + |distro-non-oss ftp://ftp/pub/mirror/suse/distribution/11.4/repo/non-oss + |update ftp://ftp/pub/mirror/suse/update/11.4 + |jengelh ftp://ftp/pub/mirror/gwdg/pub/linux/misc/suser-jengelh/openSUSE_11.4 +EOT +} + +zypper_repos() +{ + zypper_repos_update + _cat << EOT | grep -v "^ *#" + |#ftp.jannet.de ftp://dspadm:dspasswd@ftp.jannet.de/pub/packages/linux/suse/11.4/inst-source + |ftp.jannet.de ftp://dspadm:dspasswd@ftp/pub/mirror/jannet/ftp/pub/packages/linux/suse/11.4/inst-source + |ftp.priv.lcl ftp://dspadm:dspasswd@ftp/pub/local/packages/suse/11.4 +EOT +} + +setup_zypper_repos() +{ + zypper_repos | while read name uri; do + chroot $root zypper $zypper_global_opts ar $uri $name + done +} + +host_zypper() +{ + local repos=$1 + shift + local distros=`zypper_repos_$repos | awk '{print "--plus-repo " $2 }'` + zypper $zypper_global_opts --root $root $distros $@ +} + +init_root_password_file() +{ + [ "$root_password_file" ] || + root_password_file=$HOME/.$myname/root-pass + + [ ! -f $root_password_file ] && { + local dir=`dirname $root_password_file` + mkdir -m 0755 $dir + dd if=/dev/random of=/dev/stdout bs=1 count=4 2>/dev/null | + hexdump | sed '/^0000000/ !d; s/0000000 //; s/ //g' > $root_password_file + chmod 600 $root_password_file + } +} + +make_etc_fstab() +{ + _cat< $map + #dd if=$root/boot/grub/stage1 of=$install_dev count=512 count=1 + _cat << EOT | sed 's/#.*//' | run grub --batch --device-map=$map + |root $slash_boot + |setup ($drivename) + |#setup --stage2=/boot/grub/stage2 --force-lba $boot $slash_boot + |quit +EOT + + make_sysconfig_bootloader > $root/etc/sysconfig/bootloader + make_boot_menu > $root/boot/grub/menu.lst + + (cd $root/boot; ln -sf vmlinuz-$kernel_version vmlinuz) + + run_chroot /sbin/mkinitrd \ + -B \ + -k /boot/vmlinuz-$kernel_version \ + -i /boot/initrd-local-$kernel_version \ + -M /boot/System.map-$kernel_version \ + -m "$initrd_modules" \ + -d $install_dev_root + + (cd $root/boot; ln -sf initrd-local-$kernel_version initrd-local) +} + +setup_boot_loader_net() +{ + run_chroot /sbin/mkinitrd \ + -B \ + -k /boot/vmlinuz-$kernel_version \ + -i /boot/initrd-netboot-$kernel_version \ + -M /boot/System.map-$kernel_version \ + -m "$initrd_modules" \ + -d jan://blub/dings + + (cd $root/boot; ln -sf initrd-netboot-$kernel_version initrd-netboot) +} + +undo_rpmnew() +{ + set +x + local n o + # reset config files to rpm versions + find $root -name '*.rpmnew' | while read n; do + o=`echo $n | sed 's/\.rpmnew//'` + log renaming $n to $o + mv $n $o + done + set -x +} + +setup_root_directory() +{ + if [ -w "$install_dev" ]; then + + if [ ! "$non_interactive" ]; then + + local answer + echo -n "Continuing will delete ALL data on $install_dev. Are you sure [y|n]? " + read answer + if [ "$answer" != y ]; then + exit 1 + fi + fi + + create_partition_table + create_file_systems + mount_devices + else + + if [ ! "$non_interactive" ]; then + + if [ -e $root ]; then + + local answer + echo -n "Continuing will delete ALL data below $root. Are you sure [y|n]? " + read answer + if [ "$answer" != y ]; then + exit 1 + fi + fi + fi + + if [ ! "$root" ]; then + echo "cowardly not removing empty root directory" + exit 1 + fi + + if [[ "$root" =~ home ]]; then + echo "cowardly not removing directory matching \"home\"" + exit 1 + fi + + set +e + unmount_devices /proc /sys /dev + run rm -rf $root + run install -d -m 755 $root + fi +} + +insserv_all() +{ + local services=" + sshd + jux + " + + local service + for service in $services; do + run_chroot insserv -e $service + done +} + +cmd_install() +{ + if true; then + local c + + #set -e + + #remove_bind_mounts + setup_root_directory + setup_bind_mounts + + mkdir -p -m 755 $root/etc + mkdir -p -m 755 $root/etc/openldap + for c in \ + /etc/passwd \ + /etc/group \ + /etc/nsswitch.conf \ + /etc/certs \ + /etc/openldap/slapd.conf \ + /etc/sysconfig/keyboard \ + /etc/sysconfig/clock \ + ; do + install -d -m 755 `dirname $root$c` + cp -rp $c $root$c + done + + make_netboot_etc_ldap_conf > $root/etc/ldap.conf.netboot + make_netboot_etc_openldap_ldap_conf > $root/etc/openldap/ldap.conf.netboot + make_netboot_etc_hosts > $root/etc/hosts.netboot + + make_etc_hosts > $root/etc/hosts + make_etc_fstab > $root/etc/fstab + + host_zypper base install --auto-agree-with-licenses coreutils + host_zypper update install --auto-agree-with-licenses zypper + + #undo_rpmnew + setup_zypper_repos + + chroot $root zypper $zypper_global_opts refresh + chroot $root zypper $zypper_global_opts install --auto-agree-with-licenses $payload_pkgs + # chroot $root zypper $zypper_global_opts -t srcpackage --download-only $payload_pkgs + fi # test + kernel_version=`readlink -f $root/boot/vmlinuz 2>/dev/null | xargs basename | sed 's/vmlinuz-//'` + + [ "$install_dev" ] && setup_boot_loader_local + setup_boot_loader_net + + insserv_all + + cat $root_password_file | chroot $root /usr/bin/passwd --stdin + chroot $root /sbin/ldconfig + chroot $root /sbin/SuSEconfig + chroot $root /opt/jux/bin/jux-init-namespace.sh + + for c in \ + /etc/pam.d/* \ + ; do + cp -rp $c $root$c + done + [ -w $install_dev ] && unmount_devices +} + +# -- here we go + +myname=`basename $0` +zypper_global_opts="--non-interactive --gpg-auto-import-keys --no-gpg-checks" +date=`date` + +get_opts "$@" + +init_root_password_file + +if [ `whoami` != root ]; then + sudo $0 $@ -p $root_password_file + exit $? +fi + +name=$o_name-$arch +root=/srv/nfs/boot/distros/$name/ro + +# -- set up variables denoting devices + +if [ "$install_dev" ]; then + + install_dev_boot=$install_dev""2 + install_dev_swap=$install_dev""3 + install_dev_root=$install_dev""4 + + case $install_dev in + /dev/sda) install_grub_dev_num=0;; + /dev/sdb) install_grub_dev_num=1;; + /dev/sdc) install_grub_dev_num=2;; + /dev/sdd) install_grub_dev_num=3;; + /dev/sde) install_grub_dev_num=4;; + *) + log "device \"$install_dev\" doesn't map into a known grub device number, edit $myname to add support" + exit 1;; + esac + + run_dev=/dev/sda + run_dev_boot=$run_dev""2 + run_dev_swap=$run_dev""3 + run_dev_root=$run_dev""4 + + run_grub_dev_num=0 + + ## test > + #grub_boot_partition_num=0 + #grub_slash_boot_partition_num=1 + #mount_devices + ## test < +fi + +case $cmd in +install) + cmd_install + exit $? + ;; + +mount) + [ "$install_dev" ] && mount_devices + setup_bind_mounts + exit $? + ;; +unmount) + unmount_devices + exit $? + ;; +*) + log "unknown command \"$cmd\"" + usage 1 + ;; +esac +exit 0