aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSilvio Rhatto <rhatto@riseup.net>2016-07-03 14:45:15 -0300
committerSilvio Rhatto <rhatto@riseup.net>2016-07-03 14:45:15 -0300
commit66934f65a4f057f49ab7c793f0ec78530c0c237e (patch)
treed0393700f90c7e918f9cb351e2d95c528a215e1a
parente7cd367782c3d149e961bffcb93a5b1d5b710369 (diff)
downloadbootless-66934f65a4f057f49ab7c793f0ec78530c0c237e.tar.gz
bootless-66934f65a4f057f49ab7c793f0ec78530c0c237e.tar.bz2
Adds puppet manifests
l---------[-rwxr-xr-x]bootless232
-rwxr-xr-xfiles/bootless231
-rw-r--r--manifests/image.pp9
-rw-r--r--manifests/init.pp21
4 files changed, 262 insertions, 231 deletions
diff --git a/bootless b/bootless
index 59ff17e..fd16336 100755..120000
--- a/bootless
+++ b/bootless
@@ -1,231 +1 @@
-#!/bin/bash
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public
-# License along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-# Loader
-function bootless_load {
- local dest
- local base
-
- # Determine if we are in a local or system-wide install.
- if [ -h "$0" ]; then
- dest="$(readlink $0)"
-
- # Check again as the caller might be a symlink as well
- if [ -h "$dest" ]; then
- base="`dirname $dest`"
- dest="$(dirname $(readlink $dest))"
- else
- base="`dirname $0`"
- dest="`dirname $dest`"
- fi
-
- # Deal with relative or absolute links
- if [ "`basename $dest`" == "$dest" ]; then
- export APP_BASE="$base"
- else
- export APP_BASE="$dest"
- fi
- else
- export APP_BASE="`dirname $0`"
- fi
-}
-
-# Usage
-function bootless_usage {
- echo "Usage: `basename $0` <action> <folder> [arguments]"
- exit 1
-}
-
-# Sync bootless folder
-function bootless_rsync {
- # Exclude git folder and follow git-annex symlinks
- rsync -CLavz --exclude boot $1/ $2/
-
- # Make sure there's a symlink to itself
- ( cd $2 && ln -s . boot )
-}
-
-# Repository initiator
-function bootless_init {
- if [ -e "$BOOTLESS_DIR" ]; then
- echo "folder $BOOTLESS_DIR already exists"
- exit 1
- fi
-
- if [ ! -z "$1" ]; then
- # Clone from url
- git clone $1 $BOOTLESS_DIR
-
- # Support for git-annex
- #( cd $BOOTLESS_DIR && git annex init && git config annex.sshcaching false && git annex sync )
- exit $?
- fi
-
- # Create a fresh repository
- mkdir -p $BOOTLESS_DIR/{default,custom,grub}
- mkdir -p $BOOTLESS_DIR/custom/{debian,memtest}
- touch $BOOTLESS_DIR/{default,custom,grub}/.empty
- touch $BOOTLESS_DIR/default/{debian,memtest}/.empty
- ( cd $BOOTLESS_DIR && ln -s . boot)
-
- if [ -f "/boot/memtest86+.bin" ]; then
- cp /boot/memtest86+.bin $BOOTLESS_DIR/default/memtest
- else
- echo "No memtest image found. Please install memtest86+ package"
- echo "and manually copy /boot/memtest86+.bin if you want memtest support"
- fi
-
- # Grub configuration
- cp $APP_BASE/templates/grub.cfg $BOOTLESS_DIR/grub/
- cp $APP_BASE/templates/custom.cfg $BOOTLESS_DIR/custom/
-
- # Initialize git repository
- #(
- #cd $BOOTLESS_DIR
- #git init
- #git annex init
- #git config annex.sshcaching false
- #git add boot
- #git add {default,custom,grub}/.empty
- #git add default/{debian,memtest,ubuntu}/.empty
- #git add grub/grub.cfg
- #git annex add .
- #git commit -a -m "Initial import"
- #)
-
- echo "Now add your boot images and/or edit $BOOTLESS_DIR/custom/custom.cfg to suit your needs."
-}
-
-function bootless_warning {
- local device=$1
- local go
-
- echo "******************"
- echo "* ATTENTION!!! *"
- echo "******************"
- echo ""
- echo "If you continue, all data in device \"${device}\" will be destroyed!"
- echo ""
- echo -n "Are you sure you want to continue? Type uppercase \"YES\": "
- read go
-
- if [ "${go}" != "YES" ]; then
- false
- else
- true
- fi
-}
-
-# Generate a bootless disk image
-function bootless_image {
- local output="$1"
- local device="$2"
-
- if [ ! -d "$BOOTLESS_DIR" ]; then
- echo "missing $BOOTLESS_DIR folder, please initialize first"
- exit 1
- fi
-
- # Fix parameters
- if echo ${output} | grep -q "/dev/"; then
- output="bootless.iso"
- device="$1"
- elif [ -z "$output" ]; then
- output="bootless.iso"
- fi
-
- # Set sudo config
- local sudo
- if [ "`whoami`" != 'root' ]; then
- sudo="sudo"
- fi
-
- # Copy data
- tmpdir=`mktemp --tmpdir=/tmp -d`
- bootless_rsync ${BOOTLESS_DIR} ${tmpdir}/boot
-
- # Make rescue disk
- grub-mkrescue -o ${output} ${tmpdir}
-
- # Optionally copy to removable media
- if [ ! -z "$device" ]; then
- # Issue a warning
- bootless_warning ${device}
-
- if [ "$?" != "0" ]; then
- echo "Skipping copy of ${output} to ${device}..."
- else
- # Check if device is mounted
- if [ "`mount | grep ${device}`" != "" ]; then
- echo "Error: device \"${device}\" is mounted."
- echo "Skipping copy of ${output} to ${device}..."
- else
- $sudo dd if=${output} of=${device}
- fi
- fi
-
- fi
-
- # Cleanup
- rm -rf ${tmpdir}
-
- # Finish
- if [ -z "$device" ]; then
- echo "Image saved at ${output}"
- else
- echo "Removing image ${output}..."
- rm ${output}
- fi
-
- echo "Checking for changes in upstream grub.cfg, in which case you might want to update it..."
- diff -Naur $APP_BASE/templates/grub.cfg $BOOTLESS_DIR/grub/grub.cfg
-
- echo "Done."
-}
-
-# Check image/device integrity
-function bootless_check {
- echo "Not implemented yet :("
- exit 1
-}
-
-# Load
-bootless_load $*
-
-# Config
-NAME="bootless"
-BOOTLESS_VERSION="0.0.1"
-BOOTLESS_ACTION="$1"
-BOOTLESS_DIR="$2"
-
-# Output name and version
-echo "$NAME $BOOTLESS_VERSION"
-
-# Parameter verification
-if [ -z "$BOOTLESS_DIR" ]; then
- bootless_usage
-elif [ "$BOOTLESS_ACTION" == "init" ]; then
- shift 2
- bootless_init $*
-elif [ "$BOOTLESS_ACTION" == "image" ]; then
- shift 2
- bootless_image $*
-elif [ "$BOOTLESS_ACTION" == "check" ]; then
- shift 2
- bootless_check $*
-else
- bootless_usage
-fi
+files/bootless \ No newline at end of file
diff --git a/files/bootless b/files/bootless
new file mode 100755
index 0000000..59ff17e
--- /dev/null
+++ b/files/bootless
@@ -0,0 +1,231 @@
+#!/bin/bash
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public
+# License along with this program. If not, see
+# <http://www.gnu.org/licenses/>.
+
+# Loader
+function bootless_load {
+ local dest
+ local base
+
+ # Determine if we are in a local or system-wide install.
+ if [ -h "$0" ]; then
+ dest="$(readlink $0)"
+
+ # Check again as the caller might be a symlink as well
+ if [ -h "$dest" ]; then
+ base="`dirname $dest`"
+ dest="$(dirname $(readlink $dest))"
+ else
+ base="`dirname $0`"
+ dest="`dirname $dest`"
+ fi
+
+ # Deal with relative or absolute links
+ if [ "`basename $dest`" == "$dest" ]; then
+ export APP_BASE="$base"
+ else
+ export APP_BASE="$dest"
+ fi
+ else
+ export APP_BASE="`dirname $0`"
+ fi
+}
+
+# Usage
+function bootless_usage {
+ echo "Usage: `basename $0` <action> <folder> [arguments]"
+ exit 1
+}
+
+# Sync bootless folder
+function bootless_rsync {
+ # Exclude git folder and follow git-annex symlinks
+ rsync -CLavz --exclude boot $1/ $2/
+
+ # Make sure there's a symlink to itself
+ ( cd $2 && ln -s . boot )
+}
+
+# Repository initiator
+function bootless_init {
+ if [ -e "$BOOTLESS_DIR" ]; then
+ echo "folder $BOOTLESS_DIR already exists"
+ exit 1
+ fi
+
+ if [ ! -z "$1" ]; then
+ # Clone from url
+ git clone $1 $BOOTLESS_DIR
+
+ # Support for git-annex
+ #( cd $BOOTLESS_DIR && git annex init && git config annex.sshcaching false && git annex sync )
+ exit $?
+ fi
+
+ # Create a fresh repository
+ mkdir -p $BOOTLESS_DIR/{default,custom,grub}
+ mkdir -p $BOOTLESS_DIR/custom/{debian,memtest}
+ touch $BOOTLESS_DIR/{default,custom,grub}/.empty
+ touch $BOOTLESS_DIR/default/{debian,memtest}/.empty
+ ( cd $BOOTLESS_DIR && ln -s . boot)
+
+ if [ -f "/boot/memtest86+.bin" ]; then
+ cp /boot/memtest86+.bin $BOOTLESS_DIR/default/memtest
+ else
+ echo "No memtest image found. Please install memtest86+ package"
+ echo "and manually copy /boot/memtest86+.bin if you want memtest support"
+ fi
+
+ # Grub configuration
+ cp $APP_BASE/templates/grub.cfg $BOOTLESS_DIR/grub/
+ cp $APP_BASE/templates/custom.cfg $BOOTLESS_DIR/custom/
+
+ # Initialize git repository
+ #(
+ #cd $BOOTLESS_DIR
+ #git init
+ #git annex init
+ #git config annex.sshcaching false
+ #git add boot
+ #git add {default,custom,grub}/.empty
+ #git add default/{debian,memtest,ubuntu}/.empty
+ #git add grub/grub.cfg
+ #git annex add .
+ #git commit -a -m "Initial import"
+ #)
+
+ echo "Now add your boot images and/or edit $BOOTLESS_DIR/custom/custom.cfg to suit your needs."
+}
+
+function bootless_warning {
+ local device=$1
+ local go
+
+ echo "******************"
+ echo "* ATTENTION!!! *"
+ echo "******************"
+ echo ""
+ echo "If you continue, all data in device \"${device}\" will be destroyed!"
+ echo ""
+ echo -n "Are you sure you want to continue? Type uppercase \"YES\": "
+ read go
+
+ if [ "${go}" != "YES" ]; then
+ false
+ else
+ true
+ fi
+}
+
+# Generate a bootless disk image
+function bootless_image {
+ local output="$1"
+ local device="$2"
+
+ if [ ! -d "$BOOTLESS_DIR" ]; then
+ echo "missing $BOOTLESS_DIR folder, please initialize first"
+ exit 1
+ fi
+
+ # Fix parameters
+ if echo ${output} | grep -q "/dev/"; then
+ output="bootless.iso"
+ device="$1"
+ elif [ -z "$output" ]; then
+ output="bootless.iso"
+ fi
+
+ # Set sudo config
+ local sudo
+ if [ "`whoami`" != 'root' ]; then
+ sudo="sudo"
+ fi
+
+ # Copy data
+ tmpdir=`mktemp --tmpdir=/tmp -d`
+ bootless_rsync ${BOOTLESS_DIR} ${tmpdir}/boot
+
+ # Make rescue disk
+ grub-mkrescue -o ${output} ${tmpdir}
+
+ # Optionally copy to removable media
+ if [ ! -z "$device" ]; then
+ # Issue a warning
+ bootless_warning ${device}
+
+ if [ "$?" != "0" ]; then
+ echo "Skipping copy of ${output} to ${device}..."
+ else
+ # Check if device is mounted
+ if [ "`mount | grep ${device}`" != "" ]; then
+ echo "Error: device \"${device}\" is mounted."
+ echo "Skipping copy of ${output} to ${device}..."
+ else
+ $sudo dd if=${output} of=${device}
+ fi
+ fi
+
+ fi
+
+ # Cleanup
+ rm -rf ${tmpdir}
+
+ # Finish
+ if [ -z "$device" ]; then
+ echo "Image saved at ${output}"
+ else
+ echo "Removing image ${output}..."
+ rm ${output}
+ fi
+
+ echo "Checking for changes in upstream grub.cfg, in which case you might want to update it..."
+ diff -Naur $APP_BASE/templates/grub.cfg $BOOTLESS_DIR/grub/grub.cfg
+
+ echo "Done."
+}
+
+# Check image/device integrity
+function bootless_check {
+ echo "Not implemented yet :("
+ exit 1
+}
+
+# Load
+bootless_load $*
+
+# Config
+NAME="bootless"
+BOOTLESS_VERSION="0.0.1"
+BOOTLESS_ACTION="$1"
+BOOTLESS_DIR="$2"
+
+# Output name and version
+echo "$NAME $BOOTLESS_VERSION"
+
+# Parameter verification
+if [ -z "$BOOTLESS_DIR" ]; then
+ bootless_usage
+elif [ "$BOOTLESS_ACTION" == "init" ]; then
+ shift 2
+ bootless_init $*
+elif [ "$BOOTLESS_ACTION" == "image" ]; then
+ shift 2
+ bootless_image $*
+elif [ "$BOOTLESS_ACTION" == "check" ]; then
+ shift 2
+ bootless_check $*
+else
+ bootless_usage
+fi
diff --git a/manifests/image.pp b/manifests/image.pp
new file mode 100644
index 0000000..dd093c6
--- /dev/null
+++ b/manifests/image.pp
@@ -0,0 +1,9 @@
+define bootless::image(
+ $path,
+) {
+ exec { "bootless-image-${name}":
+ command => "/usr/local/bin/bootless image ${::bootless::folder} ${path}"
+ owner => ${::bootless::owner},
+ require => Exec['bootless-init'],
+ }
+}
diff --git a/manifests/init.pp b/manifests/init.pp
new file mode 100644
index 0000000..938b209
--- /dev/null
+++ b/manifests/init.pp
@@ -0,0 +1,21 @@
+class bootless (
+ $folder = false,
+ $repository = '',
+ $owner = 'root',
+){
+ file { '/usr/local/bin/bootless':
+ ensure => present,
+ owner => root,
+ group => root,
+ mode => 0755,
+ source => 'puppet://modules/bootless/bootless',
+ }
+
+ if $folder != false {
+ exec { "bootless-init":
+ command => "/usr/local/bin/bootless init ${folder} ${repository}",
+ user => $owner,
+ creates => $folder,
+ }
+ }
+}