#!/usr/bin/env zsh

di_disk_info() {
	fn iso_write_info
	req=(strapdir workdir blendlib version release earch)
	ckreq || return 1
	
	sudo mkdir -p "$workdir"/binary/.disk
	
	echo "live" > "$workdir"/binary/.disk/cd_type
	
	blend=${blendlib##*/}
	distrib=${blend%%-*}
	distrib=`echo "$distrib" | sed 's/^./\u&/'`
	current_time=$(date "+%Y%m%d-%H:%M")
	cd_info="$distrib ${version%%.*} \"${release}\" - Build $earch LIVE/INSTALL Binary $current_time"

	echo "${cd_info}" > "$workdir"/binary/.disk/info
	
	var=`echo "$(ps -e | date 2>&1)"`	
	echo "${var}" > "$workdir"/binary/.disk/archive_trace
	
	echo "" > "$workdir"/binary/.disk/base_installable
	
	echo "netcfg
ethdetect
pcmciautils-udeb
live-installer" > "$workdir"/binary/.disk/udeb_include

	echo "main" > "$workdir"/binary/.disk/base_components
}

di_debmirror () {

	fn blend_debmirror
	req=(workdir arch release linux_path url_pkg root)
	ckreq || return 1
	
	rm -rf $workdir/repo-$release

	debmirror -h $url \
		--dist=$release \
		--root=$root \
		--arch=$arch \
		--section=main/debian-installer \
		--nosource \
		--progress \
		--ignore-release-gpg \
		--method http \
		--diff=none \
		$workdir/repo-$release
	
	## Dirty, but needed on beowulf
	mv $workdir/repo-$release/$linux_path $workdir/repo_tmp
	mv $workdir/repo_tmp $workdir/repo-$release/${linux_path%/*}/linux		
}

di_localudebs () {

	fn blend_localudebs
	req=(workdir release arch flavor)
	ckreq || return 1

	rm -rf $workdir/tmp_repo-$release	
	cp -a $workdir/repo-$release $workdir/tmp_repo-$release

	list="${workdir}/custom_udebs_list"
	var1=`find $R/extra/custom-udebs/$release -name "*_$arch.udeb"`
	var2=`find $R/extra/custom-udebs/$release -name "*_all.udeb"`
	echo "${var1}\n${var2}" > $list
	
	for line in $(cat $list); do
		fullname=${line##*/}
		package_name=${fullname%%_*}
		var=`find $workdir/tmp_repo-$release -name "*$package_name*.udeb"`	
		rm -f $var
		cp $line $workdir/tmp_repo-$release
	done
	
	rm -f $workdir/custom_udebs_list
}

di_banudebs () {

	fn di_banned_udebs
	req=(workdir release)
	ckreq || return 1
	
	list=$R/extra/banudebs
	for line in $(cat $list); do
		pkg_name=${line##*/}
		var=`find $workdir/tmp_repo-$release/ -name "*${pkg_name}*.udeb"`
		rm -f $var
	done
}

di_reprepro () {

	fn blend_reprepro
	req=(workdir release abiname arch flavor suite url_pkg root)
	ckreq || return 1

	mkdir -p $workdir/binary/conf
	
echo \
"Origin: Devuan
Label: Debian ${release} packages
Suite: ${suite}
Codename: ${release}
Architectures: ${arch}
Components: main
UDebComponents: main
Description: Packages for devuan-installer
DebIndices: Packages Release . .gz
UDebIndices: Packages Release . .gz " > $workdir/binary/conf/distributions

	mkdir -p $workdir/debs
	
	pushd $workdir/debs
	rm -f Packages	
	wget $url_pkg/dists/$release/main/binary-$arch/Packages.gz
	gzip -d Packages.gz
	mv Packages Packages1
	rm -f Packages.gz
	wget $url_pkg/dists/$release/main/binary-all/Packages.gz
	gzip -d Packages.gz
	mv Packages Packages2
	cat Packages1 Packages2 > Packages

	list=$R/extra/di_pkgs
	for line in $(cat $list); do
		echo $line
		pkg=`grep "^Filename: pool/" Packages | grep "/${line}_" | grep ".deb"`
		wget $url_pkg/${pkg#*" "}
 	done
	
	source $R/extra/reprepro_list
	
	pushd $workdir/binary

	for line in ${udebs_list}; do
		find $workdir/tmp_repo-$release \
			-name "${line}_*${arch}.udeb" \
			-exec reprepro \
				--ask-passphrase -b . -V -C main includeudeb $release {} \;
	done
	
	for line in $udebs_list; do
		find $workdir/tmp_repo-$release \
			-name "${line}_*all.udeb" \
			-exec reprepro \
				--ask-passphrase -b . -V -C main includeudeb $release {} \;
	done

	for line in $modules_list; do 
		find $workdir/tmp_repo-$release \
			-name "*${line}-modules-${abiname}*-${flavor}-di_*_${arch}.udeb" \
			-exec reprepro \
				--ask-passphrase -b . -V -C main includeudeb $release {} \;
 	done
	
	find $workdir/debs -name "*.deb" -exec reprepro \
		--ask-passphrase -b . -V -C main includedeb $release {} \;
		
	popd
	
	rm -rf $workdir/binary/conf
	rm -rf $workdir/binary/db
	ln -s $workdir/binary/dists/$release $workdir/binary/dists/$suite	
	
}		

di_debian_installer() {

	fn blend_debian_installer
	req=(workdir os release arch strapdir url_pkg url_di abiname flavor suite)
	ckreq || return 1

	rm -rf $workdir/d-i
	mkdir -p $workdir/d-i
	pushd $workdir/d-i
	wget $url_pkg/dists/$release/main/source/Sources.gz
	rm -f Sources
	gzip -d Sources.gz

	if grep "debian-installer_" Sources | grep ".tar.gz"
	then
	    line=`grep "debian-installer_" Sources | grep ".tar.gz"`
	elif  grep "debian-installer_" Sources | grep ".tar.xz"
	then
	    line=`grep "debian-installer_" Sources | grep ".tar.xz"`
	fi
	
	rm -f Sources
	line=${line##*_}
	
	if [ $url_pkg = $url_di ]; then
		wget $url_di/pool/DEVUAN/main/d/debian-installer/debian-installer_$line
	else
		wget $url_di/pool/main/d/debian-installer/debian-installer_$line
	fi
	
	if [ ${line##*.} = "xz" ]; then
		tar -Jxvf "debian-installer_$line"
	elif [ ${line##*.} = "gz" ]; then
		tar -xzvf "debian-installer_$line"
	fi	
	
	line=${line%.*}
	di_version=${line%.*}
	if [ -d $workdir/d-i/debian-installer-$di_version ]; then
		d=$workdir/d-i/debian-installer-$di_version/build
	else d=$workdir/d-i/source/build
	fi

	rm -f $d/sources.list.udeb.local
	echo "deb [trusted=yes] copy:${d}/ localudebs/" >> $d/sources.list.udeb.local
	
	mkdir -p $d/localudebs	

	find $workdir/tmp_repo-$release -name "*.udeb" -exec cp {} $d/localudebs \;
	
	line="LINUX_KERNEL_ABI ?= ${abiname}"
	sed -i '1i '"${line}"'' $d/config/common
	
	pushd $d
	make reallyclean
	make --keep-going --ignore-errors build_cdrom_isolinux	
	popd
	
	mkdir -p $workdir/d-i/tmp/tmp1
	mv $d/dest/cdrom/gtk/initrd.gz $workdir/d-i/tmp
	pushd $workdir/d-i/tmp
	gunzip initrd.gz
	cd tmp1
	cpio -id < ../initrd
	gtkrc="$R/extra/d-i/gtkrc"
	logo="$R/extra/d-i/logo_installer_darkpurpy.png"
	[[ -f $gtkrc ]] && cp -av $gtkrc $workdir/d-i/tmp/tmp1/usr/share/themes/Clearlooks/gtk-2.0/
	[[ -f $logo  ]] && cp -av $logo  $workdir/d-i/tmp/tmp1/usr/share/graphics/
	find . | cpio --create --format='newc' > $d/dest/cdrom/gtk/initrd
	gzip -f $d/dest/cdrom/gtk/initrd
	rm -rf $workdir/d-i/tmp
	popd
	
	mkdir -p $workdir/binary/install
	mkdir -p $workdir/binary/install/gtk
	cp -av $d/dest/cdrom/ $workdir/binary/install/
	cp -av $d/dest/cdrom/vmlinuz $workdir/binary/install/
	cp -av $d/dest/cdrom/gtk/initrd.gz $workdir/binary/install/gtk/
	cp -av $d/dest/cdrom/gtk/vmlinuz $workdir/binary/install/gtk/	

## the preseed.cfg file:
	
	echo \
"
# Enable first user as sudo user
# d-i passwd/root-login boolean false

# Disable loading firmware, provided post install
d-i hw-detect/load_firmware boolean false

# Disable networking set-up, this is a live cd, so not needed as self-contained
d-i netcfg/enable boolean false

# Change default hostname to ${os}
d-i netcfg/get_hostname string ${os}
d-i netcfg/get_hostname seen false

# Change default filesystem from ext3 to ext4 (not neccesary since jessie)
d-i partman/default_filesystem string ext4

# Descomente lo siguiente si no quiere usar una réplica en red.
d-i apt-setup/use_mirror boolean false

# Run final commands in target install
d-i preseed/late_command string \
    in-target preseed-hack
    in-target rm -f /usr/bin/preseed-hack
    
# Omitir el mensaje final sobre la finalización de la instalación.
#d-i finish-install/reboot_in_progress note

" > $workdir/binary/install/preseed.cfg

	sudo chmod -R 777 $workdir/binary	
}
