#!/bin/bash

set -e

#由于可配置无后配置，在此执行必须进入真实系统执行的脚本
## 初始化环境变量
source /usr/share/deepin-installer/tools/scripts/init_environment.sh
## 导入函数库
source $DI_INSTALL_TOOLS_DIR_ENV/scripts/function_include.sh
## 初始化日志
LOG_FILE="/var/log/deepin-installer/deepin-installer-extra.log"
init_log $LOG_FILE

sleep 1

exec_first_boot_jobs(){
    JOBS_PATH=$DI_INSTALL_TOOLS_DIR_ENV/hooks/first_boot
    if [ -d $JOBS_PATH ]; then
        jobs=`ls $JOBS_PATH/* | sort`
        for job in $jobs
        do
            /bin/bash -e $job
        done
    fi
}

install_first_boot_deb() {
     FIRST_BOOT_DEB_PATH=$DI_INSTALL_DIR_ENV/first_boot_deb
     # 运行此脚本的时候本地仓库已经删除，使用dpkg安装定制包。
     dpkg -i --force-confnew $FIRST_BOOT_DEB_PATH/*.deb || warning "install first boot deb failed"
}


# 预先设置/sys/power/resume
# 新版本的systemd中/sys/power/resume的值合法是系统能休眠的必要条件
# 此时/sys/power/resume的值是无效的，所以在后配置中，需要在安装完成后，
# 设置/sys/power/resume的值为swap分区的主次设备号。以保证系统安装完成的第一次启动休眠功能正常
pre_set_resume() {
    # 获取最大的swap分区
    local swap_device=$(grep ^/dev/ /proc/swaps | sort -rnk3 | cut -d " " -f 1)

    if [ -n "$swap_device" ]; then
        # 获取swap分区的主次设备号
        local major_minor=$(lsblk -no MAJ:MIN $swap_device | tr -d ' ')
        echo -ne "$major_minor" > /sys/power/resume
    fi
}


## 主函数
main() {
    local exec_extra=$(installer_get "DI_EXEC_EXTRA")
    if [ "x$exec_extra" = "xtrue" ]; then
        # 设置resume
        pre_set_resume

        # 设置区域格式
        set_region_fomat

        # 设置时间同步
        enable_ntp

        install_first_boot_deb
        #更新initrd,因为live环境通过chroot更新initrd存在swap分区的uuid未写入的情况，所以在这里执行。
        /usr/sbin/update-initramfs -k all -u

        # 设置冰点还原
        enable_ice_restore

        exec_first_boot_jobs

        installer_set DI_EXEC_EXTRA "false"

        # 记录系统安装日期
        DI_INSTALL_FINISH_TIME=$(date '+%Y-%m-%d %H:%M:%S UTC%:::z')
        installer_set DI_INSTALL_FINISH_TIME "$DI_INSTALL_FINISH_TIME"

         #没有后配置时deepin-install-extra.service才会自启动
         # 以下是没有后配置情况下的最后一步，卸载安装器必须放到最后
        if ! is_have_first_boot; then
            systemctl disable deepin-installer-extra
            apt-get -y purge deepin-installer || warning "uninstall deepin-installer failed"
            apt-get -y autoremove || warning "autoremove failed"
            crypt_log "/var/log/deepin-installer"
            first_backup
        fi
    fi
}

main > $LOG_FILE 2>&1
