95 lines
2.1 KiB
Ruby
95 lines
2.1 KiB
Ruby
|
#! /usr/bin/env ruby
|
||
|
require "tempfile"
|
||
|
usbdisks=`for devlink in /dev/disk/by-id/usb*; do readlink -f ${devlink}; done`
|
||
|
raws=usbdisks.split("\n")
|
||
|
parts=[]
|
||
|
for disk in raws
|
||
|
if /(\w+)\d+/.match disk
|
||
|
parts.push disk
|
||
|
end
|
||
|
end
|
||
|
for disk in raws
|
||
|
if /(\w+)\d+/.match disk
|
||
|
raws.delete("/dev/#{$1}")
|
||
|
end
|
||
|
end
|
||
|
if raws.length==0
|
||
|
puts "No disks detected. Aborting."
|
||
|
exit 1
|
||
|
end
|
||
|
if parts.length>1
|
||
|
puts "Multiple partitions detected."
|
||
|
i=0
|
||
|
for part in parts
|
||
|
puts "#{i}: #{part}"
|
||
|
i+=1
|
||
|
end
|
||
|
print "Please choose partition to install to:"
|
||
|
num=gets.chomp.to_i
|
||
|
part=parts[num]
|
||
|
/(\w+)\d+/.match part
|
||
|
raw="/dev/#{$1}"
|
||
|
elsif parts.length==0
|
||
|
puts "No partitions detected."
|
||
|
i=0
|
||
|
for raw in raws
|
||
|
puts "#{i}: #{raw}"
|
||
|
i+=1
|
||
|
end
|
||
|
print "Please choose disk to install to:"
|
||
|
num=gets.chomp.to_i
|
||
|
raw=raws[num]
|
||
|
print "Getting disk size..."
|
||
|
origsize=`sudo blockdev --getsize64 #{raw}`.chomp.to_i
|
||
|
unit="MB"
|
||
|
fullsize=(origsize/1024.to_f)/1024
|
||
|
if fullsize%1024==0 or fullsize>2048
|
||
|
fullsize=fullsize/1024.to_f
|
||
|
unit="GB"
|
||
|
end
|
||
|
fullsize=fullsize.floor(1)
|
||
|
puts "#{fullsize}#{unit}"
|
||
|
print "Partition size: (return for whole disk)"
|
||
|
size=gets.chomp.downcase
|
||
|
if size.match /(\d)+m/ or size.match /(\d+)mb/
|
||
|
size=(size.to_i)*1024*1024
|
||
|
elsif size.match /(\d)+g/ or size.match /(\d+)gb/
|
||
|
size=(size.to_i)*1024*1024*1024
|
||
|
elsif size==""
|
||
|
size=origsize
|
||
|
else
|
||
|
puts "Could not parse size. Aborting."
|
||
|
exit 1
|
||
|
end
|
||
|
sfdisk_input="label: dos\n- #{size/1024}KiB L"
|
||
|
tmp=Tempfile.new("myosinstall")
|
||
|
tmp.puts sfdisk_input
|
||
|
tmp.close
|
||
|
print "Partitioning..."
|
||
|
`cat #{tmp.path} | sudo sfdisk #{raw} 2>/dev/null`
|
||
|
puts "Done"
|
||
|
tmp.unlink
|
||
|
exit 1
|
||
|
puts `sudo mkfs.ext2 #{raw}`
|
||
|
part="#{raw}1"
|
||
|
raw="#{raw}"
|
||
|
else
|
||
|
part=parts[0]
|
||
|
/(\w+)\d+/.match parts[0]
|
||
|
raw="/dev/#{$1}"
|
||
|
end
|
||
|
`mkdir -p usb`
|
||
|
print "Mounting the disk..."
|
||
|
`sudo mount #{part} usb`
|
||
|
puts "Done"
|
||
|
if !File.exists?("usb/boot")
|
||
|
puts "Installing GRUB..."
|
||
|
`sudo grub-install --boot-directory=usb/boot #{raw}`
|
||
|
end
|
||
|
print "Installing the OS..."
|
||
|
`sudo cp -r /vagrant/sysroot/* usb`
|
||
|
puts "Done"
|
||
|
print "Umounting disk..."
|
||
|
`sudo umount usb`
|
||
|
puts "Done"
|