tazpanel rev 516

Makefile add install_extra
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sun Aug 02 20:24:23 2015 +0200 (2015-08-02)
parents 06a4d2cde715
children 506184fa1105
files Makefile bootloader floppy.cgi powersaving.cgi
line diff
     1.1 --- a/Makefile	Sun Aug 02 19:43:30 2015 +0200
     1.2 +++ b/Makefile	Sun Aug 02 20:24:23 2015 +0200
     1.3 @@ -5,6 +5,8 @@
     1.4  DESTDIR?=
     1.5  LINGUAS?=el es fr pl pt_BR ru sv
     1.6  PANEL?=/var/www/tazpanel
     1.7 +BASECGI?=boot.cgi hardware.cgi help.cgi index.cgi network.cgi settings.cgi
     1.8 +EXTRACGI?=floppy.cgi powersaveing.cgi
     1.9  
    1.10  VERSION:=$(shell grep ^VERSION tazpanel | cut -d '=' -f 2)
    1.11  
    1.12 @@ -46,7 +48,10 @@
    1.13  		$(DESTDIR)/var/log
    1.14  	cp -a tazpanel $(DESTDIR)$(PREFIX)/bin
    1.15  	-[ "$(VERSION)" ] && sed -i 's/^VERSION=[0-9].*/VERSION=$(VERSION)/' $(DESTDIR)$(PREFIX)/bin/tazpanel
    1.16 -	cp -a *.cgi lib/ styles/ doc/ README* $(DESTDIR)$(PANEL)
    1.17 +	cp -a lib/ styles/ doc/ README* $(DESTDIR)$(PANEL)
    1.18 +	@for c in $(BASECGI); do \
    1.19 +		cp -a $$l $(DESTDIR)$(PANEL); \
    1.20 +	done;
    1.21  	if [ -e $(DESTDIR)$(PANEL)/user ] ; then rm -rf $(DESTDIR)$(PANEL)/user; fi
    1.22  	ln -s . $(DESTDIR)$(PANEL)/user
    1.23  	cp -a po/mo/*        $(DESTDIR)$(PREFIX)/share/locale
    1.24 @@ -62,6 +67,17 @@
    1.25  	mkdir -p $(DESTDIR)/usr/share/fonts/TTF
    1.26  	ln -fs $(PANEL)/styles/default/tazpanel.ttf $(DESTDIR)/usr/share/fonts/TTF/tazpanel.ttf
    1.27  
    1.28 +install_extra:
    1.29 +	mkdir -p \
    1.30 +		$(DESTDIR)$(PANEL)/menu.d/boot \
    1.31 +		$(DESTDIR)$(PANEL)/menu.d/hardware
    1.32 +	@for c in $(EXTRACGI); do \
    1.33 +		cp -a $$l $(DESTDIR)$(PANEL); \
    1.34 +	done;
    1.35 +	cp -a bootloader $(DESTDIR)/usr/bin
    1.36 +	ln -s ../../floppy.cgi $(DESTDIR)/menu.d/boot/floppy
    1.37 +	ln -s ../../powersaving.cgi $(DESTDIR)/menu.d/hardware/powersaving
    1.38 +
    1.39  # Clean source
    1.40  
    1.41  clean:
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/bootloader	Sun Aug 02 20:24:23 2015 +0200
     2.3 @@ -0,0 +1,396 @@
     2.4 +#!/bin/sh
     2.5 +#
     2.6 +# This script creates a floppy image set from a linux bzImage and can merge
     2.7 +# a cmdline and/or one or more initramfs.
     2.8 +#
     2.9 +# (C) 2009-2015 Pascal Bellard - GNU General Public License v3.
    2.10 +
    2.11 +usage()
    2.12 +{
    2.13 +cat <<EOT
    2.14 +Usage: $0 bzImage [--prefix image_prefix] [--info file] [--quiet]
    2.15 +       [--format 1200|1440|1680|1920|2880|...] [--mem mb] [--tracks cnt]
    2.16 +       [--rdev device] [--video mode] [--flags rootflags] [--no-syssize-fix]
    2.17 +       [--dont-edit-cmdline] [--cmdline 'args'] [--hide-version-string]
    2.18 +       [--address-initrd address] [--initrd initrdfile]...
    2.19 +
    2.20 +Default values: --format 1440 --tracks 80 --rdev /dev/fd0 --prefix floppy. --mem 16
    2.21 +
    2.22 +Example:
    2.23 +$0 /boot/bzImage --rdev /dev/ram0 --video -3 --cmdline 'rw lang=fr_FR kmap=fr-latin1 laptop autologin' --initrd /boot/rootfs.gz --initrd ./myconfig.gz
    2.24 +
    2.25 +or: $0 --extract floppy*
    2.26 +
    2.27 +Create kernel and maybe cmdline, initrd and info files from a floppy images set 
    2.28 +EOT
    2.29 +exit 1
    2.30 +}
    2.31 +
    2.32 +# bzImage offsets
    2.33 +SetupSzOfs=497
    2.34 +FlagsOfs=498
    2.35 +OldRamfsLenOfs=504
    2.36 +VideoModeOfs=506
    2.37 +RootDevOfs=508
    2.38 +Magic=0x202
    2.39 +RamfsAdrOfs=0x218
    2.40 +RamfsLenOfs=0x21C
    2.41 +
    2.42 +ddq() { dd $@ 2> /dev/null; }
    2.43 +
    2.44 +get()
    2.45 +{
    2.46 +echo $( od -v -j $(($1)) -N ${4:-${3:-2}} -t u${3:-2} -w${3:-2} -An $2 2>/dev/null ||
    2.47 +	hexdump -v -s $(($1)) -n ${4:-${3:-2}} -e "\"\" 1/${3:-2} \" %d\n\"" $2 )
    2.48 +}
    2.49 +
    2.50 +trace()
    2.51 +{
    2.52 +	[ -n "$DEBUG" ] && printf "$@" 1>&2 && echo 1>&2
    2.53 +}
    2.54 +
    2.55 +# usage: store bits offset data file
    2.56 +store()
    2.57 +{
    2.58 +	n=$3; for i in $(seq 8 8 $1); do
    2.59 +		printf '\\\\x%02X' $(($n & 255))
    2.60 +		n=$(($n >> 8))
    2.61 +	done | xargs echo -en | ddq bs=1 conv=notrunc of=$4 seek=$(($2))
    2.62 +	s=$1; a=$2; d=$3; shift 4; c="$@"
    2.63 +	trace "store$s(%03X) = %0$(($s/4))X	$c" $a $d
    2.64 +}
    2.65 +
    2.66 +die()
    2.67 +{
    2.68 +	echo $@ 1>&2
    2.69 +	exit 1
    2.70 +}
    2.71 +extract()
    2.72 +{
    2.73 +	shift
    2.74 +	[ ! -s "$1" ] && die "No floppy ?"
    2.75 +	[ $(get 0x1FE "$1") -ne 43605 ] && die "Not bootable"
    2.76 +	[ $(get $Magic "$1" 4) != 1400005704 ] &&
    2.77 +	[ $(get 0x1F4 "$1") -gt 32768 -o $(get 0x1F6 "$1") -ne 0 ] &&
    2.78 +	die "Not linux."
    2.79 +	FORMAT="$(($(stat -c "%s" $1)/1024))"
    2.80 +	cat <<EOT
    2.81 +--format $FORMAT
    2.82 +--rdev $(printf "0x%04X" $(get $RootDevOfs $1))
    2.83 +--video $(get $VideoModeOfs $1)
    2.84 +--flags $(get $FlagsOfs $1)
    2.85 +EOT
    2.86 +	MYBB="$(ddq if=$1 bs=512 count=1 | strings | grep "Insert disk 00")"
    2.87 +	cmdline=0
    2.88 +	info=0
    2.89 +	if [ "$MYBB" ]; then
    2.90 +		cmdline=$(get 0x22 $1)
    2.91 +		info=$(get 0x1EF $1)
    2.92 +		[ $(get 0x75 $1) -eq $((0xDB0)) ] && echo "--dont-edit-cmdline"
    2.93 +		[ $(get 0x58 $1) -eq $((0x9090)) ] && echo "--hide-version-string"
    2.94 +	fi
    2.95 +	n=$(($(get $SetupSzOfs $1 1)+1))
    2.96 +	[ $n -eq 1 ] && n=5
    2.97 +	[ $info -ne 0 ] && infolen=$(($n-$info/512)) && n=$(($info/512))
    2.98 +	[ $cmdline -ne 0 ] && n=$(($cmdline/512))
    2.99 +	cat "$@" | {
   2.100 +		ddq bs=512 count=$n >kernel
   2.101 +		files="kernel"
   2.102 +		if [ "$MYBB" ]; then
   2.103 +			store 8 $SetupSzOfs $(($n-1)) kernel "setup size $n"
   2.104 +			store 16 0x22 0 kernel "clear cmdline"
   2.105 +			store 16 0x1EF 0 kernel "clear info"
   2.106 +		fi
   2.107 +		[ $cmdline -ne 0 ] && files="$files cmdline" &&
   2.108 +		ddq bs=512 count=1 | strings | sed q > cmdline
   2.109 +		[ $info -ne 0 ] && files="$files info" &&
   2.110 +		ddq bs=512 count=$infolen | sed \
   2.111 +		 's/'$(echo -en "\xff\xff$//;s/\xff/\f")'/g;s/\r/\n/g;q' > info
   2.112 +		syssz=$(get 0x1F4 kernel 4)
   2.113 +		ddq bs=16 count=$syssz >>kernel
   2.114 +		[ $(($syssz % 32)) -ne 0 ] &&
   2.115 +		ddq bs=16 of=/dev/null count=$((32 - ($syssz % 32)))
   2.116 +		if [ $(get $Magic kernel 4) == 1400005704 ]; then
   2.117 +	  		ddq bs=1 count=200 skip=$((512+$(get 0x20E kernel 2))) \
   2.118 +	  			if=kernel | strings | sed q
   2.119 +			len=$(get $RamfsLenOfs kernel 4)
   2.120 +			if [ $len -ne 0 ]; then
   2.121 +				adrs=$(get $RamfsAdrOfs kernel 4)
   2.122 +				printf "--address-initrd 0x%X \n" $adrs
   2.123 +				echo "--mem $(((($adrs+$len)/1024+512)/1024))"
   2.124 +				ddq bs=512 count=$((($len+511)/512)) > initrd
   2.125 +				ddq count=0 bs=1 seek=$len of=initrd
   2.126 +				files="$files initrd"
   2.127 +				store 64 $RamfsAdrOfs 0 kernel "reset initrd"
   2.128 +			fi
   2.129 +			if [ $(get 0x206 kernel) -ge 514 ]; then
   2.130 +				store 32 0x228 0 kernel "clean cmdline32"
   2.131 +			fi
   2.132 +		else
   2.133 +			len=$(get $OldRamfsLenOfs kernel)
   2.134 +			[ $len -ne 0 ] && files="$files initrd" &&
   2.135 +			if [ -s "$2" ]; then
   2.136 +				ddq if=$2 bs=1024 count=$len of=initrd
   2.137 +			else
   2.138 +				ddq if=$1 bs=1024 skip=256 count=$len of=initrd
   2.139 +			fi
   2.140 +		fi
   2.141 +		ls -l $files
   2.142 +	}
   2.143 +	exit
   2.144 +}
   2.145 +
   2.146 +KERNEL=""
   2.147 +INITRD=""
   2.148 +ADRSRD=""
   2.149 +CMDLINE=""
   2.150 +PREFIX="floppy."
   2.151 +FORMAT="1440"
   2.152 +RDEV=""
   2.153 +VIDEO=""
   2.154 +FLAGS=""
   2.155 +TRACKS="80"
   2.156 +MEM="16"
   2.157 +HIDE=""
   2.158 +NOEDIT=""
   2.159 +QUIET=""
   2.160 +NOSYSSIZEFIX=""
   2.161 +INFOFILE=""
   2.162 +DEBUG=""
   2.163 +while [ -n "$1" ]; do
   2.164 +	case "${1/--/-}" in
   2.165 +	-c*) CMDLINE="$2"; shift;;
   2.166 +	-inf*) INFOFILE="$2"; shift;;
   2.167 +	-i*) INITRD="$INITRD $2"; shift;;
   2.168 +	-a*) ADRSRD="$2"; shift;;
   2.169 +	-h*) HIDE="1";;
   2.170 +	-p*) PREFIX="$2"; shift;;
   2.171 +	-fl*)FLAGS="$2"; shift;;	# 1 read-only, 0 read-write
   2.172 +	-f*) FORMAT="$2"; shift;;
   2.173 +	-m*) MEM="$(echo $2 | sed 's/[^0-9]//g')"; shift;;
   2.174 +	-r*) RDEV="$2"; shift;;
   2.175 +	-v*) VIDEO="$2"; shift;;	# -3 .. n
   2.176 +	-t*) TRACKS="$2"; shift;;	# likely 81 .. 84
   2.177 +	-n*) NOSYSSIZEFIX="1";;
   2.178 +	-debug) DEBUG="1";;
   2.179 +	-d*) NOEDIT="1";;
   2.180 +	-q*) QUIET="1";;
   2.181 +	-e*) extract "$@";;
   2.182 +	*) KERNEL="$1";;
   2.183 +	esac
   2.184 +	shift
   2.185 +done
   2.186 +[ -n "$KERNEL" -a -f "$KERNEL" ] || usage
   2.187 +while [ -L "$KERNEL" ]; do KERNEL="$(readlink "$KERNEL")"; done
   2.188 +if [ $(( $FORMAT % $TRACKS )) -ne 0 ]; then
   2.189 +	echo "Invalid track count for format $FORMAT."
   2.190 +	usage
   2.191 +fi
   2.192 +[ 0$MEM -lt 2  ] && MEM=2
   2.193 +
   2.194 +patch()
   2.195 +{
   2.196 +	echo -en $(echo ":$2" | sed 's/:/\\x/g') | \
   2.197 +		ddq bs=1 conv=notrunc of=$3 seek=$((0x$1))
   2.198 +	trace "patch $1 $2		$4"
   2.199 +}
   2.200 +
   2.201 +error()
   2.202 +{
   2.203 +	rm -f $bs
   2.204 +	die $@
   2.205 +}
   2.206 +
   2.207 +floppyset()
   2.208 +{
   2.209 +	# boot+setup address
   2.210 +	SetupBase=0x90000
   2.211 +
   2.212 +	bs=/tmp/bs$$
   2.213 +
   2.214 +	# Get and patch boot sector
   2.215 +	# See http://hg.slitaz.org/wok/raw-file/13835bce7189/syslinux/stuff/iso2exe/bootloader.S
   2.216 +	trace "Read bootsector..."
   2.217 +	ddq if=$KERNEL bs=512 count=1 of=$bs
   2.218 +
   2.219 +	[ $(get 0x1FE $bs) -eq 43605 ] || error "Not bootable"
   2.220 +	
   2.221 +	uudecode <<EOT | ddq of=$bs conv=notrunc
   2.222 +begin-base64 644 -
   2.223 +v8adaACQF4n8FgcxwLk7APOqWx+g8X1AD6H6xXd4XwZXvQAAsQbzpRYfZGaP
   2.224 +R3jGRfg/l1hB6CQBMfYLNu8BdAzoggF0B+hgATwbdfS+AAKBTBAggMZEJZvo
   2.225 +ZwEx9gt3G3Q6x0cZP6PoWwGwIOgtASwYc/lO6DEBmDwIdAOIBK05dxt08OgV
   2.226 +ATwKdd+IfP4WB78AgIn+h3cbtQLzpFuJ5v9IEMdAFAiTgPMIdfO79AGxBaEV
   2.227 +AmaLH2ZLZtPrZkOJRBtmv4AAAABmKfuccwIB31BTVjHbaACAB+hwAF5bjMG0
   2.228 +hxYHzRVYBQABEEwfnXfPuQkCuxwCOE/+che0iM0VPQCwcgaIbB+Ib/+hGQLT
   2.229 +b+J1o5fNE+oAACCQWjjBdzRgzRP56HMAYVJQKMh3ArABOfhyAon4ULQCzRNa
   2.230 +WHLclQHRjukA1wDXKddadE2M6ZU4wXXUiMixATDOdcz+xYD9UHXFtQBgvtEB
   2.231 +U7sPAIAg8Ev+AIA4OXf16EwAW4n16CkAdRVSmM0TuAECzRNa0NQ6Zv516kVI
   2.232 +debrjbAxHAO0DrsHAM0QPA1088O/bARkxgWmuA0BZDoldArNFnT0mM0WjudH
   2.233 +wwN0DrAN6NL/rDwAf/jDSW5zZXJ0IGRpc2sgMDAxIGFuZCBFbnRlci4HDQAA
   2.234 +AAA=
   2.235 +====
   2.236 +EOT
   2.237 +	# Get setup
   2.238 +	setupsz=$(get $SetupSzOfs $bs 1)
   2.239 +	if [ $setupsz -eq 0 ]; then
   2.240 +		setupsz=4
   2.241 +		store 8 $SetupSzOfs $setupsz $bs "setup size $setupsz"
   2.242 +	fi
   2.243 +	trace "Read setup ($setupsz sectors) ..."
   2.244 +	ddq if=$KERNEL bs=512 skip=1 count=$setupsz >> $bs
   2.245 +
   2.246 +	Version=$(get 0x206 $bs)
   2.247 +	[ $(get $Magic $bs 4) != 1400005704 ] && Version=0
   2.248 +	feature=""
   2.249 +	while read prot kern info ; do
   2.250 +		[ $Version -lt $((0x$prot)) ] && continue
   2.251 +		feature="features $prot starting from kernel $kern "
   2.252 +	done <<EOT
   2.253 +200	1.3.73	kernel_version, bzImage, initrd, loadflags/type_of_loader
   2.254 +201	1.3.76	heap_end_ptr
   2.255 +202	2.4.0	new cmdline + relocatable setup
   2.256 +204	2.6.14	long syssize
   2.257 +206	2.6.22	cmdline maxsize $(get 0x238 $bs 4)
   2.258 +EOT
   2.259 +	trace "Protocol %X $feature" $Version
   2.260 +	
   2.261 +	# Old kernels need bootsector patches to disable rescent features
   2.262 +	while read minversion maxversion offset bytes rem; do
   2.263 +		[ $Version -gt $(( 0x$maxversion )) ] && continue
   2.264 +		[ $Version -lt $(( 0x$minversion )) ] && continue
   2.265 +		patch $offset $bytes $bs "$rem"
   2.266 +	done <<EOT
   2.267 +000 1FF 0B2	B8:00:01			force zImage (movw \$0x100, %ax)
   2.268 +000 1FF 0F9	EB				skip initrd code 
   2.269 +000 1FF 059	90:90:90			no kernel version
   2.270 +000 1FF 050	90:90:90:90:90			type_of_loader
   2.271 +000 200 055	90:90:90:90			heap_end_ptr
   2.272 +000 203 1F6	00:00 				syssize32
   2.273 +EOT
   2.274 +	[ -n "$CMDLINE" ] || patch 061 EB $bs "No cmdline"
   2.275 +	[ -n "$HIDE" ] && patch 058 90 90 90 $bs "Hide version"
   2.276 +	[ -n "$NOEDIT" ] && patch 075 B0:0D:90 $bs 'mov CR,%al ; nop'
   2.277 +	[ 1$TRACKS -ne 180 ] &&	store	8	0x15F		$TRACKS $bs TRACKS
   2.278 +	
   2.279 +	[ -n "$FLAGS" ] &&	store	16	$FlagsOfs	$FLAGS $bs FLAGS
   2.280 +	[ -n "$VIDEO" ] &&	store	16	$VideoModeOfs	$VIDEO $bs VIDEO
   2.281 +	[ -n "$RDEV" ] || case "$FORMAT" in
   2.282 +		1200)	RDEV=0x0208 ;;
   2.283 +		1440)	RDEV=0x021C ;;
   2.284 +		2880)	RDEV=0x0220 ;;
   2.285 +		*)	RDEV=0x0200 ;;
   2.286 +	esac
   2.287 +	while [ -L "$RDEV" ]; do RDEV="$(readlink "$RDEV")"; done
   2.288 +	[ -b "$RDEV" ] && RDEV=$(stat -c '0x%02t%02T' $RDEV 2> /dev/null)
   2.289 +	[ "$(echo $RDEV | tr '[0-9A-FXa-fx]' 0 | sed 's/0//g')" ] ||
   2.290 +	store 16 $RootDevOfs $RDEV $bs RDEV
   2.291 +
   2.292 +	[ $FORMAT -lt 720  ] && store 8 0x15F 40	 $bs	360K
   2.293 +	[ $FORMAT -lt 320  ] && store 8 0x158 237	 $bs	160K
   2.294 +	
   2.295 +	extra=0
   2.296 +	# Store cmdline after setup for kernels >= 0.99
   2.297 +	if [ -n "$CMDLINE" ]; then
   2.298 +		CmdlineOfs=$(stat -c '%s' $bs)
   2.299 +		store 16 0x22 $CmdlineOfs $bs "Cmdline @$CmdlineOfs '$CMDLINE'"
   2.300 +		[ $Version -ge 514 ] &&
   2.301 +		store 32 0x228 $(( $SetupBase + 0x8000 )) $bs "Cmdline32"
   2.302 +		echo -n "$CMDLINE" | ddq bs=512 count=1 conv=sync >> $bs
   2.303 +		extra=$(($extra+1))
   2.304 +		store 8 0x1F1  $(($setupsz+$extra))	 $bs	setup size
   2.305 +		[ $Version -ge 512 ] && [ -n "$QUIET" ] &&
   2.306 +		store 8 0x211 $(($(get 0x211 $bs 1) | 32)) $bs suppress early messages
   2.307 +	fi
   2.308 +
   2.309 +	# Info text after setup
   2.310 +	if [ -s "$INFOFILE" ]; then
   2.311 +		InfoOfs=$(stat -c '%s' $bs)
   2.312 +		sed -e ':a;N;$!ba;s/\r\n/\r/g;s/\n/\r/g' \
   2.313 +		    -e 's/'$(echo -e "\f/\xff/g;s/$/\xff\xff")'/' \
   2.314 +			< "$INFOFILE" > $bs.infotext
   2.315 +		ddq if=/dev/zero bs=512 count=1 >>$bs.infotext
   2.316 +		infolen=$(($(stat -c %s $bs.infotext)/512))
   2.317 +		ddq if=$bs.infotext count=$infolen bs=512 >> $bs
   2.318 +		extra=$(($extra+$infolen))
   2.319 +		rm -f $bs.infotext
   2.320 +		store 8 0x1F1  $(($setupsz+$extra))	$bs	setup size
   2.321 +		store 16 0x1EF  $InfoOfs $bs	update infoptr
   2.322 +	fi
   2.323 +
   2.324 +	syssz=$((($(stat -c %s $KERNEL)+15)/16-32*(1+$setupsz)))
   2.325 +	#syssz=$(get 0x1F4 $bs 4)
   2.326 +	sysszsect=$((($syssz+31)/32))
   2.327 +	store 16 $OldRamfsLenOfs 0 $bs clear oldramfs
   2.328 +	INITRD="${INITRD# }"
   2.329 +	INITRDPAD=4
   2.330 +	[ -n "$INITRD" ] &&
   2.331 +	if [ $Version -lt 512 ]; then
   2.332 +		# Compute initramfs location (protocol < 2.00)
   2.333 +		[ $syssz -gt 32768 ] && syssz=$(get 0x1F4 $bs 2)
   2.334 +		[ $syssz -eq 0 ] && syssz=$((0x7F00))
   2.335 +		sysszsect=$((($syssz+31)/32))
   2.336 +		INITRD="${INITRD%%,*}"
   2.337 +		initrdlen=$(stat -c %s "$INITRD")
   2.338 +		store 16 $OldRamfsLenOfs $(($initrdlen/1024)) $bs set oldramfs
   2.339 +		INITRDDISKALIGN=$((0x40000))
   2.340 +		[ $(($initrdlen+$INITRDDISKALIGN)) -gt $(($FORMAT*1024)) -o \
   2.341 +		  $(((512*$sysszsect) + $(stat -c %s $bs))) -gt $INITRDDISKALIGN -o \
   2.342 +		  -n "$ADRSRD" ] && INITRDDISKALIGN=$(($FORMAT*1024))
   2.343 +	else
   2.344 +INITRDRAMALIGN=0x1000
   2.345 +		# Compute initramfs size (protocol >= 2.00)
   2.346 +		initrdlen=0
   2.347 +		INITRDDISKALIGN=0
   2.348 +		for i in ${INITRD//,/ }; do
   2.349 +			[ -s "$i" ] || continue
   2.350 +			while [ -L "$i" ]; do i="$(readlink $i)"; done
   2.351 +			size=$(stat -c %s "$i")
   2.352 +			trace "initrd $i $size "
   2.353 +			initrdlen=$(((($initrdlen + $INITRDPAD - 1) & -$INITRDPAD) + $size))
   2.354 +			ADRSRD2=$(( (($MEM * 0x100000) - $initrdlen) & -$INITRDRAMALIGN ))
   2.355 +			store 32 $RamfsAdrOfs $(( ${ADRSRD:-$ADRSRD2} )) $bs initrd adrs
   2.356 +			store 32 $RamfsLenOfs $initrdlen $bs initrdlen
   2.357 +		done
   2.358 +	fi
   2.359 +
   2.360 +	[ -n "$NOSYSSIZEFIX" ] || store 32 0x1F4 $syssz $bs fix system size
   2.361 +
   2.362 +	# Output boot sector + setup + cmdline + info
   2.363 +	ddq if=$bs
   2.364 +
   2.365 +	# Output kernel code
   2.366 +	[ $INITRDDISKALIGN -ne 0 ] &&
   2.367 +	INITRDDISKALIGN=$(($INITRDDISKALIGN/512-$sysszsect-$extra-$setupsz-1))
   2.368 +	cat $KERNEL /dev/zero | ddq bs=512 skip=$(( $setupsz+1 )) \
   2.369 +		count=$(($sysszsect+$INITRDDISKALIGN)) conv=sync
   2.370 +
   2.371 +	# Output initramfs
   2.372 +	padding=$INITRDPAD
   2.373 +	for i in ${INITRD//,/ }; do
   2.374 +		[ -s "$i" ] || continue
   2.375 +		[ $padding -eq $INITRDPAD ] || ddq if=/dev/zero bs=1 count=$padding
   2.376 +		ddq if=$i
   2.377 +		trace "initrd $i ($(stat -c %s $i) bytes) padding $INITRDPAD"
   2.378 +		padding=$(( $INITRDPAD - ($(stat -c %s $i) % $INITRDPAD) ))
   2.379 +	done
   2.380 +
   2.381 +	# Cleanup
   2.382 +	rm -f $bs
   2.383 +}
   2.384 +
   2.385 +if [ "$FORMAT" == "0" ]; then # unsplitted
   2.386 +	floppyset > $PREFIX
   2.387 +	PAD=$(( 512 - ($(stat -c %s $PREFIX) % 512) ))
   2.388 +	[ $PAD -ne 512 ] && ddq if=/dev/zero bs=1 count=$PAD >> $PREFIX
   2.389 +	exit
   2.390 +fi
   2.391 +floppyset | split -b ${FORMAT}k /dev/stdin floppy$$
   2.392 +i=1
   2.393 +ls floppy$$* 2> /dev/null | while read file ; do
   2.394 +	output=$PREFIX$(printf "%03d" $i)
   2.395 +	cat $file /dev/zero | ddq bs=1k count=$FORMAT conv=sync of=$output
   2.396 +	echo $output
   2.397 +	rm -f $file
   2.398 +	i=$(( $i + 1 ))
   2.399 +done
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/floppy.cgi	Sun Aug 02 20:24:23 2015 +0200
     3.3 @@ -0,0 +1,346 @@
     3.4 +#!/bin/sh
     3.5 +#
     3.6 +# Floppy set CGI interface
     3.7 +#
     3.8 +# Copyright (C) 2015 SliTaz GNU/Linux - BSD License
     3.9 +#
    3.10 +
    3.11 +# Common functions from libtazpanel
    3.12 +. lib/libtazpanel
    3.13 +get_config
    3.14 +
    3.15 +
    3.16 +case "$1" in
    3.17 +	menu)
    3.18 +		TEXTDOMAIN_original=$TEXTDOMAIN
    3.19 +		export TEXTDOMAIN='floppy'
    3.20 +
    3.21 +		#which bootloader > /dev/null &&
    3.22 +		cat <<EOT
    3.23 +<li><a data-icon="slitaz" href="floppy.cgi">$(_ 'Boot floppy')</a></li>
    3.24 +EOT
    3.25 +		export TEXTDOMAIN=$TEXTDOMAIN_original
    3.26 +		exit
    3.27 +esac
    3.28 +
    3.29 +
    3.30 +#
    3.31 +# Commands
    3.32 +#
    3.33 +
    3.34 +error=
    3.35 +case " $(POST) " in
    3.36 +*\ doformat\ *)
    3.37 +	fdformat $(POST fd)
    3.38 +	which mkfs.$(POST fstype) > /dev/null 2>&1 &&
    3.39 +	mkfs.$(POST fstype) $(POST fd)
    3.40 +	;;
    3.41 +*\ write\ *)
    3.42 +	if [ "$(FILE fromimage tmpname)" ]; then
    3.43 +		dd if=$(FILE fromimage tmpname) of=$(POST tofd)
    3.44 +		rm -f $(FILE fromimage tmpname)
    3.45 +	else
    3.46 +		error="$(msg err 'Broken FILE support')"
    3.47 +	fi ;;
    3.48 +*\ read\ *)
    3.49 +	dd if=$(POST fromfd) of=$(POST toimage)
    3.50 +	;;
    3.51 +*\ build\ *)
    3.52 +	cmd=""
    3.53 +	toremove=""
    3.54 +	while read key file ; do
    3.55 +		[ "$(FILE $file size)" ] || continue
    3.56 +		for i in $(seq 1 $(FILE $file count)); do
    3.57 +			cmd="$cmd $key $(FILE $file tmpname $i)"
    3.58 +			toremove="$toremove $(FILE $file tmpname $i)"
    3.59 +		done
    3.60 +	done <<EOT
    3.61 +bootloader	kernel
    3.62 +--initrd	initrd
    3.63 +--initrd	initrd2
    3.64 +--info		info
    3.65 +EOT
    3.66 +	error="$(msg err 'Broken FILE support !')
    3.67 +		<pre>$(httpinfo)</pre>"
    3.68 +	if [ "$cmd" ]; then
    3.69 +		for key in cmdline rdev video format mem ; do
    3.70 +			[ "$(POST $key)" ] || continue
    3.71 +			cmd="$cmd --$key '$(POST $key)'"
    3.72 +		done 
    3.73 +		[ "$(POST edit)" ] || cmd="$cmd --dont-edit-cmdline"
    3.74 +		TITLE="$(_ 'TazPanel - floppy')"
    3.75 +		header
    3.76 +		xhtml_header
    3.77 +		cd $(POST workdir)
    3.78 +		echo "<pre>"
    3.79 +		eval $cmd 2>&1
    3.80 +		echo "</pre>"
    3.81 +		[ "$toremove" ] && rm -f $toremove && rmdir $(dirname $toremove)
    3.82 +		xhtml_footer
    3.83 +		exit 0
    3.84 +	fi
    3.85 +	;;
    3.86 +esac
    3.87 +
    3.88 +listfd()
    3.89 +{
    3.90 +	echo "<select name=\"$1\">"
    3.91 +	ls /dev/fd[0-9]* | sed 's|.*|<option>&</option>|'
    3.92 +	echo "</select>"
    3.93 +}
    3.94 +
    3.95 +TITLE="$(_ 'TazPanel - floppy')"
    3.96 +header
    3.97 +xhtml_header
    3.98 +echo "$error"
    3.99 +
   3.100 +cat <<EOT
   3.101 +<form method="post" enctype="multipart/form-data">
   3.102 +EOT
   3.103 +[ -w /dev/fd0 ] && cat <<EOT
   3.104 +<section>
   3.105 +	<header>
   3.106 +		$(_ 'Floppy disk format')
   3.107 +	</header>
   3.108 +	<button type="submit" name="doformat" data-icon="start" >$(_ 'Format disk'  )</button>
   3.109 +	$(listfd fd) filesystem:
   3.110 +	<select name "fstype">
   3.111 +		<option>$(_ 'none')</option>
   3.112 +		$(ls /sbin/mkfs.* | sed '/dev/d;s|.*/mkfs.\(.*\)|<option>\1</option>|')
   3.113 +	</select>
   3.114 +</section>
   3.115 +
   3.116 +<section>
   3.117 +	<header>
   3.118 +		$(_ 'Floppy disk transfert')
   3.119 +	</header>
   3.120 +<table>
   3.121 +	<tbody>
   3.122 +	<tr>
   3.123 +	<td>
   3.124 +	<button type="submit" name="write" data-icon="start" >$(_ 'Write image'  )</button>
   3.125 +	$(listfd tofd) &lt;&lt;&lt; <input name="fromimage" type="file">
   3.126 +	</td>
   3.127 +	</tr>
   3.128 +	<tr>
   3.129 +	<td>
   3.130 +	<button type="submit" name="read" data-icon="start" >$(_ 'Read image'  )</button>
   3.131 +	$(listfd fromfd) &gt;&gt;&gt; <input name="toimage" type="text" value="/tmp/floppy.img">
   3.132 +	<td>
   3.133 +	</tr>
   3.134 +	</tbody>
   3.135 +</table>
   3.136 +</section>
   3.137 +EOT
   3.138 +cat <<EOT
   3.139 +<section>
   3.140 +	<header>
   3.141 +		$(_ 'Boot floppy set builder')
   3.142 +	</header>
   3.143 +
   3.144 +<table>
   3.145 +	<tbody><tr>
   3.146 +	<td>$(_ 'Linux kernel:')</td>
   3.147 +	<td><input name="kernel" size="37" type="file"> <i>$(_ 'required')</i></td>
   3.148 +	</tr>
   3.149 +	<tr>
   3.150 +	<td>$(_ 'Initramfs / Initrd:')</td>
   3.151 +	<td><input name="initrd[]" size="37" type="file" multiple> <i>$(_ 'optional')</i></td>
   3.152 +	</tr>
   3.153 +	<tr>
   3.154 +	<td>$(_ 'Extra initramfs:')</td>
   3.155 +	<td><input name="initrd2[]" size="37" type="file" multiple> <i>$(_ 'optional')</i></td>
   3.156 +	</tr>
   3.157 +	<tr>
   3.158 +	<td>$(_ 'Boot message:')</td>
   3.159 +	<td><input name="info" size="37" type="file"> <i>$(_ 'optional')</i></td>
   3.160 +	</tr>
   3.161 +	<tr>
   3.162 +	<td>$(_ 'Default cmdline:')</td>
   3.163 +	<td id="cmdline"><input name="cmdline" size="36" type="text"> <input name="edit" checked="checked" type="checkbox">$(_ 'edit')
   3.164 +	<i>$(_ 'optional')</i></td>
   3.165 +	</tr>
   3.166 +	<tr>
   3.167 +	<td>$(_ 'Root device:')</td>
   3.168 +	<td><input name="rdev" size="8" value="/dev/ram0" type="text">
   3.169 +	&nbsp;&nbsp;$(_ 'Flags:') <select name="flags">
   3.170 +		<option selected="selected" value="1">R/O</option>
   3.171 +		<option value="0">R/W</option>
   3.172 +	</select>
   3.173 +	&nbsp;&nbsp;VESA: <select name="video">
   3.174 +		<option value="-3">Ask</option>
   3.175 +<option value="-2">Extended</option>
   3.176 +<option value="-1" selected="selected">Standard</option>
   3.177 +<option value="0">0</option>
   3.178 +<option value="1">1</option>
   3.179 +<option value="2">2</option>
   3.180 +<option value="3">3</option>
   3.181 +<option value="4">4</option>
   3.182 +<option value="5">5</option>
   3.183 +<option value="6">6</option>
   3.184 +<option value="7">7</option>
   3.185 +<option value="8">8</option>
   3.186 +<option value="9">9</option>
   3.187 +<option value="10">10</option>
   3.188 +<option value="11">11</option>
   3.189 +<option value="12">12</option>
   3.190 +<option value="13">13</option>
   3.191 +<option value="14">14</option>
   3.192 +<option value="15">15</option>
   3.193 +<option value="3840">80x25</option>
   3.194 +<option value="3841">80x50</option>
   3.195 +<option value="3842">80x43</option>
   3.196 +<option value="3843">80x28</option>
   3.197 +<option value="3845">80x30</option>
   3.198 +<option value="3846">80x34</option>
   3.199 +<option value="3847">80x60</option>
   3.200 +<option value="778">132x43</option>
   3.201 +<option value="777">132x25</option>
   3.202 +<option value="824">320x200x8</option>
   3.203 +<option value="781">320x200x15</option>
   3.204 +<option value="782">320x200x16</option>
   3.205 +<option value="783">320x200x24</option>
   3.206 +<option value="800">320x200x32</option>
   3.207 +<option value="818">896x672x24</option>
   3.208 +<option value="915">320x240x15</option>
   3.209 +<option value="821">320x240x16</option>
   3.210 +<option value="917">320x240x24</option>
   3.211 +<option value="918">320x240x32</option>
   3.212 +<option value="819">896x672x32</option>
   3.213 +<option value="931">400x300x15</option>
   3.214 +<option value="822">400x300x16</option>
   3.215 +<option value="933">400x300x24</option>
   3.216 +<option value="934">400x300x32</option>
   3.217 +<option value="820">512x384x8</option>
   3.218 +<option value="947">512x384x15</option>
   3.219 +<option value="823">512x384x16</option>
   3.220 +<option value="949">512x384x24</option>
   3.221 +<option value="950">512x384x32</option>
   3.222 +<option value="962">640x350x8</option>
   3.223 +<option value="963">640x350x15</option>
   3.224 +<option value="964">640x350x16</option>
   3.225 +<option value="965">640x350x24</option>
   3.226 +<option value="966">640x350x32</option>
   3.227 +<option value="768">640x400x8</option>
   3.228 +<option value="899">640x400x15</option>
   3.229 +<option value="825">640x400x16</option>
   3.230 +<option value="901">640x400x24</option>
   3.231 +<option value="902">640x400x32</option>
   3.232 +<option value="769">640x480x8</option>
   3.233 +<option value="784">640x480x15</option>
   3.234 +<option value="785">640x480x16</option>
   3.235 +<option value="786">640x480x24</option>
   3.236 +<option value="826">640x480x32</option>
   3.237 +<option value="879">800x500x8</option>
   3.238 +<option value="880">800x500x15</option>
   3.239 +<option value="881">800x500x16</option>
   3.240 +<option value="882">800x500x24</option>
   3.241 +<option value="883">800x500x32</option>
   3.242 +<option value="771">800x600x8</option>
   3.243 +<option value="787">800x600x15</option>
   3.244 +<option value="788">800x600x16</option>
   3.245 +<option value="789">800x600x24</option>
   3.246 +<option value="827">800x600x32</option>
   3.247 +<option value="815">896x672x8</option>
   3.248 +<option value="816">1600x1200x8</option>
   3.249 +<option value="817">1600x1200x16</option>
   3.250 +<option value="874">1024x640x8</option>
   3.251 +<option value="875">1024x640x15</option>
   3.252 +<option value="876">1024x640x16</option>
   3.253 +<option value="877">1024x640x24</option>
   3.254 +<option value="878">1024x640x32</option>
   3.255 +<option value="773">1024x768x8</option>
   3.256 +<option value="790">1024x768x15</option>
   3.257 +<option value="791">1024x768x16</option>
   3.258 +<option value="792">1024x768x24</option>
   3.259 +<option value="828">1024x768x32</option>
   3.260 +<option value="869">1152x720x8</option>
   3.261 +<option value="870">1152x720x15</option>
   3.262 +<option value="871">1152x720x16</option>
   3.263 +<option value="872">1152x720x24</option>
   3.264 +<option value="873">1152x720x32</option>
   3.265 +<option value="775">1280x1024x8</option>
   3.266 +<option value="793">1280x1024x15</option>
   3.267 +<option value="794">1280x1024x16</option>
   3.268 +<option value="795">1280x1024x24</option>
   3.269 +<option value="829">1280x1024x32</option>
   3.270 +<option value="835">1400x1050x8</option>
   3.271 +<option value="837">1400x1050x16</option>
   3.272 +<option value="838">1400x1040x24</option>
   3.273 +<option value="864">1440x900x15</option>
   3.274 +<option value="866">1440x900x16</option>
   3.275 +<option value="867">1440x900x24</option>
   3.276 +<option value="868">1440x900x32</option>
   3.277 +<option value="893">1920x1200x8</option>
   3.278 +	</select>
   3.279 +	</td>
   3.280 +	</tr>
   3.281 +	<tr>
   3.282 +	<td>$(_ 'Output directory:')</td>
   3.283 +	<td id="workdir"><input name="workdir" size="36" type="text" value="/tmp"></td>
   3.284 +	</tr>
   3.285 +	<tr>
   3.286 +	<td>$(_ 'Floppy size:')</td>
   3.287 +	<td><select name="format">
   3.288 +		<optgroup label="5&frac14; SD">
   3.289 +		<option value="360">360 KB</option>
   3.290 +		</optgroup>
   3.291 +		<optgroup label="3&frac12; SD">
   3.292 +		<option value="720">720 KB</option>
   3.293 +		</optgroup>
   3.294 +		<optgroup label="5&frac14; HD">
   3.295 +		<option value="1200">1.20 MB</option>
   3.296 +		</optgroup>
   3.297 +		<optgroup label="3&frac12; HD">
   3.298 +		<option value="1440" selected="selected">1.44 MB</option>
   3.299 +		<option value="1600">1.60 MB</option>
   3.300 +		<option value="1680">1.68 MB</option>
   3.301 +		<option value="1722">1.72 MB</option>
   3.302 +		<option value="1743">1.74 MB</option>
   3.303 +		<option value="1760">1.76 MB</option>
   3.304 +		<option value="1840">1.84 MB</option>
   3.305 +		<option value="1920">1.92 MB</option>
   3.306 +		<option value="1968">1.96 MB</option>
   3.307 +		</optgroup>
   3.308 +		<optgroup label="3&frac12; ED">
   3.309 +		<option value="2880">2.88 MB</option>
   3.310 +		<option value="3360">3.36 MB</option>
   3.311 +		<option value="3444">3.44 MB</option>
   3.312 +		<option value="3840">3.84 MB</option>
   3.313 +		<option value="3936">3.92 MB</option>
   3.314 +		</optgroup>
   3.315 +		<option value="0">$(_ 'no limit')</option>
   3.316 +	</select>&nbsp;
   3.317 +	$(_ 'RAM used')&nbsp;<select name="mem">
   3.318 +		<option selected="selected" value="16">16 MB</option>
   3.319 +		<option value="15">15 MB</option>
   3.320 +		<option value="14">14 MB</option>
   3.321 +		<option value="13">13 MB</option>
   3.322 +		<option value="12">12 MB</option>
   3.323 +		<option value="11">11 MB</option>
   3.324 +		<option value="10">10 MB</option>
   3.325 +		<option value="9">9 MB</option>
   3.326 +		<option value="8">8 MB</option>
   3.327 +		<option value="7">7 MB</option>
   3.328 +		<option value="6">6 MB</option>
   3.329 +		<option value="5">5 MB</option>
   3.330 +		<option value="4">4 MB</option>
   3.331 +	</select>&nbsp;
   3.332 +	<button type="submit" name="build" data-icon="start" >$(_ 'Build floppy set'  )</button>
   3.333 +	</td>
   3.334 +	</tr>
   3.335 +</tbody></table>
   3.336 +<footer>
   3.337 +<p>
   3.338 +$(_ 'Note') 1: $(_ 'the extra initramfs may be useful to add your own configuration files.')
   3.339 +</p>
   3.340 +<p>
   3.341 +$(_ 'Note') 2: $(_ 'the keyboard is read for ESC or ENTER on every form feed (ASCII 12) in the boot message.')
   3.342 +</p>
   3.343 +</footer>
   3.344 +</section>
   3.345 +</form>
   3.346 +EOT
   3.347 +
   3.348 +xhtml_footer
   3.349 +exit 0
     4.1 --- a/powersaving.cgi	Sun Aug 02 19:43:30 2015 +0200
     4.2 +++ b/powersaving.cgi	Sun Aug 02 20:24:23 2015 +0200
     4.3 @@ -8,6 +8,15 @@
     4.4  # Common functions from libtazpanel
     4.5  . lib/libtazpanel
     4.6  get_config
     4.7 +
     4.8 +case "$1" in
     4.9 +	menu)
    4.10 +		cat <<EOT
    4.11 +<li><a data-icon="display" href="powersaving.cgi" data-root>$(_ 'Power saving')</a></li>
    4.12 +EOT
    4.13 +		exit
    4.14 +esac
    4.15 +
    4.16  header
    4.17  
    4.18  TITLE=$(_ 'Hardware')