Adding url-utils 96/23496/1
authortguittet <thibault.guittet@open.eurogiciel.org>
Wed, 21 May 2014 15:23:52 +0000 (17:23 +0200)
committerGuittet Thibault <thibault.guittet@open.eurogiciel.org>
Thu, 26 Jun 2014 13:27:43 +0000 (15:27 +0200)
updated packaging

Signed-off-by: Nicolas Zingilé <nicolas.zingile@open.eurogiciel.org>
Updating scripts

Signed-off-by: tguittet <thibault.guittet@open.eurogiciel.org>
lost dialog helper and start cleaning

remove unused parameter in systemd service

cleanup and lost select-disk-util

Adding no-cancel option in dialog_helper

further cleanup

Signed-off-by: tguittet <thibault.guittet@open.eurogiciel.org>
adding wifi-config

modifications on spec file

some more verifications

Better colors for dialog, include wifi script and warning in system-installer

Various fixes and improvements

Signed-off-by: Guittet Thibault <thibault.guittet@open.eurogiciel.org>
some more convenience dialogs

Signed-off-by: Guittet Thibault <thibault.guittet@open.eurogiciel.org>
Handle Ctrl-C/SIGINT

various fixes

Change-Id: I69cca6614df23c1f3c2dc4dbd53080301488788e
Signed-off-by: Guittet Thibault <thibault.guittet@open.eurogiciel.org>
13 files changed:
packaging/dialog-1.2-20140219.tgz [new file with mode: 0644]
packaging/system-installer.spec
scripts/.dialogrc [new file with mode: 0644]
scripts/dialog-helper [new file with mode: 0755]
scripts/installer-conf-creator [deleted file]
scripts/installer.conf [new file with mode: 0644]
scripts/select-disk-util [new file with mode: 0755]
scripts/select-keyboard-layout-util [new file with mode: 0755]
scripts/system-installer
scripts/url-utils [new file with mode: 0755]
scripts/wifi [new file with mode: 0755]
scripts/wifi-config [new file with mode: 0755]
systemd/system-installer.service

diff --git a/packaging/dialog-1.2-20140219.tgz b/packaging/dialog-1.2-20140219.tgz
new file mode 100644 (file)
index 0000000..3e94f0c
Binary files /dev/null and b/packaging/dialog-1.2-20140219.tgz differ
index 24d64b9..786d248 100644 (file)
@@ -5,37 +5,132 @@ License:        GPL-2.0
 Summary:        PC Installer
 Group:          Base/Utilities
 Source:         %{name}-%{version}.tar.xz
-Requires:       rsync
-Requires:       plymouth
-Requires:       syslinux-extlinux
+Source2:        http://invisible-island.net/dialog/dialog-1.2-20140219.tgz
+Source1001:     system-installer.manifest
+Requires:       bmap-tools
 Requires:       btrfs-progs
-Requires:       snapper
+Requires:       curl
 Requires:       dosfstools
 Requires:       gptfdisk
-Source1001:     system-installer.manifest
+Requires:       plymouth
+Requires:       rsync
+Requires:       snapper
+Requires:       syslinux-extlinux
+Requires:      util-linux
+Requires(post):            /sbin/ldconfig
+Requires(postun):   /sbin/ldconfig
+BuildRequires: autoconf >= 2.64, automake >= 1.11
+BuildRequires: libtool
+BuildRequires: ncurses-devel
+BuildRequires: findutils
+Requires:      %{name}-dialog
 
 %description
 Installs a system from a USB stick to a local hard-disk.
 
+%package dialog
+
+Summary:           Display interactive boxes from shell script
+Group:             Development/Tools
+Requires(post):            /sbin/ldconfig
+Requires(postun):   /sbin/ldconfig
+
+%description dialog
+A program that will let you present a variety of questions or
+display messages using dialog boxes from a shell script.
+
+%package dialog-devel
+Summary:           Development files for building applications with the dialog library
+Group:             Development/Libraries
+Requires(post):            /sbin/ldconfig
+Requires(postun):   /sbin/ldconfig
+
+%description dialog-devel
+A program that will let you present a variety of questions or
+display messages using dialog boxes from a shell script.
+
+
 %prep
 %setup -q
 cp %{SOURCE1001} .
+cp %{SOURCE2} .
+tar --strip-components=1 -xvzf %{SOURCE2}
+
 
 %build
+%configure \
+       --includedir=%{_includedir}/dialog \
+        --enable-included-msgs \
+        --enable-nls \
+        --enable-widec \
+        --with-libtool \
+        --with-ncurses \
+        --with-ncursesw
+make %{?_smp_mflags}
+
 
 %install
-install -d %{buildroot}/%{_sbindir}
-install -d %{buildroot}/%{_sysconfdir}/installer
-install -d %{buildroot}/%{_unitdir}
 
+## for system-installer-dialog ##1
+make DESTDIR=%{buildroot} install
+
+find %{buildroot}%{_libdir} -name '*.la' -type f -delete -print
+find %{buildroot}%{_libdir} -name '*.a' -type f -delete -print
+rm -rf %{buildroot}%{_mandir}
+
+## for system-installer ##
+install -d %{buildroot}/%{_sbindir}
+install -d %{buildroot}/%{_unitdir}/default.target.wants
+install -d %{buildroot}/root
 install -m 0644 systemd/system-installer.service %{buildroot}/%{_unitdir}
 install -m 0775 scripts/system-installer  %{buildroot}/%{_sbindir}/system-installer
-install -m 0775 scripts/installer-conf-creator  %{buildroot}/%{_sbindir}/installer-conf-creator
+install -m 0775 scripts/dialog-helper  %{buildroot}/%{_sbindir}/dialog-helper
+install -m 0775 scripts/select-disk-util  %{buildroot}/%{_sbindir}/select-disk-util
+install -m 0775 scripts/url-utils  %{buildroot}/%{_sbindir}/url-utils
+install -m 0775 scripts/wifi-config  %{buildroot}/%{_sbindir}/wifi-config
+install -m 0775 scripts/installer.conf  %{buildroot}/%{_sbindir}/installer.conf
+install -m 0775 scripts/wifi  %{buildroot}/%{_sbindir}/wifi
+install -m 0775 scripts/select-keyboard-layout-util  %{buildroot}/%{_sbindir}/select-keyboard-layout-util
+install -m 0644 scripts/.dialogrc  %{buildroot}/root/.dialogrc
+ln -sf ../system-installer.service %{buildroot}/%{_unitdir}/default.target.wants/system-installer.service
+
+## for system-installer-dialog ##1
+%post dialog -p /sbin/ldconfig
+
+%postun dialog -p /sbin/ldconfig
+
+%post dialog-devel -p /sbin/ldconfig
+
+%postun dialog-devel -p /sbin/ldconfig
+
+%post -p /sbin/ldconfig
+
+%postun -p /sbin/ldconfig
 
 %files
 %manifest %{name}.manifest
 %defattr(-,root,root)
-%{_sbindir}/system-installer
-%{_sbindir}/installer-conf-creator
 %{_unitdir}/system-installer.service
+%{_unitdir}/default.target.wants/system-installer.service
+%{_sbindir}/system-installer
+%{_sbindir}/dialog-helper
+%{_sbindir}/select-disk-util
+%{_sbindir}/url-utils
+%{_sbindir}/wifi-config
+%{_sbindir}/installer.conf
+%{_sbindir}/wifi
+%{_sbindir}/select-keyboard-layout-util
+/root/.dialogrc
+
+%files dialog
+%defattr(-,root,root)
+%doc README
+%license COPYING
+%{_bindir}/dialog
+%{_libdir}/libdialog.so.*
+
 
+%files dialog-devel
+%{_bindir}/dialog-config
+%{_includedir}/dialog
+%{_libdir}/libdialog.so
diff --git a/scripts/.dialogrc b/scripts/.dialogrc
new file mode 100644 (file)
index 0000000..b91333a
--- /dev/null
@@ -0,0 +1,144 @@
+#
+# Run-time configuration file for dialog
+#
+# Automatically generated by "dialog --create-rc <file>"
+#
+#
+# Types of values:
+#
+# Number     -  <number>
+# String     -  "string"
+# Boolean    -  <ON|OFF>
+# Attribute  -  (foreground,background,highlight?)
+
+# Set aspect-ration.
+aspect = 0
+
+# Set separator (for multiple widgets output).
+separate_widget = ""
+
+# Set tab-length (for textbox tab-conversion).
+tab_len = 8
+
+# Make tab-traversal for checklist, etc., include the list.
+visit_items = OFF
+
+# Shadow dialog boxes? This also turns on color.
+use_shadow = OFF
+
+# Turn color support ON or OFF
+use_colors = ON
+
+# Screen color
+screen_color = (BLACK,BLACK,ON)
+
+# Shadow color
+shadow_color = (BLACK,BLACK,ON)
+
+# Dialog box color
+dialog_color = (BLUE,WHITE,OFF)
+
+# Dialog box title color
+title_color = (BLUE,WHITE,ON)
+
+# Dialog box border color
+border_color = (WHITE,WHITE,ON)
+
+# Active button color
+button_active_color = (WHITE,BLUE,ON)
+
+# Inactive button color
+button_inactive_color = dialog_color
+
+# Active button key color
+button_key_active_color = button_active_color
+
+# Inactive button key color
+button_key_inactive_color = (RED,WHITE,OFF)
+
+# Active button label color
+button_label_active_color = (WHITE,BLUE,ON)
+
+# Inactive button label color
+button_label_inactive_color = (BLACK,WHITE,ON)
+
+# Input box color
+inputbox_color = dialog_color
+
+# Input box border color
+inputbox_border_color = dialog_color
+
+# Search box color
+searchbox_color = dialog_color
+
+# Search box title color
+searchbox_title_color = title_color
+
+# Search box border color
+searchbox_border_color = border_color
+
+# File position indicator color
+position_indicator_color = title_color
+
+# Menu box color
+menubox_color = dialog_color
+
+# Menu box border color
+menubox_border_color = border_color
+
+# Item color
+item_color = dialog_color
+
+# Selected item color
+item_selected_color = button_active_color
+
+# Tag color
+tag_color = title_color
+
+# Selected tag color
+tag_selected_color = button_label_active_color
+
+# Tag key color
+tag_key_color = button_key_inactive_color
+
+# Selected tag key color
+tag_key_selected_color = (YELLOW,BLUE,ON)
+
+# Check box color
+check_color = dialog_color
+
+# Selected check box color
+check_selected_color = button_active_color
+
+# Up arrow color
+uarrow_color = (BLUE,WHITE,ON)
+
+# Down arrow color
+darrow_color = uarrow_color
+
+# Item help-text color
+itemhelp_color = (WHITE,BLACK,OFF)
+
+# Active form text color
+form_active_text_color = button_active_color
+
+# Form text color
+form_text_color = (WHITE,CYAN,ON)
+
+# Readonly form item color
+form_item_readonly_color = (CYAN,WHITE,ON)
+
+# Dialog box gauge color
+gauge_color = (BLUE,WHITE,ON)
+
+# Dialog box border2 color
+border2_color = dialog_color
+
+# Input box border2 color
+inputbox_border2_color = dialog_color
+
+# Search box border2 color
+searchbox_border2_color = dialog_color
+
+# Menu box border2 color
+menubox_border2_color = dialog_color
diff --git a/scripts/dialog-helper b/scripts/dialog-helper
new file mode 100755 (executable)
index 0000000..6b3b6a6
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/bash
+
+TMP_FILE="/tmp/dialog-helper.$$"
+
+export DIALOGRES
+
+# Used to retrieve the result of a menu selection.
+# DIALOGRES will hold the tag corresponding to the user's selection.
+dialog_helper() {
+       dialog --stderr --no-cancel "$@" 2> "$TMP_FILE"
+       local rc=$?
+       DIALOGRES=$(cat "$TMP_FILE")
+       rm -f "$TMP_FILE" 2>/dev/null
+       [[ $rc != 0 ]] && exit 1
+       return $rc
+}
diff --git a/scripts/installer-conf-creator b/scripts/installer-conf-creator
deleted file mode 100755 (executable)
index 4d7bf68..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/sh -ef
-
-DEST=/etc/installer.conf
-
-pnum=0
-
-if [ ! -n "$INSTALLERFW_PART_COUNT" ]; then
-    printf "INSTALLERFW_PART_COUNT unset, aborting\n" >&2
-    exit 1
-fi
-
-echo CFG_DISTRO_NAME=\"${INSTALLERFW_DISTRO_NAME}\" > $DEST
-echo CFG_KERNEL_OPTS=\"${INSTALLERFW_KERNEL_OPTS}\" >> $DEST
-echo CFG_MOUNT_PREFIX=\"${INSTALLERFW_MOUNT_PREFIX}\" >> $DEST
-echo CFG_INSTALLER_NAME=\"${INSTALLERFW_INSTALLER_NAME}\" >> $DEST
-echo CFG_PTABLE_FORMAT=\"${INSTALLERFW_PTABLE_FORMAT}\" >> $DEST
-echo CFG_PART_COUNT=\"${INSTALLERFW_PART_COUNT}\" >> $DEST
-while [ "$pnum" -lt "$INSTALLERFW_PART_COUNT" ]; do
-    echo CFG_PART${pnum}_FSTYPE=\"$(eval echo \${INSTALLERFW_PART${pnum}_FSTYPE})\" >> $DEST
-    echo CFG_PART${pnum}_FSOPTS=\"$(eval echo \${INSTALLERFW_PART${pnum}_FSOPTS})\" >> $DEST
-    echo CFG_PART${pnum}_UUID=\"$(eval echo \${INSTALLERFW_PART${pnum}_UUID})\" >> $DEST
-    echo CFG_PART${pnum}_BOOTFLAG=\"$(eval echo \${INSTALLERFW_PART${pnum}_BOOTFLAG})\" >> $DEST
-    echo CFG_PART${pnum}_PARTUUID=\"$(eval echo \${INSTALLERFW_PART${pnum}_PARTUUID})\" >> $DEST
-    echo CFG_PART${pnum}_SIZE=\"$(eval echo \${INSTALLERFW_PART${pnum}_SIZE})\" >> $DEST
-    echo CFG_PART${pnum}_MOUNTPOINT=\"$(eval echo \${INSTALLERFW_PART${pnum}_MOUNTPOINT})\" >> $DEST
-    echo CFG_PART${pnum}_DEVNODE=\"$(eval echo \${INSTALLERFW_PART${pnum}_DEVNODE})\" >> $DEST
-    echo CFG_PART${pnum}_LABEL=\"$(eval echo \${INSTALLERFW_PART${pnum}_LABEL})\" >> $DEST
-    echo CFG_PART${pnum}_TYPE_ID=\"$(eval echo \${INSTALLERFW_PART${pnum}_TYPE_ID})\" >> $DEST
-    echo CFG_PART${pnum}_ALIGN=\"$(eval echo \${INSTALLERFW_PART${pnum}_ALIGN})\" >> $DEST
-
-    pnum="$((pnum+1))"
-done
-
diff --git a/scripts/installer.conf b/scripts/installer.conf
new file mode 100644 (file)
index 0000000..168f784
--- /dev/null
@@ -0,0 +1,9 @@
+# The complete url to the raw.bz2 image you wish to flash on the output device
+IMAGE_URL=""
+
+# The output device used for installation
+OUTDEV=""
+
+# The keymap layout used if you need to write a password for the wifi configuration
+# and the default keymap layout for weston
+KEYBOARD_LAYOUT=""
diff --git a/scripts/select-disk-util b/scripts/select-disk-util
new file mode 100755 (executable)
index 0000000..d9046ad
--- /dev/null
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+# List block devices that are not removable,
+# if multiple devices are found, the user will be invited to choose one.
+# If no devices are found, the program exit with error code 1
+
+outfile=${1:-/dev/stdout}
+. /usr/sbin/dialog-helper
+
+trap "exit 2" SIGINT
+
+target_array=()
+for i in $(ls /sys/block/*/device/model); do
+       dev=$(echo $i | cut -d'/' -f-4) ;
+       device=$(echo $i | cut -d'/' -f4)
+       grep -q 1 $dev/removable
+       if [ "$?" = "1" ]; then
+               target_array+=("/dev/$device")
+       fi
+done
+
+if (( "${#target_array[@]}" == "1" )); then
+       TARGET="${target_array[0]}"
+elif (( "${#target_array[@]}" > "1" )); then
+       dialog_helper --no-items --menu "Installation destinaion device:" 10 40 3 $( for i in "${target_array[@]}"; do echo "$i"; done )
+       TARGET="$DIALOGRES" 
+else
+       dialog --msgbox "No devices could be found, no installation possible" 10 40
+       exit 1
+fi
+
+rm -f "${TMP_FILE}"
+
+cat << EOC > $outfile
+$TARGET
+EOC
+
+exit 0
diff --git a/scripts/select-keyboard-layout-util b/scripts/select-keyboard-layout-util
new file mode 100755 (executable)
index 0000000..1039e1b
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+# Select a keyboard layout in a menu
+
+outfile=${1:-/dev/stdout}
+. /usr/sbin/dialog-helper
+
+trap "exit 1" SIGINT
+
+layouts=$(find /usr/lib/kbd/keymaps/ -type f |sed -e '/map.gz/!d' -e "s:.*/\(.*\).map.gz:\1:" | sort -u)
+dialog_helper --no-items --menu "Choose your keyboard layout" 200 30 40 $(for i in $layouts ; do echo "$i"; done)
+
+cat << EOC >> $outfile
+$(echo "$DIALOGRES")
+EOC
+
+exit 0
index 8151cbd..22972d5 100755 (executable)
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 # General Public License for more details.
 
-# Own program name
-PROG="${0##*/}"
-
-show_usage()
-{
-        cat <<-EOF
-Usage: $PROG [options]
-
-Options:
-    -a, --automode  do not ask any question and just proceed with installing to
-                    the first persistent storage device found
-EOF
-}
-
-# Print $1, show help message and error out
-fail_usage()
-{
-    [ -z "$1" ] || printf "%s\n" "$1"
-    show_usage
-    exit 1
-}
-
-function message {
-    if [ -n "$PLYMOUTH" -a "$PLYMOUTH" -eq 1 ]; then
-        plymouth display-message  --text "$1"
-    else
-        echo $1
-    fi
-}
-
-function check_echo_reboot {
-       read key
-       if [[ $key != 'r' && $key != 'R' ]]; then
-               check_echo_reboot
-       fi
-}
-
+# This script will flash an output device with a downloaded raw image
+# from download.tizen.org.
+# Any missing configurations will be asked to the user.
+# Being connected to the internet before launching this script is
+# better. If you aren't connected, a wifi configuration script will be fired.
+
+chvt 2
+
+# The partition to resize after flashing the raw image
+partition=1
+# Used to retrieve output of the other scripts
+output_data_file="/tmp/system-installer.$$"
+# Mount point used to change the keymap layout of weston on the device
+mountpoint="/tmp/output_device_mount_point"
+# Configuration file of system-installer
+conf_file="/usr/sbin/installer.conf"
+# Used to signal a bmaptool failure during download/flash
+bmaptool_failure=""
+
+. /usr/sbin/dialog-helper
+
+# Simply read the configuration in $conf_file, exit if not found
 function read_config {
-    local CONF_FILE=""
-    CONF_FILE="/etc/installer.conf"
 
-    if [ ! -e $CONF_FILE ]; then
-        message "Installation failure, missing /etc/installer.conf"
-        test $REBOOT_ON_FAILURE -eq 1 &&  (
-            sleep 5
-            /usr/sbin/reboot
-        )
+    if [ ! -e $conf_file ]; then
+        dialog --msgbox "Installation failure, missing $conf_file" 10 40
         exit 1
     else
-        . $CONF_FILE
-    fi
-}
-
-function set_mounts {
-    SRCMNT=$(mktemp -d /media/srctmp.XXXXXX)
-    TGTMNT=$(mktemp -d /media/tgttmp.XXXXXX)
-    SRCOSMNT=$(mktemp -d /media/srcostmp.XXXXXX)
-}
-
-function find_devices {
-    for i in $(ls /sys/block/*/device/model); do
-        dev=$(echo $i | cut -d'/' -f-4) ;
-        device=$(echo $i | cut -d'/' -f4)
-        grep -q 1 $dev/removable
-        if [ "$?" = "1" ]; then
-            TARGET_DEV="/dev/$device";
-            break
-        fi
-    done
-
-    if [ -z "$TARGET_DEV" ]; then
-        message "Installation failure, unable to find suitable install target media"
-        test $REBOOT_ON_FAILURE -eq 1 &&  (
-            sleep 5
-            /usr/sbin/reboot
-        )
-        exit 1
-    fi
-}
-
-# Global variable for storing the partition option parameters;
-params=
-
-function msdos_partition_options {
-    # the partition number
-    local i=$1
-    # used for storing the per-part variables,
-    # accessed via indirect referencing
-    local tmp=""
-
-    tmp="CFG_PART${i}_SIZE"
-    local size=${!tmp}
-    [ -z "$size" ] && size="1024"
-    if [[ "$CFG_PART_COUNT" = "$((i+1))" ]]; then
-        # an 'empty' value means that sfdisk will use
-        # the defaults, in this case expanding to the
-        # end of the disk
-        size=""
-    fi
-    params=$(printf "${params}\n%s" ",${size}")
-
-    tmp="CFG_PART${i}_FSTYPE"
-    local fstype=${!tmp}
-    local typeid='83'
-    [ "$fstype" = "swap" ] && typeid='82'
-    params=$(printf "${params}%s" ",${typeid}")
-
-    # handle bootflag last
-    tmp="CFG_PART${i}_BOOTFLAG"
-    local bootflag=${!tmp}
-    if [ "$bootflag" = "True" ]; then
-        params=$(printf "${params}%s" ',*')
-    else
-        params=$(printf "${params}\n")
-    fi
-}
-
-function gpt_partition_options {
-    # the partition number
-    local i=$1
-    # used for storing the per-part variables,
-    # accessed via indirect referencing
-    local tmp=""
-
-    tmp="CFG_PART${i}_ALIGN"
-    local align=${!tmp}
-    [ -n "$align" ] && params=$(printf "${params}%s" " --set-alignment=${align}")
-
-    # sgdisk uses '0' to mean 'default value'
-    params=$(printf "$params%s" " --new=0:0")
-
-    tmp="CFG_PART${i}_SIZE"
-    local size=${!tmp}
-    if [[ "$CFG_PART_COUNT" = "$((i+1))" ]]; then
-        size="0"
-    fi
-    [ -z "$size" ] && size="1024"
-    [ -n "$size" ] && params=$(printf "${params}%s" ":${size}M")
-
-    # TODO: need to handle swap partition types if encountered
-
-    # the following GUID option does not accept default partition values,
-    # so partition numbering must start at index 1, not 0
-    local partnum="$((i+1))"
-
-    tmp="CFG_PART${i}_TYPE_ID"
-    local typeid=${!tmp}
-    [ -n "$typeid" ] && params=$(printf "${params}%s" " --typecode=${partnum}:${typeid}")
-}
-
-function partition_msdos {
-    # make sure there is a newline in the heredoc,
-    # or else sfdisk fails to parse the input
-    /usr/sbin/sfdisk --in-order -uM ${TARGET_DEV} << EOF
-${1}
-
-EOF
-    sync
-}
-
-function partition_gpt {
-    /usr/sbin/sgdisk -Z ${TARGET_DEV}
-    /usr/sbin/sgdisk ${1} ${TARGET_DEV}
-    sync
-}
-
-function format_device {
-    local fstype=$1
-    local instfw_pnum=$2
-    # the actual partition numbers begin at index 1, not 0
-    local partnum="$((instfw_pnum+1))"
-
-    # TODO: need to handle swap partitions
-
-    /usr/sbin/mkfs.${fstype} ${TARGET_DEV}${partnum}
-
-    if [[ ${fstype} = "btrfs" ]]; then
-        mount ${TARGET_DEV}${partnum} $TGTMNT
-        /usr/sbin/btrfs subvolume create ${TGTMNT}/tizen
-        /usr/sbin/btrfs subvolume create ${TGTMNT}/tizen/.snapshots
-        SUBVOLID=$(/usr/sbin/btrfs subvolume list $TGTMNT | grep 'tizen$' | awk '{ print $2 }')
-        echo "Setting subvolume ${SUBVOLID} as default"
-        /usr/sbin/btrfs subvolume set-default $SUBVOLID $TGTMNT
-        sync
-        umount $TGTMNT
+        . $conf_file
     fi
 }
 
-function mount_device {
-    local mountpoint=$1
-    local instfw_pnum=$2
-    # the actual partition numbers begin at index 1, not 0
-    local partnum="$((instfw_pnum+1))"
-
-    SRCOSMNT="/"
-
-    # we make this substitution in extlinux.conf on the target device
-    [ "$mountpoint" = "/" ] && ROOTFS="${TARGET_DEV}${partnum}"
-
-    mkdir -p ${TGTMNT}/${mountpoint}
-
-    # for this to work, the rootfs partition entry in installer.conf
-    # must be first entry, or else some mount points will be hidden
-    # during the rsync
-    mount ${TARGET_DEV}${partnum} ${TGTMNT}/${mountpoint}
-}
-
-function install_extlinux {
-    mkdir -p ${TGTMNT}/boot/extlinux
-    cat > ${TGTMNT}/boot/extlinux/extlinux.conf << EOF
-default vesamenu.c32
-timeout 10
-
-menu background splash.png
-menu title Welcome to Tizen PC!
-menu color border 0 #ffffffff #00000000
-menu color sel 7 #ff000000 #ffffffff
-menu color title 0 #ffffffff #00000000
-menu color tabmsg 0 #ffffffff #00000000
-menu color unsel 0 #ffffffff #00000000
-menu color hotsel 0 #ff000000 #ffffffff
-menu color hotkey 7 #ffffffff #ff000000
-menu color timeout_msg 0 #ffffffff #00000000
-menu color timeout 0 #ffffffff #00000000
-menu color cmdline 0 #ffffffff #00000000
-menu hidden
-menu clear
-label tizen
-  menu label Boot Tizen
-  kernel ../vmlinuz
-  append root=${ROOTFS} ${CFG_KERNEL_OPTS} ${ROOTFLAGS}
-menu default
-EOF
-
-    cp /usr/share/branding/default/syslinux/syslinux-vesa-splash.jpg ${TGTMNT}/boot/extlinux/splash.png
-
-    cat /usr/share/syslinux/mbr.bin > ${TARGET_DEV}
-    /sbin/extlinux -i  ${TGTMNT}/boot/extlinux
-}
-
-function fixup_fstab {
-    local pnum=0
-    local devpnum="$((pnum+1))"
-    local tmp=""
-    local srcuuid=""
-    local tgtuuid=""
-
-    while [ "$pnum" -lt "$CFG_PART_COUNT" ]; do
-        tmp="CFG_PART${pnum}_UUID"
-        srcuuid=${!tmp}
-
-        tgtuuid=$(blkid ${TARGET_DEV}${devpnum} | sed 's/.* UUID="\([^"]*\)".*/\1/')
-        sed -i "s/.*\(UUID=\).*${srcuuid}\(.*\)/\1${tgtuuid}\2/" ${TGTMNT}/etc/fstab
-
-        pnum="$((pnum+1))"
-        devpnum="$((devpnum+1))"
-    done
-}
-
-function fixup_gummiboot {
-    # expect the rootfs to be the last entry in installer.conf
-    local pnum="$((CFG_PART_COUNT-1))"
-    local devpnum="$((pnum+1))"
-    local tmp=""
-    local mntpoint=""
-    local srcpuuid=""
-    local tgtpuuid=""
-    local confs="$(ls -1 "${TGTMNT}/boot/loader/entries/")"
-
-    tmp="CFG_PART${pnum}_PARTUUID"
-    srcpuuid=${!tmp}
-
-    tgtpuuid=$(blkid ${TARGET_DEV}${devpnum} | sed 's/.* PARTUUID="\([^"]*\)".*/\1/')
-
-    printf "%s\n" "$confs" | while IFS= read -r conf; do
-        sed -i "s/\(.*PARTUUID=\).*${srcpuuid}\(.*\)/\1${tgtpuuid}\2/" "${TGTMNT}/boot/loader/entries/${conf}"
-    done
-}
-
+# Download the raw image, decompress it and write it on the device
+# When the image is written, the partition size is modified
 function install_os {
-    rsync  -WaHXSh --exclude='/dev/' --exclude='/lost+found/' --exclude='/media/*' --exclude='/sys/' --exclude='/proc/' --exclude="/tmp/" --exclude="/run/"  $SRCOSMNT/ $TGTMNT
-
-    mkdir ${TGTMNT}/dev/
-    chmod 0755 ${TGTMNT}/dev
-
-    # TODO: switch to using systemd mount units instead of the fstab
-    #rm ${TGTMNT}/etc/fstab
-
-    fixup_fstab
-
-    if [ "$CFG_PTABLE_FORMAT" = "gpt" ]; then
-       fixup_gummiboot
+    bmaptool copy "$IMAGE_URL" "$OUTDEV" |&
+    sed -u -e '/copied/!d;s/\r/\n/g;s/.* \([0-9]\{1,3\}\)% .*/\1/g' |
+    dialog --gauge "Downloading the image and copying on $OUTDEV" 10 100 0
+    if [[ ${PIPESTATUS[0]} != 0 ]]; then
+        bmaptool_failure="yes"
+       sigint_handler
     fi
 
-    if [[ $FILESYSTEM = "btrfs" ]]; then
-        ROOTFLAGS="rootflags=subvol=tizen"
-    else
-        ROOTFLAGS=""
-    fi
+    local RESIZEFS=yes
 
-    if [ "$CFG_PTABLE_FORMAT" = "msdos" ]; then
-        install_extlinux
-    fi
+    if [ "$RESIZEFS" = "yes" ]; then
+        # resize first partition
+        # WARNING: this only works if the system is installed on a single partition
+        newsz=20 # GB
+        sfdisk -d $OUTDEV | 
+        awk '$1=="'${OUTDEV}${partition}'" { sub("size=[^,]+","size="'${newsz}'*1024*1024*2)}1' >/tmp/newpart.lst
+        sfdisk $OUTDEV </tmp/newpart.lst || true
+        echo "Partition ${OUTDEV}${partition} resized to $newsz GB"
 
-    if [[ $FILESYSTEM = "btrfs" ]]; then
-        sed -i 's|SUBVOLUME="/"|SUBVOLUME="'${TGTMNT}'"|' /etc/snapper/configs/root
-        snapper create -d "Factory Default"
-    fi
-}
+        # force kernel to reread partitions
+        echo "Probing new partition table"
+        partprobe $OUTDEV
 
-function unmount_devices {
-    sync
-    sleep 2
-    [ -d "$TGTMNT" ] && umount -R $TGTMNT
+        # resize filesystem
+        echo "Resizing filesystem"
+        resize2fs -f -p ${OUTDEV}${partition}
+    fi
 }
 
-
-# Handle command line options
-tmp=`getopt -n "$PROG" -o a,h --long automode,help -- "$@"` || fail_usage ""
-eval set -- "$tmp"
-
-AUTOMODE=
-
-while true; do
-    case "$1" in
-        -a|--automode)
-            AUTOMODE="1"
-            ;;
-        -h|--help)
-            show_usage
-            exit 0
-            ;;
-        --) shift; break
-            ;;
-        *) fail_usage "Unrecognized option: $1"
-            ;;
-    esac
-    shift
-done
-
-if [ -z "$AUTOMODE" ]; then
-    PLYMOUTH=0
-    REBOOT_ON_FAILURE=0
-else
-    PLYMOUTH=1
-    REBOOT_ON_FAILURE=1
-fi
-
-message "This installation will wipe all data from the hard drive, hit Y key to continue or ctrl-alt-del to abort."
-if [ -n "$PLYMOUTH" -a "$PLYMOUTH" -eq 1 ]; then
-    plymouth watch-keystroke --command="/usr/bin/test" --keys "yY"
-else
-    read key
-    if [[ $key != 'y' && $key != 'Y' ]]; then
-        test $REBOOT_ON_FAILURE -eq 1 && /usr/sbin/reboot
-    fi
-fi
-if [ -n "$PLYMOUTH" -a "$PLYMOUTH" -eq 1 ]; then
-    plymouth hide-message  --text "This installation will wipe all data from the hard drive, hit Y key to continue or ctrl-alt-del to abort."
-fi
+# Let the user choose between available keyboard layouts, then execute loadkeys
+function select_keyboard_layout {
+       while :; do
+               /usr/sbin/select-keyboard-layout-util "$output_data_file" && break
+               [ $? -eq 1 ] && sigint_handler
+       done
+       KEYBOARD_LAYOUT=$(cat "$output_data_file")
+       rm -f "$output_data_file" 2>/dev/null
+       loadkeys "$KEYBOARD_LAYOUT"
+}
+
+# Test connection to "http://download.tizen.org/",
+# if we can't connect, we configure the keyboard layout (if not yet set)
+# then we launch the wifi configuration script
+function test_connection {
+       curl --connect-timeout 10 -s "http://download.tizen.org/" > /dev/null
+       if [[ $? != 0 ]]; then
+               while :; do
+                       /usr/sbin/wifi-config && break
+                       [ $? -eq 1 ] && sigint_handler
+               done
+       fi
+}
+
+# Sets the keyboard layout accordingly to $KEYBOARD_LAYOUT
+# in weston.ini on the device
+function modify_weston_conf {
+       local file="${mountpoint}/etc/xdg/weston/weston.ini"
+       [ -f "$file" ] && sed -i -e "s/^#\[keyboard\]$/\[keyboard\]/; s/^#keymap_layout=.*/keymap_layout=$KEYBOARD_LAYOUT/" "$file"
+}
+
+function sigint_handler {
+       local txt=""
+       if [ "$bmaptool_failure" = "yes" ]; then
+               txt+="Bmaptool failed to flash your device."
+       else
+               txt+="The installation was interrupted."
+       fi
+       txt+=" Do you want to reboot ? press 'Yes' to reboot and 'No' to restart the installation."
+       dialog --yesno "$txt" 15 40 && /usr/sbin/reboot -f
+       rm -f "$output_data_file" 2>/dev/null
+       rm -rf "$mountpoint" 2>/dev/null
+       [ -d "${OUTDEV}${partition}" ] && umount -l "${OUTDEV}${partition}" 2>/dev/null
+       exec /usr/sbin/system-installer
+}
+
+trap "sigint_handler" SIGINT
 
 read_config
-set_mounts
-find_devices
-message "Installing on to the hard disk now, this will take a few minutes..."
-
-pnum=0
-# first, generate the option list to pass to either 'sfdisk' or 'sgdisk'
-while [ "$pnum" -lt "$CFG_PART_COUNT" ]; do
-    if [ "$CFG_PTABLE_FORMAT" = "msdos" ]; then
-        msdos_partition_options $pnum
-    elif [ "$CFG_PTABLE_FORMAT" = "gpt" ]; then
-        gpt_partition_options $pnum
-    fi
-    pnum="$((pnum+1))"
-done
 
-# now, do the partitioning
-if [ "$CFG_PTABLE_FORMAT" = "msdos" ]; then
-    partition_msdos "$params"
-elif [ "$CFG_PTABLE_FORMAT" = "gpt" ]; then
-    partition_gpt "$params"
+[ -z "$KEYBOARD_LAYOUT" ] && select_keyboard_layout
+
+if [ -z "$IMAGE_URL" ] ;then 
+       test_connection
+       while :; do
+               /usr/sbin/url-utils "$output_data_file" && break
+               [ $? -eq 1 ] && sigint_handler
+       done
+       IMAGE_URL=$(cat "$output_data_file")
+elif ! curl --fail -I "$IMAGE_URL" > /dev/null ; then
+       echo "The image url couldn't be reached, please verify that the url is correct."
+       exit 1
 fi
 
-pnum="$((CFG_PART_COUNT-1))"
-# NOTE: for now, partitions are processed in reverse order, and we
-# expect the rootfs to be the last entry in installer.conf
-while [ "$pnum" -ge "0" ]; do
-    tmp="CFG_PART${pnum}_FSTYPE"
-    fstype=${!tmp}
-
-    format_device $fstype $pnum
+if [ -z "$OUTDEV" ] ;then
+       while :; do
+               /usr/sbin/select-disk-util "$output_data_file" && break
+               [ $? -eq 1 ] && sigint_handler
+       done
+       OUTDEV=$(cat "$output_data_file")
+elif [ ! -b "$OUTDEV" ] ; then
+       echo "The output device is not a block device."
+       exit 1
+fi
 
-    tmp="CFG_PART${pnum}_MOUNTPOINT"
-    mountpoint=${!tmp}
+rm -f "$output_data_file" 2>/dev/null
 
-    mount_device $mountpoint $pnum
+dialog --yesno "Do you whant to proceed with the installation ? All your data on the target device will be lost." 10 40 || exit 1
 
-    pnum="$((pnum-1))"
-done
+# Download and install the image
+install_os
 
-unset fstype
-unset mountpoint
+# Mounting device
+mkdir -p "$mountpoint"
+mount "${OUTDEV}${partition}" "$mountpoint"
 
-install_os
-unmount_devices
+modify_weston_conf
 
-if [ -n "$PLYMOUTH"  -a "$PLYMOUTH" -eq 1 ]; then
-    plymouth hide-message  --text "Installing on to the hard disk now, this will take a few minutes..."
-fi
-message "Hit R key to reboot and then remove the usb stick. Enjoy!"
+# Unmounting device
+sync && sync
+[ -d "${OUTDEV}${partition}" ] && umount -l "${OUTDEV}${partition}"
 
-if [ -n "$PLYMOUTH" -a "$PLYMOUTH" -eq 1 ]; then
-    plymouth watch-keystroke --command="/usr/bin/test" --keys "rR"
-else
-    check_echo_reboot
-fi
-/usr/sbin/reboot
+dialog --msgbox "The default password for all users is 'tizen'. Hit Enter to reboot and then remove the usb stick." 10 40 && /usr/sbin/reboot -f
diff --git a/scripts/url-utils b/scripts/url-utils
new file mode 100755 (executable)
index 0000000..444622a
--- /dev/null
@@ -0,0 +1,133 @@
+#!/bin/bash
+
+# Guide a user towards a image URL with questions and exploration of
+# http://download.tizen.org/.
+# If you supply a file as parameter, the output will be saved in it.
+# Exit with value 2 if SIGINT is sent.
+
+# Number of images to list (if arch x86_64, ia32 images will be also used)
+N=3
+
+# Some images are excluded
+BLACKLIST="-e unsafe -e emul -e efi -e testing -e installer"
+
+# Field number used to retrieve the href value in a listing
+# The fields are separated by "
+HREF_FIELD_NO=6
+
+outfile=${1:-/dev/stdout}
+. /usr/sbin/dialog-helper
+tmp_outfile="/tmp/url-utils.$$"
+
+# Print the href values of a directory listing
+# param #1: url of a directory listing
+function url_get_href_from_listing() {
+       curl -s -S "$1" |
+       grep '<img src="/icons/folder.gif" alt="\[DIR\]"> <a href="' |
+       cut -d '"' -f ${HREF_FIELD_NO}
+}
+
+# Print last N images url of a directory listing. The images url passed
+# the BLACKLIST filter
+# param #1: url like "http://download.tizen.org/snapshots/tizen/ivi/ivi/"
+function url_N_last_images() {
+       local base_url="$1"
+       local i=0
+
+       url_get_href_from_listing "${base_url}" |
+       tac |
+       while read url && [[ $i < $N ]]; do
+               img_dir_list_url="${base_url}${url}images/"
+               for img_dir_name in $(url_get_href_from_listing "${img_dir_list_url}"); do
+                       if echo "${img_dir_name}"| grep -qv ${BLACKLIST}; then
+                               final_img_name=$(
+                                       curl -s -S "${img_dir_list_url}${img_dir_name}" |
+                                       grep "raw.bz2" |
+                                       cut -d '"' -f ${HREF_FIELD_NO}
+                               )
+                               [ -n "$final_img_name" ] && echo "${img_dir_list_url}${img_dir_name}${final_img_name}" >> $tmp_outfile
+                       fi
+               done
+               i=$(($i + 1))
+       done
+}
+
+trap "exit 2" SIGINT
+
+# Asks for profile
+dialog_helper --no-items --menu "Choose your profile" 10 30 2 "IVI" "Common"
+PROFIL="$DIALOGRES" 
+
+# Asks for image type
+dialog_helper --no-items --menu "Choose your image type" 10 30 2 "snapshot" "release"
+TYPE="$DIALOGRES" 
+
+# Deduces the architecture if not set
+[ -z "$ARCH" ] && ARCH=$(lscpu |grep -q "^CPU op-mode.*64-bit.*" && echo "x86_64")
+
+# "base" URL
+if [ "$TYPE" = "release" ]; then
+       # Only IVI profile is available in release/weekly
+       if [ "$PROFIL" = "IVI" ]; then
+               dialog_helper --no-items --menu "Choose your release" 10 30 2 "daily" "weekly"
+               URL="http://download.tizen.org/releases/$DIALOGRES/tizen/"
+       else
+               URL="http://download.tizen.org/releases/daily/tizen/"
+       fi
+else
+       URL="http://download.tizen.org/snapshots/tizen/"
+fi
+
+# This follow the (odd) naming conventions of download.tizen.org
+# Also, if you have ARCH = "x86_64", images of the "ia32" architecture also will be printed
+if [ "$PROFIL" = "IVI" ]; then
+       URL1="${URL}ivi/ivi/"
+else
+       URL+="common/common-"
+       if [ "$TYPE" = "snapshot" ]; then
+               # Asks for display server
+               dialog_helper --no-items --menu "Choose your display server" 10 30 2 "X11" "Wayland"
+               DISPLAY="$DIALOGRES"
+
+               if [ "$DISPLAY" = "X11" ]; then
+                       URL+="x11-"
+                       # For some reason a wayland folder is in a x11 image folder
+                       BLACKLIST+=" -e wayland"
+               else
+                       URL+="wayland-"
+               fi
+       else
+               URL+="wayland-"
+       fi
+
+       if [ "$ARCH" = "x86_64" ]; then
+               URL2="${URL}x86_64/"
+               $(url_N_last_images "$URL2")
+       fi
+
+       URL1="${URL}ia32/"
+fi
+
+# If we don't print anything, the screen will be black for few seconds
+dialog --infobox "Building urls..." 10 40
+$(url_N_last_images "$URL1")
+
+# We extract various informations from the url, the result is :
+# <URL> "Tizen common-wayland-mbr-x86_64 (MM/DD/YYYY #<build number>)"
+entry=$(
+       sed 's:\(.*/tizen_\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\.\([0-9]*\)/images/\(.*\)/.*\):\1 "Tizen \6 (\3/\4/\2 #\5)":' $tmp_outfile |
+       tr '\n' ' '
+)
+
+rm -f "$tmp_outfile" 2>/dev/null
+
+if [ -z "$entry" ]; then
+       dialog --msgbox "No suitable image could be found, exiting" 10 40
+       exit 1
+fi
+
+eval dialog_helper --notags --menu "\"Choose between the latests images that match your criterions\"" 16 60 6 $entry
+
+cat << EOC >> $outfile
+$(echo "$DIALOGRES")
+EOC
diff --git a/scripts/wifi b/scripts/wifi
new file mode 100755 (executable)
index 0000000..7b682b3
--- /dev/null
@@ -0,0 +1,200 @@
+#!/bin/bash
+
+# Helper script to activate/desactivate WLAN from command line
+
+# Usage :
+# wifi connect <ssid> <passphrase>
+# wifi disconnect <ssid> 
+# wifi scan
+# wifi status
+
+#####################################################
+
+### global vars ###
+
+CONNMAN=/usr/sbin/connmanctl
+
+script=$(basename $0)
+configpath=/var/lib/connman # connman config directory
+ssid=""        # ssid of wifi network to reach 
+passphrase=""  # passphrase of wifi network to reach 
+service=""     # service identifier of the network service to reach 
+fullservice="" # <ssid><service>
+
+function error() {
+       echo ERROR: "$@" >&2
+       cat << EOF >&2
+Usage: 
+       $script connect <ssid> [passphrase]
+       $script disconnect [ssid]
+       $script scan
+       $script status
+EOF
+       exit 1
+}
+
+function wifi_enable() {
+       command=$($CONNMAN technologies | grep -A 4 wifi | sed -n '4p')
+
+       if [[ $command == *True ]]; then
+               echo ">>> Wifi is already enabled ... Ok"
+       else
+               echo ">>> Enabling wifi ..."
+               command=$($CONNMAN enable wifi)
+               if [[ $command == Enabled* ]]; then  
+                       echo $command
+               else 
+                       echo ">>> Cannot enable wifi !"
+                       exit 1
+               fi
+       fi
+}
+
+function wifi_disable() {
+       $CONNMAN disable wifi
+}
+
+function wifi_scan() {
+       echo -e "\n>>> Scanning for available wifi networks..."
+       $CONNMAN scan wifi
+}
+
+function wifi_connected() {
+       command=$($CONNMAN technologies | grep -A 4 wifi | sed -n '5p')
+
+       if [[ $command == *True ]];then
+               echo -e "\n>>> Already connected to a wifi network"
+               return 0
+       fi
+       return 1
+}
+
+function wifi_status() {
+       echo -e "\n>>> Wifi status:"
+       $CONNMAN technologies | grep -A 4 wifi
+       echo -e "\n>>> Available SSIDs:"
+       $CONNMAN services | grep wifi_
+}
+
+function wifi_config() {
+       echo -e "\n>>> Setting up wifi connection..."
+
+       retries=5
+
+       while [ 1 ]; do
+               $CONNMAN scan wifi
+               echo "\n>>> Available SSIDs:"
+               $CONNMAN services | grep wifi_
+
+               fullservice=$($CONNMAN services | cut -c 5- | sed 's/ \+ /:/g' | grep "$ssid:")
+               if [[ -n $fullservice ]]; then
+                       break
+               fi
+
+               retries=$(( retries - 1 ))
+               if [[ $retries -gt 0 ]]; then
+                       echo "waiting for $ssid to appear..."
+                       sleep 5
+                       continue
+               fi
+               echo "Target ssid not found !"
+               exit 1
+       done
+
+       ssid=$(echo "$fullservice" | awk -F: '{print $1}')
+       service=$(echo "$fullservice" | awk -F: '{print $2}')
+
+       echo "Target ssid found - config is :"
+       echo "SSID       : $ssid"
+       echo "Service Id : $service"
+       echo "Passphrase : $passphrase"
+
+       cat <<EOF >"$configpath/$ssid.config"
+[service_$service]
+Name = $ssid
+Type = wifi
+Passphrase = $passphrase
+EOF
+
+       echo "Configuration written"
+}
+
+function wifi_connect() {
+       echo -e "\n>>> Performing connection ..."
+       output=$($CONNMAN connect $service)
+
+       if [[ $output == Connected* ]];then
+               echo "...Ok."
+               echo $output
+       else
+               echo "...connection failed !"
+               echo $output
+
+               wifi_disconnect 
+               echo "Check your SSID or your passphrase"
+               exit 1
+       fi
+}
+
+function wifi_disconnect() {
+
+       if [[ -z "$ssid" ]]; then
+               $CONNMAN services | cut -c5- | sed 's/ \+ /:/g' | ( while read line; do
+                       ssid=$(cut -f1 -d':' <<<$line)
+                       serv=$(cut -f2 -d':' <<<$line)
+                       if [[ "$serv" =~ ^wifi_  && -f "$configpath/$ssid.config" ]]; then
+                               echo "Disconnecting $serv"
+                               $CONNMAN disconnect $serv
+                               echo "Cleaning config $ssid.config"
+                               rm -rf "$configpath/$ssid.config"
+                       fi
+               done )
+               return 0
+       fi
+
+       service=$($CONNMAN services | cut -c 5- | sed 's/ \+ /:/g' | grep "^$ssid:" | awk -F: '{print $2}')             
+       if [[ -z "$service" ]]; then
+               echo "... unknown service"
+               rm -rf "$configpath/$ssid.config" # clear config in all cases
+               return 1
+       fi
+
+       output=$($CONNMAN disconnect $service)
+       rm -rf "$configpath/$ssid.config" # clear config in all cases
+       if [[ $output == Disconnected* ]];then
+               echo "...Ok."
+               echo $output
+       else
+               echo "...disconnection failed !"
+               echo $output
+               return 1
+       fi
+}
+
+case $1 in
+       connect)
+               ssid=$2
+               passphrase=$3   
+               [ -z "$ssid" ] && error "No ssid defined !"
+               wifi_enable
+               wifi_connected && exit 0
+               wifi_config
+               wifi_connect
+               ;;
+       disconnect)
+               ssid=$2 
+               wifi_disconnect
+               wifi_disable
+               ;;
+       scan)
+               wifi_enable
+               wifi_scan
+               wifi_status
+               ;;
+       status)
+               wifi_status
+               ;;
+       *)
+               error "Command line doesn't have any option !"
+esac
+
diff --git a/scripts/wifi-config b/scripts/wifi-config
new file mode 100755 (executable)
index 0000000..8d7c86c
--- /dev/null
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+# Offer a dialog interface for simple wifi connection
+# Exit with value 2 if SIGINT is sent.
+
+data_out="/tmp/wifi-config.$$"
+. /usr/sbin/dialog-helper
+
+ssid=""
+passphrase=""
+
+trap "exit 2" SIGINT
+
+while [ 1 ]; do
+       wifi scan > $data_out
+       ap=$(grep "wifi_" "$data_out" | sed "s/^\*A/\t/" | awk '{$(NF--)=""; print}' | sed "s/^\(.*\) $/\"\1\"/g")
+       rm -f $data_out 2> /dev/null
+
+       if [ -z "$ssid" ]; then
+               eval dialog_helper --no-items --menu "'choose your AP'" 20 40 20 $ap
+               ssid="$DIALOGRES"
+       fi
+
+       if [ -z "$passphrase" ]; then
+               dialog_helper --inputbox "Network's passphrase (leave empty if none)" 10 40
+               passphrase="$DIALOGRES"
+       fi
+
+       wifi connect "$ssid" "$passphrase" 2>1 | dialog --progressbox "Wifi connecting..." 40 100
+       if [ $? -eq 0 ]; then
+               dialog --msgbox "You are connected" 10 40
+               exit 0
+       else
+               ssid=""
+               passphrase=""
+               dialog --yesno "Connection failed. Do you want to retry ?" 10 40 && continue
+               exit 1
+       fi
+done
index ecf922b..21c0d27 100644 (file)
@@ -1,7 +1,12 @@
 [Unit]
 Description=Installer
+After=getty@tty2.service
 
 [Service]
 Type=oneshot
-ExecStart=/usr/sbin/system-installer -a
+ExecStart=/usr/sbin/system-installer
 ExecStartPost=/usr/sbin/reboot
+StandardInput=tty
+TTYPath=/dev/tty2
+TTYReset=yes
+TTYVHangup=yes