]> git.donarmstrong.com Git - neurodebian.git/commitdiff
Merge branch 'master' into enh/wheezy-vm
authorYaroslav Halchenko <debian@onerussian.com>
Fri, 7 Dec 2012 18:03:04 +0000 (13:03 -0500)
committerYaroslav Halchenko <debian@onerussian.com>
Fri, 7 Dec 2012 18:03:04 +0000 (13:03 -0500)
* master: (32 commits)
  ENH: nd_build_testrdepends -- sign the temporary repository with the package (use apt-ftparchive)
  ENH: Make neurodebian.cfg also visible on the website so we could easily fetch up-to-date version if needed
  ENH: improved nd_querycfg a bit: query content of a section or list of sections
  Changes for Lin4Neuro from Kiyotaka Nemoto
  Thomas's suggested description for the mirror
  Remove umlaut's from de-m mirror name -- breaks the build
  Added de-m mirror (INCF G-Node), Thanks Thomas Wachtler
  alias for openvibe
  Adding ubuntu quantal (nd12.10) into "supported"
  little TODO in nd_createappliance on preseeding solution
  brochure -- very minor from native speakers
  more items and a bit of indentation -- printing now
  added rudimentary README.txt on how to build brochure
  updated VM page for 6.0.6 (with the date when VM was wrapped on 1st of Oct)
  add remake to give it a page
  changelog + nd-vmsetupwizard: Preparing 0.29 release of neurodebian for updated nd-vmsetupwizard
  Make ymax dynamic (5% above current max value), per each distribution + labels for every other month
  A slight overhaul of the brochure -- nothing radical but at least it is up to date now
  injected spykeview
  BF: added an alias for neo (python-neo)
  ...

Conflicts:
tools/nd-vmsetupwizard
vm/tools/nd_createappliance

debian/neurodebian-guest-additions.postinst [changed mode: 0644->0755]
tools/nd-vmsetupwizard
vm/d-i/tools/initial_setup
vm/d-i/wheezy/initial_setup [new file with mode: 0755]
vm/d-i/wheezy/preseed.cfg.in [new file with mode: 0644]
vm/tools/nd_createappliance

old mode 100644 (file)
new mode 100755 (executable)
index 1db5889..6a5336e
@@ -1,11 +1,22 @@
 #!/bin/bash -e
 
-gdm_conf=/etc/gdm/gdm.conf
-if [ "$1" = "configure" -o "$1" = "abort-upgrade" ]; then
-    if [ -z "$(grep 'AutomaticLogin=brain' $gdm_conf)" ]; then
-        echo "Enabling autologin of user 'brain'."
+# GNOME2
+_set_gdm_auto_login() {
+    gdm_conf="$1"
+       gnome_ver="$2"
+    if [ ! -e $gdm_conf ]; then
+               echo "I: No config file $gdm_conf GNOME $gnome_ver found"
+    elif [ -z "$(grep 'AutomaticLogin=brain' $gdm_conf)" ]; then
+        echo "I: Enabling autologin of user 'brain' for GNOME $gnome_ver."
         sed -i -e 's/^\[daemon\]$/\[daemon\]\nAutomaticLoginEnable=true\nAutomaticLogin=brain\n/' $gdm_conf
     fi
+}
+
+gdm_conf=/etc/gdm/gdm.conf
+if [ "$1" = "configure" -o "$1" = "abort-upgrade" ]; then
+
+    _set_gdm_auto_login /etc/gdm/gdm.conf 2
+    _set_gdm_auto_login /etc/gdm3/daemon.conf 3
 
     # update gconf defaults tree
     update-gconf-defaults
index 496ccf173ef74afb1577c9668b132dfc56819442..337b4bb68ba19b663347494cf8b2e0c4c2181abe 100755 (executable)
@@ -127,7 +127,6 @@ FALSE "Python: Scientific stack" "ipython01x,spyder,python-matplotlib,python-pan
 FALSE "R" "r-recommended" \
 FALSE "TeX Live" "texlive" \
 FALSE "Adobe Flash browser plugin" "flashplugin-nonfree" \
-FALSE "Sun Java browser plugin" "sun-java6-plugin" \
 || true)
 
 if [ -n "$packages" ]; then
index 6c2e5af4ba0a517e7d4e9e442dfe4a963721f401..67c31530eab6592e4f771438723dd662f9f60c14 100755 (executable)
@@ -113,7 +113,7 @@ find /lib/modules/*$darch -iname vboxsf.ko | grep -q .
 
 apt-get install --no-install-recommends -y \
  gnome-core mc evince bash-completion ntpdate file-roller gnome-utils \
- gnome-themes eog vim reportbug \
+ gnome-themes gnome-disk-utility network-manager-gnome eog vim reportbug \
  software-center gdebi gedit-plugins gnome-media synaptic menu less libxp6
 
 # Clean-up installed development files which got pulled in for
diff --git a/vm/d-i/wheezy/initial_setup b/vm/d-i/wheezy/initial_setup
new file mode 100755 (executable)
index 0000000..63532b4
--- /dev/null
@@ -0,0 +1,174 @@
+#!/bin/bash
+
+# play safe
+set -e
+set -u
+
+# Standard Debian install
+
+# prepare on hydra and use debproxy for speed
+
+# have dedicated hard-drives for swap and home
+
+# expert install
+
+# hostname: neurodebian
+# domain: ''
+
+# Needs to be assured since it got reset to debian
+hostname neurodebian  # this is not a permanent change
+echo "neurodebian" >| /etc/hostname  # make it permanent
+sed -i -e 's/^127\.0\.1\.1.*/127.0.1.1\tneurodebian/g' /etc/hosts
+
+# all file in one partition
+
+# root: not there
+# user: brain
+# pwd: neurodebian
+
+
+# Do a minimal install
+# --------------------
+
+# All files in one partition/
+# just base system, run selection, but no tasks (not even 'Standard system')
+
+# set root password to 'neurodebian' too
+#echo "Set root passwd:"
+#passwd root
+
+apt-get install --no-install-recommends -y etckeeper
+
+# setup etckeeper
+git config --global user.name NeuroDebian
+git config --global user.email nd@localhost
+
+# install new stuff
+# -----------------
+
+# Add sources.list for backports and neurodebian
+wget -O /etc/apt/sources.list.d/neuro.debian.net.list http://neuro.debian.net/lists/wheezy.us-nh
+
+## No backports yet
+## echo "deb http://backports.debian.org/debian-backports wheezy-backports main contrib non-free" > /etc/apt/sources.list.d/backports.debian.org.list
+cat << EOT > /etc/apt/preferences.d/backports.debian.org.pref
+Package: *
+Pin: release a=wheezy-backports
+Pin-Priority: 200
+EOT
+
+apt-get update -y
+# Backports' Release files signed with both ftpmaster and old backports keys
+# That causes APT to spit out a warning, but to not confuse users, lets simply
+# obtain that key if possible
+gpg --keyserver hkp://subkeys.pgp.net --recv-keys 16BA136C && \
+        gpg --export 16BA136C | apt-key add - || :
+
+apt-get install -y --allow-unauthenticated neurodebian-keyring
+apt-get update -y
+
+# to cheat the VM check
+touch /dev/vboxguest
+
+# Assure that corresponding linux headers are installed since otherwise they
+# might not be.  There is also a dichotomy between target 686 and installer
+# using 486 build of the kernel.  It requires manual build/installation
+# of guest additions for 686 at this point. Hence all the ugly logic below
+cunamer=`uname -r`
+cdarch=${cunamer##*-}
+# We carry 686 only
+[ $cdarch = '486' ] && darch='686' || darch=$cdarch
+apt-get install -y linux-headers-$cdarch
+
+## # Forcefully install guest additions from backports so we are
+## # compatible with VirtualBox 4.x series
+## apt-get install -y -t wheezy-backports virtualbox-ose-guest-dkms \
+##     virtualbox-ose-guest-utils  virtualbox-ose-guest-x11 \
+##     >| /var/log/initial_setup-dkms.log 2>&1
+
+# to get all the rest stuff in recommends
+apt-get install -y dkms
+# TODO: neurodebian-guest-additions  -- pulls in gdm3 ATM
+
+if [ "$darch" != "$cdarch" ] ; then
+    # Because DKMS builds for currently running kernel, which during
+    # installation might be a more generic 486, lets force building for 686
+       # and also install necessary headers (will be purged later on anyways)
+       apt-get install -y linux-headers-$darch
+
+       unamer=${cunamer//$cdarch/$darch}
+       # First collect information about installed vb additions
+       vbg=( `dkms status | grep virtualbox | head -n 1 | tr ',' ' '` )
+       echo "I: forcing build and install of guest additions for 686"
+       dkms build -m ${vbg[0]} -v ${vbg[1]} -a i686 -k $unamer \
+               >| /var/log/initial_setup-dkms-686-build.log 2>&1
+       dkms install -m ${vbg[0]} -v ${vbg[1]} -a i686 -k $unamer \
+               >| /var/log/initial_setup-dkms-686-install.log 2>&1
+fi
+
+# Add brain use into vboxsf group so he gets access to shared folders
+# by default
+adduser brain vboxsf
+
+# assure at the end that we got right modules build in the right location
+find /lib/modules/*$darch -iname vboxsf.ko | grep -q .
+
+# That was for GNOME
+# apt-get install --no-install-recommends -y \
+#  gnome-core mc evince bash-completion ntpdate file-roller gnome-utils \
+#  gnome-themes gnome-disk-utility network-manager-gnome eog vim reportbug \
+#  software-center gdebi gedit-plugins gnome-media synaptic menu less libxp6
+
+apt-get install --no-install-recommends -y \
+ mc evince bash-completion ntpdate file-roller \
+ eog vim reportbug \
+ software-center synaptic menu less libxp6 \
+ task-xfce-desktop lightdm \
+ chromium-browser \
+ sudo neurodebian-desktop update-notifier
+
+# XXX last ones are actually pulled it by neurodebian-guest-additions whenever we
+# resolve their destiny ;-)   a;though it might be pooling too much, eg exim4
+
+# TODO: autologin for lightdm (autologin-user=brain in /etc/lightdm/lightdm.conf), default panel (with chromium) for xfce
+# TODO: pre-configure the panel "Welcome to the first start of the panel", "Use default config"?
+
+# Clean-up installed development files which got pulled in for
+# VM guest additions (to build kernel modules via DKMS)
+apt-get purge -y libc6-dev
+dpkg -l | awk '/^ii.*[ \t]linux-headers/{print $2;}' | xargs -r apt-get purge -y
+
+# Gnome optional pulled by gnome-core:
+apt-get purge -y gnome-core evolution-common evolution libevolution
+
+# And utter cleanup
+apt-get -y autoremove
+
+# intermediate cleanup to prevent virtual harddrive from fragmenting too much
+find /var/cache/apt/archives/ -name '*.deb' -delete
+
+# cleanup unwanted stuff
+# video drivers (all but vesa)
+apt-get purge -y --force-yes $(apt-cache search --names-only --installed xserver-xorg-video | grep xserver-xorg-video | cut -d ' ' -f 1,1) xserver-xorg-video-vesa+
+apt-get purge -y brasero
+
+# and whatever is obsolete
+apt-get autoremove --purge -y
+
+# custom config
+# use NeuroDebian website as default homepage
+sed -i -e 's,http://www.debian.org,http://neuro.debian.net,g' /etc/chromium*/master_preferences
+
+# reduce grub timeout to speed up boot of VM
+sed -i -e 's/GRUB_TIMEOUT=5/GRUB_TIMEOUT=1/g' /etc/default/grub
+update-grub
+
+# finally configure geomirror for APT and disable deb-src lists
+sed -i -e "s,\(deb\(\|-src\) http://\)[^/]*/,\1$(dpkg --print-architecture)-geomirror.debian.net/,g" \
+    -e "s/^deb-src/#deb-src/" /etc/apt/sources.list
+
+etckeeper commit "Initial VM setup done"
+
+# Create a link to automatically mounted Shared folder
+# Created by the Welcome Wizard
+#sudo -u brain ln -s /mnt/host /home/brain/
diff --git a/vm/d-i/wheezy/preseed.cfg.in b/vm/d-i/wheezy/preseed.cfg.in
new file mode 100644 (file)
index 0000000..5024aa7
--- /dev/null
@@ -0,0 +1,338 @@
+#### Contents of the preconfiguration file (for wheezy)
+### Hints:
+###   To get a list of current d-i setting keys, run
+###     sudo debconf-get-selections --installer
+###   on an up-to-date system
+###
+### Localization
+# Locale sets language and country.
+d-i debian-installer/locale string en_US.UTF-8
+d-i debian-installer/language string en
+d-i debian-installer/country string US
+
+# Keyboard selection.
+#d-i console-tools/archs select at
+#d-i console-setup-pc-ekmap/keymap select us
+# Need to set "American English" for "Keymap to use"
+d-i countrychooser/country-name select United States
+# Example for a different keyboard architecture
+#d-i console-keymaps-usb/keymap select mac-usb-us
+#d-i console-keymaps-at/keymap select us
+d-i keyboard-configuration/xkb-keymap select us
+
+### Network configuration
+# netcfg will choose an interface that has link if possible. This makes it
+# skip displaying a list if there is more than one interface.
+d-i netcfg/choose_interface select auto
+
+# To pick a particular interface instead:
+#d-i netcfg/choose_interface select eth1
+
+# If you have a slow dhcp server and the installer times out waiting for
+# it, this might be useful.
+#d-i netcfg/dhcp_timeout string 60
+
+# If you prefer to configure the network manually, uncomment this line and
+# the static network configuration below.
+#d-i netcfg/disable_dhcp boolean true
+
+# If you want the preconfiguration file to work on systems both with and
+# without a dhcp server, uncomment these lines and the static network
+# configuration below.
+#d-i netcfg/dhcp_failed note
+#d-i netcfg/dhcp_options select Configure network manually
+
+# Static network configuration.
+#d-i netcfg/get_nameservers string 192.168.1.1
+#d-i netcfg/get_ipaddress string 192.168.1.42
+#d-i netcfg/get_netmask string 255.255.255.0
+#d-i netcfg/get_gateway string 192.168.1.1
+#d-i netcfg/confirm_static boolean true
+
+# Any hostname and domain names assigned from dhcp take precedence over
+# values set here. However, setting the values still prevents the questions
+# from being shown, even if values come from dhcp.
+d-i netcfg/get_hostname string neurodebian
+d-i netcfg/invalid_hostname string neurodebian
+# d-i netcfg/get_domain string unassigned-domain
+
+# Disable that annoying WEP key dialog.
+# d-i netcfg/wireless_wep string
+# The wacky dhcp hostname that some ISPs use as a password of sorts.
+# d-i netcfg/dhcp_hostname string neurodebian
+
+# If non-free firmware is needed for the network or other hardware, you can
+# configure the installer to always try to load it, without prompting. Or
+# change to false to disable asking.
+#d-i hw-detect/load_firmware boolean true
+
+### Network console
+# Use the following settings if you wish to make use of the network-console
+# component for remote installation over SSH. This only makes sense if you
+# intend to perform the remainder of the installation manually.
+#d-i anna/choose_modules string network-console
+#d-i network-console/password password r00tme
+#d-i network-console/password-again password r00tme
+
+### Mirror settings
+# If you select ftp, the mirror/country string does not need to be set.
+#d-i mirror/protocol string ftp
+d-i mirror/country string manual
+d-i mirror/http/hostname string %(MIRROR_HTTP_HOSTNAME)s
+d-i mirror/http/directory string /debian
+#d-i mirror/http/proxy string
+
+# Suite to install.
+d-i mirror/suite string wheezy
+# Suite to use for loading installer components (optional).
+#d-i mirror/udeb/suite string testing
+
+### Clock and time zone setup
+# Controls whether or not the hardware clock is set to UTC.
+d-i clock-setup/utc boolean true
+
+# You may set this to any valid setting for $TZ; see the contents of
+# /usr/share/zoneinfo/ for valid values.
+d-i time/zone string %(TIME_ZONE)s
+
+# Controls whether to use NTP to set the clock during the install
+d-i clock-setup/ntp boolean true
+# NTP server to use. The default is almost always fine here.
+#d-i clock-setup/ntp-server string ntp.example.com
+
+### Partitioning
+# If the system has free space you can choose to only partition that space.
+#d-i partman-auto/init_automatically_partition select biggest_free
+
+# Alternatively, you can specify a disk to partition. The device name must
+# be given in traditional non-devfs format.
+# Note: A disk must be specified, unless the system has only one disk.
+# For example, to use the first SCSI/SATA hard disk:
+d-i partman-auto/disk string /dev/sda
+# In addition, you'll need to specify the method to use.
+# The presently available methods are: "regular", "lvm" and "crypto"
+d-i partman-auto/method string regular
+
+# If one of the disks that are going to be automatically partitioned
+# contains an old LVM configuration, the user will normally receive a
+# warning. This can be preseeded away...
+#d-i partman-lvm/device_remove_lvm boolean true
+# The same applies to pre-existing software RAID array:
+#d-i partman-md/device_remove_md boolean true
+# And the same goes for the confirmation to write the lvm partitions.
+#d-i partman-lvm/confirm boolean true
+
+# You can choose one of the three predefined partitioning recipes:
+# - atomic: all files in one partition
+# - home:   separate /home partition
+# - multi:  separate /home, /usr, /var, and /tmp partitions
+d-i partman-auto/choose_recipe select atomic
+
+# Or provide a recipe of your own...
+# The recipe format is documented in the file devel/partman-auto-recipe.txt.
+# If you have a way to get a recipe file into the d-i environment, you can
+# just point at it.
+#d-i partman-auto/expert_recipe_file string /hd-media/recipe
+
+# If not, you can put an entire recipe into the preconfiguration file in one
+# (logical) line. This example creates a small /boot partition, suitable
+# swap, and uses the rest of the space for the root partition:
+d-i partman-auto/expert_recipe string                         \
+      boot-root ::                                            \
+              10000 40000 1000000000 ext4                       \
+                      $primary{ } $bootable{ }                \
+                      method{ format } format{ }              \
+                      use_filesystem{ } filesystem{ ext4 }    \
+                      label{NEURODEBIAN}                      \
+                      mountpoint{ / }                         \
+              .                                               \
+              2048 2048 2048 linux-swap                          \
+                      method{ swap } format{ }                \
+              .
+
+# This makes partman automatically partition without confirmation, provided
+# that you told it what to do using one of the methods above.
+d-i partman/confirm_write_new_label boolean true
+d-i partman/choose_partition select finish
+d-i partman/confirm boolean true
+d-i partman/confirm_nooverwrite boolean true
+
+### Base system installation
+# Select the initramfs generator used to generate the initrd for 2.6 kernels.
+#d-i base-installer/kernel/linux/initramfs-generators string yaird
+
+# The kernel image (meta) package to be installed; "none" can be used if no
+# kernel is to be installed.
+#d-i base-installer/kernel/image string linux-image-2.6-486
+
+### Account setup
+# Skip creation of a root account (normal user account will be able to
+# use sudo).
+#d-i passwd/root-login boolean false
+# Alternatively, to skip creation of a normal user account.
+#d-i passwd/make-user boolean false
+
+# Root password, either in clear text
+d-i passwd/root-password password neurodebian
+d-i passwd/root-password-again password neurodebian
+# or encrypted using an MD5 hash.
+#d-i passwd/root-password-crypted password [MD5 hash]
+
+# To create a normal user account.
+d-i passwd/user-fullname string NeuroDebian User
+d-i passwd/username string brain
+# Normal user's password, either in clear text
+d-i passwd/user-password password neurodebian
+d-i passwd/user-password-again password neurodebian
+# or encrypted using an MD5 hash.
+#d-i passwd/user-password-crypted password [MD5 hash]
+# Create the first user with the specified UID instead of the default.
+d-i passwd/user-uid string 1000
+# XXX no gid?
+
+# The user account will be added to some standard initial groups. To
+# override that, use this.
+d-i passwd/user-default-groups string audio cdrom floppy video plugdev dip sudo
+
+### Apt setup
+# You can choose to install non-free and contrib software.
+d-i apt-setup/non-free boolean true
+d-i apt-setup/contrib boolean true
+# Uncomment this if you don't want to use a network mirror.
+#d-i apt-setup/use_mirror boolean false
+# Select which update services to use; define the mirrors to be used.
+# Values shown below are the normal defaults.
+#d-i apt-setup/services-select multiselect security, volatile
+d-i apt-setup/security_host string security.debian.org
+#d-i apt-setup/volatile_host string volatile.debian.org
+# XXX?
+
+# Additional repositories, local[0-9] available
+#d-i apt-setup/local0/repository string \
+#       http://local.server/debian stable main
+#d-i apt-setup/local0/comment string local server
+# XXX our nd?
+#d-i apt-getup/local0/repository string \
+#        http://neuro.debian.net/debian data main contrib non-free
+#d-i apt-setup/local0/comment string NeuroDebian data
+#d-i apt-setup/local0/source boolean true
+#d-i apt-getup/local1/repository string \
+#        http://neuro.debian.net/debian squeeze main contrib non-free
+#d-i apt-setup/local1/comment string NeuroDebian software
+#d-i apt-setup/local1/source boolean true
+
+
+# URL to the public key of the local repository; you must provide a key or
+# apt will complain about the unauthenticated repository and so the
+# sources.list line will be left commented out
+#d-i apt-setup/local0/key string \
+#        http://neuro.debian.net/_static/neuro.debian.net.asc
+
+# By default the installer requires that repositories be authenticated
+# using a known gpg key. This setting can be used to disable that
+# authentication. Warning: Insecure, not recommended.
+#d-i debian-installer/allow_unauthenticated string true
+
+### Package selection
+#tasksel tasksel/first multiselect standard, web-server
+tasksel tasksel/first multiselect 
+# If the desktop task is selected, install the kde and xfce desktops
+# instead of the default gnome desktop.
+#tasksel tasksel/desktop multiselect kde, xfce
+
+# Individual additional packages to install
+#d-i pkgsel/include string openssh-server build-essential
+# Whether to upgrade packages after debootstrap.
+# Allowed values: none, safe-upgrade, full-upgrade
+#d-i pkgsel/upgrade select none
+
+# Some versions of the installer can report back on what software you have
+# installed, and what software you use. The default is not to report back,
+# but sending reports helps the project determine what software is most
+# popular and include it on CDs.
+# ND: popcon installed upon initial boot
+popularity-contest popularity-contest/participate boolean false
+
+### Boot loader installation
+# Grub is the default boot loader (for x86). If you want lilo installed
+# instead, uncomment this:
+#d-i grub-installer/skip boolean true
+# To also skip installing lilo, and install no bootloader, uncomment this
+# too:
+#d-i lilo-installer/skip boolean true
+
+# This is fairly safe to set, it makes grub install automatically to the MBR
+# if no other operating system is detected on the machine.
+d-i grub-installer/only_debian boolean true
+
+# This one makes grub-installer install to the MBR if it also finds some other
+# OS, which is less safe as it might not be able to boot that other OS.
+d-i grub-installer/with_other_os boolean false
+
+# Alternatively, if you want to install to a location other than the mbr,
+# uncomment and edit these lines:
+#d-i grub-installer/only_debian boolean false
+#d-i grub-installer/with_other_os boolean false
+#d-i grub-installer/bootdev  string (hd0,0)
+# To install grub to multiple disks:
+#d-i grub-installer/bootdev  string (hd0,0) (hd1,0) (hd2,0)
+
+# Optional password for grub, either in clear text
+#d-i grub-installer/password password r00tme
+#d-i grub-installer/password-again password r00tme
+# or encrypted using an MD5 hash, see grub-md5-crypt(8).
+#d-i grub-installer/password-crypted password [MD5 hash]
+
+### Finishing up the installation
+# During installations from serial console, the regular virtual consoles
+# (VT1-VT6) are normally disabled in /etc/inittab. Uncomment the next
+# line to prevent this.
+#d-i finish-install/keep-consoles boolean true
+
+# Avoid that last message about the install being complete.
+d-i finish-install/reboot_in_progress note
+
+# This will prevent the installer from ejecting the CD during the reboot,
+# which is useful in some situations.
+#d-i cdrom-detect/eject boolean false
+
+# This is how to make the installer shutdown when finished, but not
+# reboot into the installed system.
+#d-i debian-installer/exit/halt boolean true
+# This will power off the machine instead of just halting it.
+d-i debian-installer/exit/poweroff boolean true
+
+### Preseeding other packages
+# Depending on what software you choose to install, or if things go wrong
+# during the installation process, it's possible that other questions may
+# be asked. You can preseed those too, of course. To get a list of every
+# possible question that could be asked during an install, do an
+# installation, and then run these commands:
+#   debconf-get-selections --installer > file
+#   debconf-get-selections >> file
+
+
+#### Advanced options
+### Running custom commands during the installation
+# d-i preseeding is inherently not secure. Nothing in the installer checks
+# for attempts at buffer overflows or other exploits of the values of a
+# preconfiguration file like this one. Only use preconfiguration files from
+# trusted locations! To drive that home, and because it's generally useful,
+# here's a way to run any shell command you'd like inside the installer,
+# automatically.
+
+# This first command is run as early as possible, just after
+# preseeding is read.
+#d-i preseed/early_command string anna-install some-udeb
+
+# This command is run just before the install finishes, but when there is
+# still a usable /target directory. You can chroot to /target and use it
+# directly, or use the apt-install and in-target commands to easily install
+# packages and run commands in the target system.
+#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh
+#d-i preseed/late_command string wget -O/target/tmp/initial_setup http://git.debian.org/?p=pkg-exppsy/neurodebian.git;a=blob_plain;f=vm/d-i/tools/initial_setup;hb=HEAD; \
+d-i preseed/late_command string wget -O/target/tmp/initial_setup http://%(DI_HTTP_HOSTNAME)s/initial_setup ; \
+        in-target /bin/bash /tmp/initial_setup
+
+# XXX here get/call nd_setupguestos ?
+
index fd4cbdf0151476f99a81aa2c5450a7b7e9231371..9e21abc4b0fe1631302fefa89f40229a4a471ad3 100755 (executable)
@@ -2,30 +2,80 @@
 #emacs: -*- mode: shell-script; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil -*- 
 #ex: set sts=4 ts=4 sw=4 noet:
 
+# fail early
 set -eu
 
-# TODO: arguments later on to become cmdline args
-#iso=debian-squeeze-di-beta1-amd64-businesscard.iso
-iso=debian-6.0.6-${ARCH:=amd64}-businesscard.iso
-di_cd=$(readlink -f $PWD/../../../neurodebian-images/$iso)
-di_host=head1.hydra.dartmouth.edu               # where to look for di preseed
-
 build_dir=$PWD/build
 dist_dir=$PWD/dist
 vendor="NeuroDebian"
-vm_version="6.0.6"
+vm_version="6.999.b4.20121206"
 vm_ostype=Debian
 vendor_url="http://neuro.debian.net"
 product_url="${vendor_url}/vm.html"
+di_port=10100                   # port to start webserver on
 
 # Generic definitions
 eula="This virtual appliance contains Free and Open Source Software (FOSS) released under licenses compliant with the Debian Free Software Guidelines (DFSG, see http://www.debian.org/social_contract), such as, GPL, BSD, MIT, etc.  Such software is free to be used or customized for any purpose.
 
 However, by default this virtual machine is also enabled to install additional software from Debian and NeuroDebian repositories that is distributed under more restrictive licenses (e.g. closed-source, non-commercial, research-only). It is the user's responsibility to adhere to the terms and conditions of any particular software that is installed and used in this virtual machine. Copyright and license details for any installed PACKAGE are available in /usr/share/doc/PACKAGE/copyright inside the virtual machine."
 
+# The defaults to be modified from cmdline
+di_cd=
+# look here for more details about the default IP of the host:
+# # http://www.virtualbox.org/manual/ch09.html#changenat
+mirror_host=10.0.0.1:9999
+di_tz='US/Eastern'
+di_preseed_in=
+
+function usage {
+echo "Usage: $0 [OPTIONS]
+
+Create ND VirtualBox appliance.
+
+Options:
+  -p PRESEED_IN path to preesed.cfg.in file for d-i
+  -i ISO        path to debian installation iso file
+  -m MIRROR     debian mirror to use for installation
+  -t TIME_ZONE  time zone of virtual machine
+  -h            Show this help and exit
+"
+}
+
+# Process cmdline
+while getopts "p:i:" OPTION
+do
+  case $OPTION in
+      "p") di_preseed_in="$OPTARG";;
+      "i") di_cd="$OPTARG";;
+      "m") mirror_host="$OPTARG";;
+      "t") di_tz="$OPTARG";;
+      "h") exit 1;;
+  esac
+done
+
+if [ -z "$di_cd" ] ; then
+    echo "You must specify the iso image (-i)" >&2
+    exit 1
+fi
+
+if [ -z "$di_preseed_in" ]; then
+    # deduce release and use corresponding directory here
+    release=$(basename "$di_cd" | cut -d- -f2)
+    di_preseed_in=$(dirname $0)/../d-i/$release/preseed.cfg.in
+    if [ ! -e "$di_preseed_in" ]; then
+        echo "$di_preseed_in is not found. Specify one with -p" >&2
+        exit 2
+    fi
+fi
+
+# Figure out our IP address for VM to reach webserver
+eth=`route | awk '/default/{print $8;}'`
+di_host=`ip addr show dev $eth | sed -ne '/inet /s, *inet \([0-9.]*\)/.*,\1,gp'`
 
-# Computed settings
-#vm_basepath=
+# Generate preseed file
+# yoh could not escape Python here
+di_preseed=${di_preseed_in%.in}
+python -c "open('$di_preseed', 'w').write(open('$di_preseed_in').read() % {'DI_HTTP_HOSTNAME': '$di_host:$di_port', 'MIRROR_HTTP_HOSTNAME': '$mirror_host', 'TIME_ZONE': '$di_tz'})"
 
 # By default 32bit unless installer image has amd64
 # TODO: might need to make more robust?
@@ -62,7 +112,7 @@ VBoxManage unregistervm "${vm_name}" --delete || :
 rm -f ${vm_disk}
 }
 
-clean_buildvm                   # clean things up
+clean_buildvm >&/dev/null                   # clean things up
 
 #exit
 # Check that no previous VM was left (can happen if previous failures
@@ -132,6 +182,14 @@ _info "Run Debian Installer"
 # type  auto url=$di_host
 # press Enter"
 
+# start local web server to serve preseed file
+builtin cd $(dirname ${di_preseed})
+python -m SimpleHTTPServer ${di_port} >&/dev/null &
+di_pid=$!
+builtin cd -
+
+
+
 VBoxManage startvm "${vm_name}"
 
 # TODO: see if we could just use virtinst (virt-install tool) to run d-i
@@ -144,13 +202,7 @@ sleep 5                         # give some time to make sure we get to menu
 #    01 81 \
 #    1e 9e 16 96 14 94 18 98 39 b9 16 96 13 93 26 a6 0d 8d 23 a3 15 95 20 a0 13 93 1e 9e \
 #    1c 9c # ESCAPE, auto url=hydra, ENTER
-echo "typeGuest \"${vm_name}\" \"&ESC;Wauto url=${di_host}&ENTER;\"" | /usr/lib/virtualbox/vboxshell.py
-
-: "
-oops -- asked either I want to store Partitioning on the disk...
-
-didn't happen before
-"
+echo "typeGuest \"${vm_name}\" \"&ESC;Wauto url=${di_host}|;${di_port}/$(basename ${di_preseed})&ENTER;\"" | /usr/lib/virtualbox/vboxshell.py
 
 # wait for it to finish! -- found no cleaner way :-/
 sleep 10
@@ -158,6 +210,9 @@ while VBoxManage showvminfo "${vm_name}" | grep -q running; do
     sleep 5
 done
 
+# kill the web server
+kill ${di_pid} || echo "Could not kill the webserver"
+
 _info Compacting VDI
 sudo ./nd_compactvdi "${vm_disk}"