diff --git a/.gitignore b/.gitignore index 82b89fe..cdcbbdc 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ debian *.img *.ova *.iso +ova diff --git a/Makefile b/Makefile index ab64515..b36c9aa 100644 --- a/Makefile +++ b/Makefile @@ -1,44 +1,39 @@ -all: c.vmdk d.vmdk +# 100G +C_CAPACITY = 107374182400 +# 10G +D_CAPACITY = 10737418240 + +all: Windows.ova example.iso d.vmdk: - dd if=/dev/zero of=d.img bs=512M count=10 conv=sparse + dd if=/dev/zero of=d.img bs=$$(( ${D_CAPACITY} / 10 )) count=10 conv=sparse echo ',,7,*;' | /sbin/sfdisk d.img - qemu-img convert d.img -O vmdk d.vmdk + #qemu-img resize -f raw d.img "${D_CAPACITY}" + qemu-img convert -f raw d.img -O vmdk -o subformat=streamOptimized d.vmdk rm d.img + #qemu-img create -f vmdk -o subformat=streamOptimized d.vmdk "${D_CAPACITY}" -c/initramfs.gz: debian.cfg debian-root/init - sudo rm -rf debian - sudo multistrap -f debian.cfg - sudo mv debian/boot/vmlinu* c/kernel.gz - git describe --always --tags --dirty | sudo tee debian/etc/version - sudo rsync --progress -a --no-owner --no-group debian-root/ debian/ - ( \ - cd debian; \ - sudo find . -print0 \ - | pv -0 -s $$(sudo find . | wc -l) \ - | sudo cpio --null -o --format=newc \ +c/initramfs.gz: debian.cfg debian-root/init debian-root/installer + rm -rf debian + fakeroot /usr/sbin/multistrap -f debian.cfg + mv debian/boot/vmlinu* c/kernel.gz + git describe --always --tags --dirty > debian/etc/version + rsync --progress -a --no-owner --no-group debian-root/ debian/ + cp bootlace.com debian/usr/bin/ + echo "== Compressing initramfs" + cd debian; \ + find . -print0 \ + | cpio --null --owner=0:0 -o --format=newc \ | gzip -9 \ - > ../c/initramfs.gz \ - ) - - #&& sudo mkfs.vfat -F 32 /dev/mapper/loop0p1 \ + > ../c/initramfs.gz c.vmdk: c/initramfs.gz - dd if=/dev/zero of=c.img bs=100M count=1000 conv=sparse status=progress - echo ',,c,*;' | /sbin/sfdisk c.img - loop=$$(/sbin/losetup -f) \ - && mapper=$$(/sbin/losetup -f|sed 's#dev/#dev/mapper/#')p1 \ - && sudo losetup $$loop c.img \ - && sudo kpartx -a "$$loop" \ - && sleep 1 \ - && sudo mkfs.ext4 $$mapper \ - && sudo ./bootlace.com "$$loop" \ - && sudo mount $$mapper disk \ - && sudo rsync -Pa --no-owner --no-group c/ disk/ \ - && sudo umount disk \ - && sudo kpartx -d $$loop \ - && sudo losetup -d $$loop - qemu-img convert c.img -O vmdk c.vmdk + -rm c.img + /sbin/mkfs.vfat -C c.img -F 32 "$$(du -s c | awk '{print $$1 + 10000}')" + MTOOLS_SKIP_CHECK=1 mcopy -si c.img c/* :: + ./bootlace.com --floppy c.img + qemu-img resize c.img ${C_CAPACITY} + qemu-img convert c.img -O vmdk -o subformat=streamOptimized c.vmdk rm c.img @@ -52,22 +47,30 @@ clean: -rm d.vmdk -rm c/initramfs.gz -rm example.iso - -sudo rm -rf debian + -rm -rf debian + -rm Windows.ova -.PHONY: vbox -vbox: - winuid=$$(VBoxManage list vms | awk '$$1 == "\"Windows\"" {print $$2}' | sed 's/[{}]//g') \ - && VBoxManage storageattach "$$winuid" --storagectl SATA --port 0 --device 0 --medium none \ - ; VBoxManage storageattach "$$winuid" --storagectl SATA --port 1 --device 0 --medium none \ - ; VBoxManage list hdds | awk '/^UUID:/ {u=$$2} /windows-ova/ {print u}' \ - | xargs -I{} VBoxManage closemedium disk {} \ - && VBoxManage storageattach $$winuid --storagectl SATA --port 0 --device 0 --type hdd --medium c.vmdk \ - ; VBoxManage storageattach $$winuid --storagectl SATA --port 1 --device 0 --type hdd --medium d.vmdk \ - ; rm Windows.ova \ - ; VBoxManage export $$winuid -o Windows.ova \ - --ovf10 --manifest --vsys 0 \ - --vendorurl https://github.com/brimstone/windows-ova \ - --vendor brimstone +Windows.ova: c.vmdk d.vmdk Windows.ovf + cp c.vmdk ova/Windows-c.vmdk + cp d.vmdk ova/Windows-d.vmdk + cp Windows.ovf ova/ + sed -e "s/@@C_FILE_SIZE@@/$$(stat -c %s c.vmdk)/" \ + -e "s/@@D_FILE_SIZE@@/$$(stat -c %s d.vmdk)/" \ + -e "s/@@C_CAPACITY@@/${C_CAPACITY}/" \ + -e "s/@@D_CAPACITY@@/${D_CAPACITY}/" \ + -i ova/Windows.ovf + cd ova; for f in Windows.ovf Windows-c.vmdk Windows-d.vmdk; do \ + echo "SHA1 ($$f)= $$(sha1sum < $$f | awk '{print $$1}')"; \ + done > Windows.mf + tar -cf Windows.ova -C ova \ + Windows.ovf \ + Windows-c.vmdk \ + Windows-d.vmdk \ + Windows.mf example.iso: genisoimage -o $@ -J -R -V example iso/ + +.PHONY: import +import: Windows.ova + VBoxManage import Windows.ova diff --git a/Windows.ovf b/Windows.ovf new file mode 100644 index 0000000..d3f1acd --- /dev/null +++ b/Windows.ovf @@ -0,0 +1,189 @@ + + + + + + + + List of the virtual disks used in the package + + + + + Logical networks used in the package + + Logical network used by this appliance. + + + + A virtual machine + + Meta-information about the installed software + Windows + https://github.com/brimstone/windows-ova + + + A human-readable annotation + Self-Installing Windows VM + + + The kind of installed guest operating system + Other_64 + WindowsNT_64 + + + Virtual hardware requirements for a virtual machine + + Virtual Hardware Family + 0 + Windows + virtualbox-2.2 + + + 1 virtual CPU + Number of virtual CPUs + 1 virtual CPU + 1 + 3 + 1 + + + MegaBytes + 1024 MB of memory + Memory Size + 1024 MB of memory + 2 + 4 + 1024 + + + 0 + ideController0 + IDE Controller + ideController0 + 3 + PIIX4 + 5 + + + 0 + sataController0 + SATA Controller + sataController0 + 4 + AHCI + 20 + + + 0 + usb + USB Controller + usb + 5 + 23 + + + 0 + disk1 + Disk Image + disk1 + ovf:/disk/vmdisk1 + 6 + 4 + 17 + + + 1 + disk2 + Disk Image + disk2 + ovf:/disk/vmdisk2 + 7 + 4 + 17 + + + 0 + true + cdrom0 + CD-ROM Drive + cdrom0 + ovf:/file/file3 + + 8 + 3 + 15 + + + true + Ethernet adapter on 'NAT' + NAT + Ethernet adapter on 'NAT' + 9 + + VmxNet3 + 10 + + + + Complete VirtualBox machine configuration in VirtualBox format + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/debian-root/au/win10-32.xml b/debian-root/au/win10-32.xml index 4451ffc..9f88ba9 100644 --- a/debian-root/au/win10-32.xml +++ b/debian-root/au/win10-32.xml @@ -123,7 +123,7 @@ true - cmd.exe /c E:\install.cmd + cmd.exe /c D:\install.cmd Run install scripts on drive E 2 true diff --git a/debian-root/au/win10-64.xml b/debian-root/au/win10-64.xml index 841ddea..e16dccd 100644 --- a/debian-root/au/win10-64.xml +++ b/debian-root/au/win10-64.xml @@ -107,7 +107,7 @@ true - cmd.exe /c E:\install.cmd + cmd.exe /c D:\install.cmd Run install scripts on drive E 2 true diff --git a/debian-root/au/win2k12r2.xml b/debian-root/au/win2k12r2.xml index b3413f1..1858119 100644 --- a/debian-root/au/win2k12r2.xml +++ b/debian-root/au/win2k12r2.xml @@ -86,7 +86,7 @@ - cmd.exe /c E:\install.cmd + cmd.exe /c D:\install.cmd Run install scripts on drive E 1 true diff --git a/debian-root/au/win2k16.xml b/debian-root/au/win2k16.xml index 487a740..2b56cb0 100644 --- a/debian-root/au/win2k16.xml +++ b/debian-root/au/win2k16.xml @@ -86,7 +86,7 @@ - cmd.exe /c E:\install.cmd + cmd.exe /c D:\install.cmd Run install scripts on drive E 1 true diff --git a/debian-root/au/win2k8r2.xml b/debian-root/au/win2k8r2.xml index 0329d51..f0fd936 100644 --- a/debian-root/au/win2k8r2.xml +++ b/debian-root/au/win2k8r2.xml @@ -82,7 +82,7 @@ - cmd.exe /c E:\install.cmd + cmd.exe /c D:\install.cmd Run install scripts on drive E 1 true diff --git a/debian-root/au/win7-32.xml b/debian-root/au/win7-32.xml index 17864a9..0ede61d 100644 --- a/debian-root/au/win7-32.xml +++ b/debian-root/au/win7-32.xml @@ -85,7 +85,7 @@ - cmd.exe /c E:\install.cmd + cmd.exe /c D:\install.cmd Run install scripts on drive E 1 true diff --git a/debian-root/au/win7-64.xml b/debian-root/au/win7-64.xml index c92d645..6ebd368 100644 --- a/debian-root/au/win7-64.xml +++ b/debian-root/au/win7-64.xml @@ -85,7 +85,7 @@ - cmd.exe /c E:\install.cmd + cmd.exe /c D:\install.cmd Run install scripts on drive E 1 true diff --git a/debian-root/au/win8-32.xml b/debian-root/au/win8-32.xml index 6e143e9..b60573b 100644 --- a/debian-root/au/win8-32.xml +++ b/debian-root/au/win8-32.xml @@ -128,7 +128,7 @@ - cmd.exe /c E:\install.cmd + cmd.exe /c D:\install.cmd Run install scripts on drive E 1 true diff --git a/debian-root/au/win8-64.xml b/debian-root/au/win8-64.xml index 06e1ca7..6411c07 100644 --- a/debian-root/au/win8-64.xml +++ b/debian-root/au/win8-64.xml @@ -128,7 +128,7 @@ - cmd.exe /c E:\install.cmd + cmd.exe /c D:\install.cmd Run install scripts on drive E 1 true diff --git a/debian-root/au/win81-32.xml b/debian-root/au/win81-32.xml index 7b308eb..9f7573e 100644 --- a/debian-root/au/win81-32.xml +++ b/debian-root/au/win81-32.xml @@ -109,7 +109,7 @@ - cmd.exe /c E:\install.cmd + cmd.exe /c D:\install.cmd Run install scripts on drive E 1 true diff --git a/debian-root/au/win81-64.xml b/debian-root/au/win81-64.xml index f09850b..3aeb5d3 100644 --- a/debian-root/au/win81-64.xml +++ b/debian-root/au/win81-64.xml @@ -93,7 +93,7 @@ - cmd.exe /c E:\install.cmd + cmd.exe /c D:\install.cmd Run install scripts on drive E 1 true diff --git a/debian-root/installer b/debian-root/installer index 4e9c495..f387bc1 100755 --- a/debian-root/installer +++ b/debian-root/installer @@ -14,13 +14,32 @@ dialog(){ version="" localmirror="" +# Since we've been booted with a valid cdrom we should copy it to d, then +# shutdown if mount /dev/sr0 /iso; then - if [ -e /iso/variables.txt ]; then - . /iso/variables.txt - # strip linefeed incase the file is in dos format - version="${version%%$'\r'}" - localmirror="${localmirror%%$'\r'}" - fi + echo ',,7,*;' | sfdisk /dev/sdb + mkfs.ntfs -f -L data /dev/sdb1 + mount /dev/sdb1 /d + rsync -Pa /iso/ /d/ + umount /d + umount /iso + echo "We're done! The iso can be removed and this OVA can be exported." + echo "Press any key to continue" + read _ + poweroff -f +fi + +if ! mount /dev/sdb1 /d; then + echo ',,7,*;' | sfdisk /dev/sdb + mkfs.ntfs -f -L data /dev/sdb1 + mount /dev/sdb1 /d +fi + +if [ -e /d/variables.txt ]; then + . /d/variables.txt + # strip linefeed incase the file is in dos format + version="${version%%$'\r'}" + localmirror="${localmirror%%$'\r'}" fi cmd="$(echo dialog --title '"Windows Version Selection"' --no-tags --radiolist '"Select a Windows version to install"' 20 60 13 $(awk -F, '{print $1,"\"" $2 "\"","off"}' /etc/versions) | sed 's/off/on/')" @@ -29,8 +48,8 @@ if [ -z "$version" ]; then fi # Allow just overriding of the Autounattend.xml file, based on version -if [ -e "/iso/${version}/Autounattend.xml" ]; then - au="/iso/${version}/Autounattend.xml" +if [ -e "/d/${version}/Autounattend.xml" ]; then + au="/d/${version}/Autounattend.xml" else au="/au/${version}.xml" fi @@ -57,9 +76,18 @@ if [ -n "$localmirror" ]; then URL="$localmirror/$(basename "$URL")" fi -mount /dev/sda1 /c -mkfs.ntfs -f -L data /dev/sdb1 -mount /dev/sdb1 /d +if ! [ -e /dev/sda1 ]; then + mount /dev/sda /c + rsync -a /c/ /newc + umount /c + echo ',,83,*;' | sfdisk /dev/sda + mkfs.ext4 /dev/sda1 + bootlace.com /dev/sda + mount /dev/sda1 /c + rsync -a /newc/ /c + rm -rf /newc +fi + cd /c aria2c -x 8 -s 8 --file-allocation=prealloc "$URL" -o "/${version}.iso"