#!/bin/sh # ***** BEGIN LICENSE BLOCK ***** # * Copyright (C) 2007 Alexey Gladkov # * Copyright (C) 2007 Dmitry V. Levin # * Copyright (C) 2007 Anton V. Boyarshinov # * # * This program is free software; you can redistribute it and/or modify # * it under the terms of the GNU General Public License as published by # * the Free Software Foundation; either version 2 of the License, or # * (at your option) any later version. # * # * This program is distributed in the hope that it will be useful, # * but WITHOUT ANY WARRANTY; without even the implied warranty of # * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # * GNU General Public License for more details. # * # * You should have received a copy of the GNU General Public License # * along with this program; if not, write to the Free Software # * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. # ***** END LICENSE BLOCK ***** alterator_api_version=1 preinstall_dir="/usr/share/install2/preinstall.d" alteratord_socket_dir="/var/run/alteratord" . alterator-sh-functions . install2-sh-functions . install2-remount-functions PROG=preinstall notify() { [ -z "$AUTOINSTALL" ] || return 0 alterator-mailbox-send "$1" ||: } run_preinstall() { if ! remount_chroot >&2; then notify "error \"destination filesystem remount error\"" fi local f max counter=0 max="$(find "$preinstall_dir" "$destdir/$preinstall_dir" -mindepth 1 -maxdepth 1 -type f -perm -u=x |wc -l)" notify "init #t max $max" # run scripts from packages first, because basic installer scripts can umount /image for f in "$destdir/$preinstall_dir"/* "$preinstall_dir"/*; do [ -f "$f" -a -x "$f" ] || continue if "$f" >&2; then notify "package \"${f##*/}\" step $counter" counter=$(($counter + 1)) printf '%s %s - OK\n' "$(date +%T)" "$f" >&2 else notify "error \"${f##*/}\"" printf '%s %s - FAILED\n' "$(date +%T)" "$f" >&2 break fi done notify "package \" \" step $max" # replace itself with alteratord from chroot [ -n "${ALTERATOR_DESTDIR:-}" ] || return rm -f /tmp/alterator/.socket mount -o bind /run $destdir/run mount -o bind $destdir$alteratord_socket_dir $alteratord_socket_dir chroot "$ALTERATOR_DESTDIR" /etc/init.d/alteratord start # altbug #37050 workaround #sed -i '1,/^installer\-preinstall/d' /usr/share/install2/installer-steps #cp -Lf /usr/share/install2/installer-steps $destdir/usr/share/install2/ #cp -LRf /usr/share/install2/steps $destdir/usr/share/install2/ #cp -LRf /usr/share/alterator/design/images/steps $destdir/usr/share/alterator/design/images/ #cp -Lf /usr/lib/alterator/backend3/step-list $destdir/usr/lib/alterator/backend3/ #cp -LRf /usr/share/alterator/ui/wizard $destdir/usr/share/alterator/ui/ cp -LRf $destdir/usr/share/alterator/ui/* /usr/share/alterator/ui/ # wait until new alteratord is ready to use alterator-wait # notify interface about finish notify "done #t" sync # stop old alteratord and kill itself #sleep 1 #service alteratord stop } on_message() { case "$in_action" in write) echo "$PROG: write init" >&2 if [ -z "$AUTOINSTALL" ]; then run_preinstall & else run_preinstall fi ;; esac } message_loop