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"