parent
757d3962fa
commit
83f76ff26e
@ -0,0 +1,7 @@
|
||||
label hdt
|
||||
menu label ^Hardware Detection Tool (HDT)
|
||||
com32 hdt.c32
|
||||
|
||||
label memtest
|
||||
menu label ^Memory Diagnostic Tool (memtest86+)
|
||||
linux /live/memtest
|
@ -0,0 +1 @@
|
||||
/usr/lib/syslinux/modules/bios/hdt.c32
|
@ -0,0 +1 @@
|
||||
/usr/lib/ISOLINUX/isolinux.bin
|
@ -0,0 +1,4 @@
|
||||
include menu.cfg
|
||||
default vesamenu.c32
|
||||
prompt 0
|
||||
timeout 0
|
@ -0,0 +1 @@
|
||||
/usr/lib/syslinux/modules/bios/ldlinux.c32
|
@ -0,0 +1 @@
|
||||
/usr/lib/syslinux/modules/bios/libcom32.c32
|
@ -0,0 +1 @@
|
||||
/usr/lib/syslinux/modules/bios/libutil.c32
|
@ -0,0 +1,12 @@
|
||||
label live-@FLAVOUR@
|
||||
menu label ^Install PureOS OEM and erase disk
|
||||
menu default
|
||||
linux @LINUX@
|
||||
initrd @INITRD@
|
||||
append @APPEND_LIVE@
|
||||
|
||||
label live-@FLAVOUR@-failsafe
|
||||
menu label Install PureOS OEM and erase disk (^failsafe)
|
||||
linux @LINUX@
|
||||
initrd @INITRD@
|
||||
append @APPEND_LIVE_FAILSAFE@
|
@ -0,0 +1,15 @@
|
||||
menu background splash.png
|
||||
menu color title * #FFFFFFFF *
|
||||
menu color border * #00000000 #00000000 none
|
||||
menu color sel * #ffffffff #76a1d0ff *
|
||||
menu color hotsel 1;7;37;40 #ffffffff #76a1d0ff *
|
||||
menu color tabmsg * #ffffffff #00000000 *
|
||||
menu color help 37;40 #ffdddd00 #00000000 none
|
||||
menu vshift 12
|
||||
menu rows 10
|
||||
menu helpmsgrow 15
|
||||
# The command line must be at least one line from the bottom.
|
||||
menu cmdlinerow 16
|
||||
menu timeoutrow 16
|
||||
menu tabmsgrow 18
|
||||
menu tabmsg Press ENTER to boot or TAB to edit a menu entry
|
@ -0,0 +1 @@
|
||||
/usr/lib/syslinux/modules/bios/vesamenu.c32
|
@ -0,0 +1,75 @@
|
||||
# ~/.bashrc: executed by bash(1) for non-login shells.
|
||||
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
|
||||
# for examples
|
||||
|
||||
# If not running interactively, don't do anything
|
||||
[ -z "$PS1" ] && return
|
||||
|
||||
# don't put duplicate lines in the history. See bash(1) for more options
|
||||
# don't overwrite GNU Midnight Commander's setting of `ignorespace'.
|
||||
export HISTCONTROL=$HISTCONTROL${HISTCONTROL+,}ignoredups
|
||||
# ... or force ignoredups and ignorespace
|
||||
export HISTCONTROL=ignoreboth
|
||||
|
||||
# append to the history file, don't overwrite it
|
||||
shopt -s histappend
|
||||
|
||||
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
|
||||
HISTSIZE=1400
|
||||
|
||||
# check the window size after each command and, if necessary,
|
||||
# update the values of LINES and COLUMNS.
|
||||
shopt -s checkwinsize
|
||||
|
||||
# make less more friendly for non-text input files, see lesspipe(1)
|
||||
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
|
||||
|
||||
# set variable identifying the chroot you work in (used in the prompt below)
|
||||
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
|
||||
debian_chroot=$(cat /etc/debian_chroot)
|
||||
fi
|
||||
|
||||
# set a fancy prompt (non-color, unless we know we "want" color)
|
||||
case "$TERM" in
|
||||
xterm-color) color_prompt=yes;;
|
||||
esac
|
||||
|
||||
# uncomment for a colored prompt, if the terminal has the capability; turned
|
||||
# off by default to not distract the user: the focus in a terminal window
|
||||
# should be on the output of commands, not on the prompt
|
||||
#force_color_prompt=yes
|
||||
|
||||
if [ -n "$force_color_prompt" ]; then
|
||||
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
|
||||
# We have color support; assume it's compliant with Ecma-48
|
||||
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
|
||||
# a case would tend to support setf rather than setaf.)
|
||||
color_prompt=yes
|
||||
else
|
||||
color_prompt=
|
||||
fi
|
||||
fi
|
||||
|
||||
# Alias definitions.
|
||||
# You may want to put all your additions into a separate file like
|
||||
# ~/.bash_aliases, instead of adding them here directly.
|
||||
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
|
||||
|
||||
#if [ -f ~/.bash_aliases ]; then
|
||||
# . ~/.bash_aliases
|
||||
#fi
|
||||
|
||||
# enable color support of ls and also add handy aliases
|
||||
if [ -x /usr/bin/dircolors ]; then
|
||||
eval "`dircolors -b`"
|
||||
alias ls='ls --color=auto'
|
||||
#alias dir='dir --color=auto'
|
||||
#alias vdir='vdir --color=auto'
|
||||
|
||||
#alias grep='grep --color=auto'
|
||||
#alias fgrep='fgrep --color=auto'
|
||||
#alias egrep='egrep --color=auto'
|
||||
fi
|
||||
|
||||
# run PureOS OEM setup
|
||||
sudo /var/lib/pureos-oem/install-pureos-oem.py
|
@ -0,0 +1,22 @@
|
||||
# ~/.profile: executed by the command interpreter for login shells.
|
||||
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
|
||||
# exists.
|
||||
# see /usr/share/doc/bash/examples/startup-files for examples.
|
||||
# the files are located in the bash-doc package.
|
||||
|
||||
# the default umask is set in /etc/profile; for setting the umask
|
||||
# for ssh logins, install and configure the libpam-umask package.
|
||||
#umask 022
|
||||
|
||||
# if running bash
|
||||
if [ -n "$BASH_VERSION" ]; then
|
||||
# include .bashrc if it exists
|
||||
if [ -f "$HOME/.bashrc" ]; then
|
||||
. "$HOME/.bashrc"
|
||||
fi
|
||||
fi
|
||||
|
||||
# set PATH so it includes user's private bin if it exists
|
||||
if [ -d "$HOME/.local/bin" ] ; then
|
||||
PATH="$HOME/.local/bin:$PATH"
|
||||
fi
|
@ -0,0 +1,92 @@
|
||||
## Options to set on the command line
|
||||
|
||||
#d-i debian-installer/locale string en_US
|
||||
#d-i debian-installer/language boolean true
|
||||
#d-i debian-installer/country boolean true
|
||||
#d-i console-setup/ask_detect boolean false
|
||||
d-i netcfg/enable boolean false
|
||||
d-i clock-setup/utc-auto boolean true
|
||||
d-i clock-setup/utc boolean true
|
||||
#d-i time/zone string UTC
|
||||
d-i clock-setup/ntp boolean true
|
||||
|
||||
d-i apt-setup/cdrom/set-first boolean true
|
||||
d-i apt-setup/cdrom/set-double boolean false
|
||||
d-i apt-setup/cdrom/set-next boolean false
|
||||
d-i apt-setup/cdrom/set-failed boolean false
|
||||
d-i apt-setup/use_mirror boolean false
|
||||
|
||||
d-i mirror/country string manual
|
||||
|
||||
d-i netcfg/get_hostname string librem
|
||||
d-i netcfg/get_hostname seen false
|
||||
d-i mirror/http/hostname string repo.puri.sm
|
||||
d-i mirror/http/directory string /pureos
|
||||
d-i mirror/http/proxy string
|
||||
d-i pkgsel/install-language-support boolean false
|
||||
d-i pkgsel/update-policy select none
|
||||
|
||||
d-i partman/default_filesystem string ext4
|
||||
d-i partman-auto/disk string /dev/sda
|
||||
d-i partman-lvm/device_remove_lvm boolean true
|
||||
d-i partman-md/device_remove_md boolean true
|
||||
d-i partman-lvm/confirm boolean true
|
||||
d-i partman-auto-lvm/guided_size string max
|
||||
d-i partman-auto/method string crypto
|
||||
d-i partman-auto/choose_recipe select root-pureos
|
||||
d-i partman-auto-lvm/new_vg_name string encrypted
|
||||
d-i partman/early_command \
|
||||
string sed -i.bak 's/-f $id\/skip_erase/-d $id/g' /lib/partman/lib/crypto-base.sh
|
||||
d-i partman-auto/expert_recipe string \
|
||||
root-pureos :: \
|
||||
1000 2000 2100 ext4 \
|
||||
$primary{ } \
|
||||
method{ keep } \
|
||||
use_filesystem{ } filesystem{ ext4 } \
|
||||
label{ rescue } \
|
||||
. \
|
||||
800 800 800 ext4 \
|
||||
$primary{ } $bootable{ } \
|
||||
method{ format } format{ } \
|
||||
use_filesystem{ } filesystem{ ext4 } \
|
||||
mountpoint{ /boot } \
|
||||
. \
|
||||
2000 2000 2000 linux-swap \
|
||||
$lvmok{ } lv_name{ swap } \
|
||||
method{ swap } format{ } \
|
||||
in_vg { encrypted } \
|
||||
. \
|
||||
1000 1000 1000000000 ext4 \
|
||||
$lvmok{ } lv_name{ root } \
|
||||
method{ format } format{ } \
|
||||
use_filesystem{ } filesystem{ ext4 } \
|
||||
mountpoint{ / } \
|
||||
in_vg { encrypted } \
|
||||
.
|
||||
|
||||
d-i partman-basicfilesystems/no_mount_point boolean false
|
||||
d-i partman-partitioning/confirm_write_new_label boolean true
|
||||
d-i partman/choose_partition select finish
|
||||
d-i partman/confirm boolean true
|
||||
d-i partman/confirm_nooverwrite boolean true
|
||||
|
||||
user-setup-udeb passwd/root-login boolean false
|
||||
user-setup-udeb user-setup/encrypt-home boolean true
|
||||
|
||||
d-i popularity-contest/participate boolean false
|
||||
d-i hw-detect/load_firmware boolean false
|
||||
|
||||
|
||||
|
||||
d-i grub-installer/only_debian boolean true
|
||||
d-i grub-installer/with_other_os boolean true
|
||||
d-i grub-installer/choose_bootdev string /dev/sda
|
||||
d-i finish-install/reboot_in_progress note
|
||||
|
||||
#grub-pc ucf/changeprompt string install the package maintainer's version
|
||||
|
||||
d-i preseed/late_command string cp /cdrom/purism/50_custom /target/etc/grub.d/50_custom;\
|
||||
chmod a+x /target/etc/grub.d/50_custom;\
|
||||
echo "GRUB_DISABLE_OS_PROBER=true" >> /target/etc/default/grub;\
|
||||
in-target sed -e '/boot/s/^#*/#/' -i /etc/fstab;\
|
||||
in-target update-grub;
|
@ -0,0 +1,12 @@
|
||||
set default=0
|
||||
set timeout=1
|
||||
|
||||
insmod tga
|
||||
set color_normal=light-gray/black
|
||||
set color_highlight=white/light-blue
|
||||
|
||||
menuentry "Initial Setup" {
|
||||
set isofile="/pureos.iso"
|
||||
linux /vmlinuz video=vesa:ywrap,mtrr vga=788 quiet iso-scan/filename=${isofile} auto=true file=/hd-media/di-preseed.cfg
|
||||
initrd /initrd.gz
|
||||
}
|
@ -0,0 +1 @@
|
||||
source /boot/grub/grub.cfg
|
@ -0,0 +1,168 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import math
|
||||
from glob import glob
|
||||
from logging import getLogger
|
||||
import logging
|
||||
import shutil
|
||||
import parted
|
||||
|
||||
|
||||
def check_call(args):
|
||||
import sys
|
||||
from subprocess import check_call
|
||||
|
||||
return check_call(args, stdin=sys.stdin, stdout=sys.stdout, stderr=sys.stderr)
|
||||
|
||||
|
||||
class _ConsoleHandler(logging.StreamHandler):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.setFormatter(
|
||||
logging.Formatter('{levelname} - {message}', style='{')
|
||||
)
|
||||
|
||||
|
||||
class LibremDiskDevice(object):
|
||||
"""
|
||||
A simple model of a block storage device that wraps up some examples of
|
||||
pyparted capabilities.
|
||||
"""
|
||||
|
||||
def __init__(self, path):
|
||||
"""
|
||||
Initialize the ExampleDevice object.
|
||||
"""
|
||||
self.path = path
|
||||
self.logger = getLogger(__name__)
|
||||
|
||||
@property
|
||||
def partition_names(self):
|
||||
"""
|
||||
@return: A list of partition device names on the block device.
|
||||
@rtype: str
|
||||
"""
|
||||
names = glob('{}[0-9]*'.format(self.path))
|
||||
self.logger.debug('has partitions %s', names)
|
||||
return names
|
||||
|
||||
def _new_partition(self, device, disk, start, length, set_boot=False):
|
||||
geometry = parted.Geometry(device=device, start=start,
|
||||
length=length)
|
||||
|
||||
self.logger.debug('created %s', geometry)
|
||||
filesystem = parted.FileSystem(type='ext4', geometry=geometry)
|
||||
self.logger.debug('created %s', filesystem)
|
||||
partition = parted.Partition(disk=disk, type=parted.PARTITION_NORMAL,
|
||||
fs=filesystem, geometry=geometry)
|
||||
self.logger.debug('created %s', partition)
|
||||
disk.addPartition(partition=partition,
|
||||
constraint=device.optimalAlignedConstraint)
|
||||
if set_boot:
|
||||
partition.setFlag(parted.PARTITION_BOOT)
|
||||
|
||||
return partition
|
||||
|
||||
def partition(self):
|
||||
"""
|
||||
Create a partition table on the block device.
|
||||
"""
|
||||
self.logger.info('Creating partitions')
|
||||
device = parted.getDevice(self.path)
|
||||
self.logger.debug('created %s', device)
|
||||
disk = parted.freshDisk(device, 'msdos')
|
||||
self.logger.debug('created %s', disk)
|
||||
|
||||
# create the rescue disk partition
|
||||
partition_size = round((math.pow(1024.0, parted._exponent['gb']) * 2) / (device.sectorSize)) # 2 GB
|
||||
self._new_partition(device, disk, 1, partition_size, True)
|
||||
|
||||
disk.commit()
|
||||
|
||||
# for some reason, parted doesn't format this on its own, so we do it
|
||||
check_call(['mkfs.ext4', '/dev/sda1'])
|
||||
#check_call(['mkfs.ext4', '/dev/sda2'])
|
||||
check_call(['e2label', '/dev/sda1', 'rescue'])
|
||||
|
||||
def wipe_dev(self, dev_path):
|
||||
"""
|
||||
Wipe a device (partition or otherwise) of meta-data, be it file system,
|
||||
LVM, etc.
|
||||
|
||||
@param dev_path: Device path of the partition to be wiped.
|
||||
@type dev_path: str
|
||||
"""
|
||||
self.logger.debug('wiping %s', dev_path)
|
||||
with open(dev_path, 'wb') as p:
|
||||
p.write(bytearray(1024))
|
||||
|
||||
def wipe(self):
|
||||
"""
|
||||
Wipe the block device of meta-data, be it file system, LVM, etc.
|
||||
|
||||
This is not intended to be secure, but rather to ensure that
|
||||
auto-discovery tools don't recognize anything here.
|
||||
"""
|
||||
self.logger.info('Wiping partitions and other meta-data')
|
||||
for partition in self.partition_names:
|
||||
self.wipe_dev(partition)
|
||||
self.wipe_dev(self.path)
|
||||
|
||||
|
||||
def pureos_oem_setup():
|
||||
OEM_DATA_PATH = '/var/lib/pureos-oem/'
|
||||
logger = getLogger(__name__)
|
||||
|
||||
# create the new partition and format it
|
||||
libremhdd = LibremDiskDevice(disk_path)
|
||||
libremhdd.wipe()
|
||||
libremhdd.partition()
|
||||
|
||||
# mount the setup disk
|
||||
logger.info('Mounting setup disk...')
|
||||
target = os.path.join(OEM_DATA_PATH, 'target')
|
||||
try:
|
||||
os.makedirs(target)
|
||||
except:
|
||||
pass
|
||||
check_call(['mount', '/dev/sda1', target])
|
||||
|
||||
# copy PureOS image files and d-i
|
||||
logger.info('Copying PureOS install files...')
|
||||
shutil.copy(os.path.join(OEM_DATA_PATH, 'pureos.iso'), target)
|
||||
shutil.copy(os.path.join(OEM_DATA_PATH, 'initrd.gz'), target)
|
||||
shutil.copy(os.path.join(OEM_DATA_PATH, 'vmlinuz'), target)
|
||||
shutil.copy(os.path.join(OEM_DATA_PATH, 'di-preseed.cfg'), target)
|
||||
|
||||
# set up GRUB
|
||||
logger.info('Creating GRUB configuration...')
|
||||
boot_dir = os.path.join(target, 'boot')
|
||||
grub_dir = os.path.join(boot_dir, 'grub')
|
||||
try:
|
||||
os.makedirs(grub_dir)
|
||||
except:
|
||||
pass
|
||||
shutil.copy(os.path.join(OEM_DATA_PATH, 'grub', 'grub.cfg'), grub_dir)
|
||||
shutil.copy(os.path.join(OEM_DATA_PATH, 'grub', 'loopback.cfg'), grub_dir)
|
||||
|
||||
logger.info('Installing GRUB...')
|
||||
check_call(['grub-install', '/dev/sda', '--boot-directory=%s' % (boot_dir)])
|
||||
|
||||
check_call(['umount', target])
|
||||
logger.info('Done.')
|
||||
|
||||
shutdown = input('Shutdown now? [Y/n]')
|
||||
if not shutdown.strip() or shutdown.lower() == 'y':
|
||||
check_call(['systemctl', 'poweroff'])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
disk_path = '/dev/sda'
|
||||
|
||||
# Set up a logger for nice visibility.
|
||||
logger = getLogger(__name__)
|
||||
logger.setLevel(logging.DEBUG)
|
||||
logger.addHandler(_ConsoleHandler())
|
||||
|
||||
pureos_oem_setup()
|
@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
OEM_DIR=/var/lib/pureos-oem/
|
||||
|
||||
mkdir -p $OEM_DIR
|
||||
cd $OEM_DIR
|
||||
|
||||
apt install -y ca-certificates
|
||||
|
||||
# d-i components
|
||||
wget http://repo.pureos.net/pureos/dists/green/main/installer-amd64/20170525pureos3/images/hd-media/gtk/initrd.gz
|
||||
wget http://repo.pureos.net/pureos/dists/green/main/installer-amd64/20170525pureos3/images/hd-media/gtk/vmlinuz
|
||||
|
||||
# PureOS image
|
||||
wget --progress=dot:giga https://downloads.puri.sm/snapshots/2017-05-31/pureos-3.0-live-amd64.hybrid.iso -O pureos.iso
|
Loading…
Reference in new issue