From 95a85093fa7750b41b654a08fcf759a85aba2acd Mon Sep 17 00:00:00 2001
From: Martin Pietsch <martin.pietsch@tu-dresden.de>
Date: Tue, 3 Dec 2019 10:26:42 +0100
Subject: [PATCH] switch from tiny core linux to alpine linux

---
 defaults/main.yml           |  4 ++--
 files/diskspreparation.sh   |  4 ++--
 files/functions.sh          | 10 +++-------
 files/inittab               | 18 ++++++++++++++++++
 files/installer.sh          |  2 +-
 files/startup               | 25 +++++++++++++++++++++++++
 tasks/_mergeimages.yml      | 28 ++++++++++++++--------------
 tasks/buildinstaller.yml    | 23 ++++++++++++-----------
 tasks/finaliseinstaller.yml | 22 +++++++++++++++++++++-
 9 files changed, 98 insertions(+), 38 deletions(-)
 create mode 100644 files/inittab
 create mode 100644 files/startup

diff --git a/defaults/main.yml b/defaults/main.yml
index b04d4fa..25e9dc1 100644
--- a/defaults/main.yml
+++ b/defaults/main.yml
@@ -1,4 +1,4 @@
 ---
-linux_installer_home_mirror: "http://tinycorelinux.net"
+linux_installer_home_mirror: "http://dl-cdn.alpinelinux.org/alpine"
 linux_installer_local_mirror: "{{ linux_installer_home_mirror }}" 
-linux_installer_version: "10.x"
+linux_installer_version: "3.10"
diff --git a/files/diskspreparation.sh b/files/diskspreparation.sh
index 9e601cd..179cae8 100755
--- a/files/diskspreparation.sh
+++ b/files/diskspreparation.sh
@@ -418,9 +418,9 @@ createTargetDirectoryLayout(){
       mkdir -p $1/${mntpnt}
       if [ -z "${opts}" ];
       then
-        mount -t ${fs} ${partdev} $1/${mntpnt}
+        mount -t ${fs} ${partdev} $1${mntpnt}
       else
-        mount -t ${fs} ${partdev} $1/${mntpnt} -o ${opts}
+        mount -t ${fs} ${partdev} $1${mntpnt} -o ${opts}
       fi 
     fi
   done
diff --git a/files/functions.sh b/files/functions.sh
index d3042ce..63c211f 100755
--- a/files/functions.sh
+++ b/files/functions.sh
@@ -1,15 +1,11 @@
-# installTcPackages - install tiny core packages
+# installPackages - install tiny core packages
 # parameter:
 #  $@ - list of package names
 # return:
 #  0 is installed
 #  1 something went wrong
-installTcPackages(){
-  while [ $# -gt 0 ];
-  do
-    su tc -c "tce-load -s -w -i $1" 2>&1 >/dev/null
-    shift
-  done
+installPackages(){
+  apk add $@
 } 
 
 # beginLogEntry - starts a new log entry
diff --git a/files/inittab b/files/inittab
new file mode 100644
index 0000000..d827d8c
--- /dev/null
+++ b/files/inittab
@@ -0,0 +1,18 @@
+# /etc/inittab
+
+::sysinit:/sbin/openrc sysinit
+::sysinit:/sbin/openrc boot
+::wait:/sbin/openrc default
+
+# Set up getty for installer
+tty1::respawn:/sbin/getty -nl /opt/startup 38400 tty1
+
+# Put a getty on the serial port
+#ttyS0::respawn:/sbin/getty -L ttyS0 115200 vt100
+
+# Stuff to do for the 3-finger salute
+::ctrlaltdel:/sbin/reboot
+
+# Stuff to do before rebooting
+::shutdown:/sbin/openrc shutdown
+
diff --git a/files/installer.sh b/files/installer.sh
index eaa06f2..18af91a 100755
--- a/files/installer.sh
+++ b/files/installer.sh
@@ -26,6 +26,6 @@ finishLogEntry "done"
 
 beginLogEntry "install ssh key in target"
 cp /opt/ansible.pub /target/etc/ssh/authorized_keys
-chmod 644 /target/etc/sshd/authorized_keys
+chmod 644 /target/etc/ssh/authorized_keys
 finishLogEntry "done"
 
diff --git a/files/startup b/files/startup
new file mode 100644
index 0000000..92db923
--- /dev/null
+++ b/files/startup
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+. /opt/functions.sh
+
+beginLogEntry "install default dependencies"
+installPackages bash parted bc ntfs-3g dosfstools openssl btrfs-progs e2fsprogs blkid
+finishLogEntry "done"
+
+beginLogEntry "get Answerfile from \"${ANSWERFILE_PATH}\""
+getAnswerfile ${ANSWERFILE_PATH} /tmp/answerfile
+if [ $? -eq 0 ];
+then
+  finishLogEntry "done"
+  if [ "x${DEBUG}" = "yes" ]; then
+    /opt/dbgmode
+  else     
+    /opt/installer.sh 
+    #reboot
+   /bin/sh
+  fi
+else
+  finishLogEntry "failed"
+  /opt/dbgmode
+fi
+
diff --git a/tasks/_mergeimages.yml b/tasks/_mergeimages.yml
index 2640ef6..fabda31 100644
--- a/tasks/_mergeimages.yml
+++ b/tasks/_mergeimages.yml
@@ -2,28 +2,28 @@
 - name: detect architecture
   set_fact: 
      _linux_installer_arch: "x86_64"
-     _linux_installer_corefile: "corepure64.gz"
-     _linux_installer_kernelfile: "vmlinuz64"
-  when: _linux_dist_arch == "x86_64" or  _linux_dist_arch == "amd64"
+  when: _linux_dist_arch == "x86_64" or  _linux_dist_arch == "amd64" or _linux_dist_arch == "x64"
 
 - set_fact: 
      _linux_installer_arch: "x86"
-     _linux_installer_corefile: "core.gz"
-     _linux_installer_kernelfile: "vmlinuz"
   when: _linux_dist_arch == "x86" or (_linux_dist_arch | regex_search('i[0-9]86'))
 
-- name: download tiny core linux image file
+- set_fact:
+     _linux_installer_initrfsfile: "initramfs-vanilla"
+     _linux_installer_kernelfile: "vmlinuz-vanilla"
+
+- name: download linux installer initrfs image file 
   get_url:
-    url: "{{ '%s/%s/%s/release/distribution_files/%s' | format(linux_installer_home_mirror, linux_installer_version, _linux_installer_arch, _linux_installer_corefile) }}"
-    dest: "{{ '/tmp/%s' | format(_linux_installer_corefile) }}"
+    url: "{{ '%s/v%s/releases/%s/netboot/%s' | format(linux_installer_home_mirror, linux_installer_version, _linux_installer_arch, _linux_installer_initrfsfile) }}"
+    dest: "{{ '/tmp/%s' | format(_linux_installer_initrfsfile) }}"
 
-- name: download tiny core linux kernel file
+- name: download linux installer kernel file
   get_url:
-    url: "{{ '%s/%s/%s/release/distribution_files/%s' | format(linux_installer_home_mirror, linux_installer_version, _linux_installer_arch, _linux_installer_kernelfile) }}"
-    dest: "{{ '/tmp/%s' | format(_linux_installer_kernelfile) }}"
+    url: "{{ '%s/v%s/releases/%s/netboot/%s' | format(linux_installer_home_mirror, linux_installer_version, _linux_installer_arch, _linux_installer_kernelfile) }}"
+    dest: "{{ '/tmp/%s_%s' | format(_linux_installer_kernelfile, _linux_dist_arch) }}"
 
-- name: merge tiny core image with installer image
-  shell: "{{ 'cat /tmp/%s %s >/tmp/linux_%s_%s.gz' | format(_linux_installer_corefile, _linux_installer_image_file.path, linux_installer_distribution, _linux_dist_arch) }}"
+- name: merge linux installer initrfs image with installer image
+  shell: "{{ 'cat /tmp/%s %s >/tmp/linux_%s_%s.gz' | format(_linux_installer_initrfsfile, _linux_installer_image_file.path, linux_installer_distribution, _linux_dist_arch) }}"
 
 - name: save images for registration
   set_fact:
@@ -32,7 +32,7 @@
         {%- if system_installer_images is defined -%}
         {%-   set retval.data = system_installer_images -%}
         {%- endif -%}
-        {%- do retval.data.append(['/tmp/linux_%s_%s.gz' | format(linux_installer_distribution, _linux_dist_arch), '/tmp/%s' | format(_linux_installer_kernelfile),
+        {%- do retval.data.append(['/tmp/linux_%s_%s.gz' | format(linux_installer_distribution, _linux_dist_arch), '/tmp/%s_%s' | format(_linux_installer_kernelfile, _linux_dist_arch),
                                               linux_installer_distribution, _linux_dist_release, _linux_dist_arch]) -%}
         {{- retval.data -}}
   loop: "{{ system_supported_releases[linux_installer_distribution] }}"
diff --git a/tasks/buildinstaller.yml b/tasks/buildinstaller.yml
index 0cc6087..12990f4 100644
--- a/tasks/buildinstaller.yml
+++ b/tasks/buildinstaller.yml
@@ -13,33 +13,34 @@
     path: "{{ '%s/opt' | format(linux_build_installer_root) }}"
     state: directory
 
-- name: create installers opt directory
+- name: create installers etc directory
   file:
-    path: "{{ '%s/root' | format(linux_build_installer_root) }}"
+    path: "{{ '%s/etc' | format(linux_build_installer_root) }}"
     state: directory
 
-- name: install basic installer scripts
+- name: configure boot default services
+  copy:
+    dest: "{{ '%s/etc/.default_boot_services' | format(linux_build_installer_root) }}"
+    content: "boot_default_services"
+ 
+- name: install custom inittab
   copy:
-    src: profile
-    dest: "{{ '%s/root/.profile' | format(linux_build_installer_root) }}"
+    src: "inittab"
+    dest: "{{ '%s/etc/inittab' | format(linux_build_installer_root) }}" 
+    mode: "0644"
 
 - name: install ssh public key
   copy:
     src: "{{ '%s/ansible.pub' | format(ansible_sshkeys) }}"
     dest: "{{ '%s/opt/ansible.pub' | format(linux_build_installer_root) }}"
 
-- name: set linux installer repository
-  copy:
-    dest: "{{ '%s/opt/tcemirror' | format(linux_build_installer_root) }}"
-    content: "{{ linux_installer_home_mirror }}"
-
 - name: install basic installer scripts
   copy:
     src: "{{ _linux_install_file.name }}"
     dest: "{{ '%s/opt/%s' | format(linux_build_installer_root, _linux_install_file.name) }}"
     mode: "{{ _linux_install_file.mode }}"
   loop:
-    - {"name": "bootlocal.sh", "mode": "0775" }
+    - {"name": "startup", "mode": "0755"}
     - {"name": "dbgmode", "mode": "0755" }
     - {"name": "installer.sh", "mode": "0775"}
     - {"name": "functions.sh", "mode": "0775"}
diff --git a/tasks/finaliseinstaller.yml b/tasks/finaliseinstaller.yml
index ce0cbf9..a000935 100644
--- a/tasks/finaliseinstaller.yml
+++ b/tasks/finaliseinstaller.yml
@@ -1,4 +1,19 @@
 
+- name: create temporary root directory
+  tempfile:
+    state: directory
+  register: _linux_temporary_root_directory  
+
+- name: create target directory for compressed overlay filesystem
+  file:
+    path: "{{ '%s/opt' | format(_linux_temporary_root_directory.path) }}"
+    state: directory
+
+- name: compress overlay filesystem
+  archive:
+    path: "{{ '%s/*' | format(linux_build_installer_root) }}"
+    dest: "{{ '%s/opt/ovl.tar.gz'  | format(_linux_temporary_root_directory.path) }}"    
+
 - name: create temporary linux installer image name
   tempfile:
     suffix: ".gz"
@@ -7,7 +22,7 @@
 - name: compress linux installer
   shell: "{{ 'find | cpio -o -H newc -R +0:+0 | gzip -2 > %s' | format(_linux_installer_image_file.path) }}"
   args:
-    chdir: "{{ linux_build_installer_root }}"
+    chdir: "{{ _linux_temporary_root_directory.path }}"
 
 - include_role:
      name: system.linux
@@ -20,6 +35,11 @@
      name: system
      tasks_from: installer
 
+- name: cleanup temporary root directory
+  file:
+    path: "{{ _linux_temporary_root_directory }}"
+    state: absent
+
 - name: cleanup installers build root directory
   file:
     path: "{{ linux_build_installer_root }}"
-- 
GitLab