@ -0,0 +1,16 @@ |
|||
#!/bin/bash |
|||
|
|||
set -e # exit on error |
|||
set -o pipefail # exit on pipeline error |
|||
set -u # treat unset variable as error |
|||
|
|||
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" |
|||
|
|||
# install packages |
|||
if [ -f $SCRIPT_DIR/package.list ]; then |
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD update >>$OUTPUT 2>&1 && |
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD install $APT_OPTIONS \ |
|||
$(grep -vE "^\s*#" $SCRIPT_DIR/package.list | tr "\n" " ") >>$OUTPUT 2>&1 |
|||
fi |
@ -0,0 +1,2 @@ |
|||
casper |
|||
lupin-casper |
@ -0,0 +1,9 @@ |
|||
#!/bin/bash |
|||
|
|||
if [ -f /usr/share/xfce4/backdrops/xubuntu-wallpaper.png ]; then |
|||
rm /usr/share/xfce4/backdrops/xubuntu-wallpaper.png |
|||
fi |
|||
if [ ! -d /usr/share/xfce4/backdrops ]; then |
|||
mkdir -p /usr/share/xfce4/backdrops |
|||
fi |
|||
ln -s /usr/share/backgrounds/MiniOS.png /usr/share/xfce4/backdrops/xubuntu-wallpaper.png |
@ -0,0 +1,14 @@ |
|||
# This file should go in /etc/casper.conf |
|||
# Supported variables are: |
|||
# USERNAME, USERFULLNAME, HOST, BUILD_SYSTEM, FLAVOUR |
|||
|
|||
export USERNAME="live" |
|||
export USERFULLNAME="Live session user" |
|||
export HOST="minios" |
|||
export BUILD_SYSTEM="Ubuntu" |
|||
|
|||
# USERNAME and HOSTNAME as specified above won't be honoured and will be set to |
|||
# flavour string acquired at boot time, unless you set FLAVOUR to any |
|||
# non-empty string. |
|||
|
|||
# export FLAVOUR="Ubuntu" |
@ -0,0 +1,4 @@ |
|||
[settings] |
|||
auto_connect=false |
|||
auto_disconnect=true |
|||
minimize_on_start=true |
@ -0,0 +1,16 @@ |
|||
#!/bin/bash |
|||
|
|||
set -e # exit on error |
|||
set -o pipefail # exit on pipeline error |
|||
set -u # treat unset variable as error |
|||
|
|||
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" |
|||
|
|||
# install packages |
|||
if [ -f $SCRIPT_DIR/package.list ]; then |
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD update >>$OUTPUT 2>&1 && |
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD install $APT_OPTIONS \ |
|||
$(grep -vE "^\s*#" $SCRIPT_DIR/package.list | tr "\n" " ") >>$OUTPUT 2>&1 |
|||
fi |
@ -0,0 +1,41 @@ |
|||
#!/bin/bash |
|||
|
|||
if [ -d /etc/lightdm ]; then |
|||
cat <<EOF >/etc/lightdm/lightdm.conf |
|||
[Seat:*] |
|||
autologin-session=xubuntu |
|||
autologin-user=live |
|||
autologin-user-timeout=0 |
|||
EOF |
|||
fi |
|||
if [ -d /etc/NetworkManager ]; then |
|||
echo "Disable dhclient.service autostart." |
|||
systemctl disable dhclient |
|||
mkdir -p /etc/netplan |
|||
cat <<EOF >/etc/netplan/01-netcfg.yaml |
|||
# This file describes the network interfaces available on your system |
|||
# For more information, see netplan(5). |
|||
# Set and change netplan renderer to NetworkManager GUI tool |
|||
network: |
|||
version: 2 |
|||
renderer: NetworkManager |
|||
EOF |
|||
cat <<EOF >/etc/NetworkManager/NetworkManager.conf |
|||
[main] |
|||
rc-manager=resolvconf |
|||
plugins=ifupdown,keyfile |
|||
dns=dnsmasq |
|||
[ifupdown] |
|||
managed=false |
|||
EOF |
|||
|
|||
dpkg-reconfigure -f noninteractive network-manager |
|||
fi |
|||
|
|||
if [ -f /usr/share/xfce4/backdrops/xubuntu-wallpaper.png ]; then |
|||
rm /usr/share/xfce4/backdrops/xubuntu-wallpaper.png |
|||
fi |
|||
if [ ! -d /usr/share/xfce4/backdrops ]; then |
|||
mkdir -p /usr/share/xfce4/backdrops |
|||
fi |
|||
ln -s /usr/share/backgrounds/MiniOS.png /usr/share/xfce4/backdrops/xubuntu-wallpaper.png |
@ -0,0 +1,16 @@ |
|||
#!/bin/bash |
|||
|
|||
set -e # exit on error |
|||
set -o pipefail # exit on pipeline error |
|||
set -u # treat unset variable as error |
|||
|
|||
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" |
|||
|
|||
# install packages |
|||
if [ -f $SCRIPT_DIR/package.list ]; then |
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD update >>$OUTPUT 2>&1 && |
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD install $APT_OPTIONS \ |
|||
$(grep -vE "^\s*#" $SCRIPT_DIR/package.list | tr "\n" " ") >>$OUTPUT 2>&1 |
|||
fi |
@ -0,0 +1,41 @@ |
|||
#!/bin/bash |
|||
|
|||
if [ -d /etc/lightdm ]; then |
|||
cat <<EOF >/etc/lightdm/lightdm.conf |
|||
[Seat:*] |
|||
autologin-session=xubuntu |
|||
autologin-user=live |
|||
autologin-user-timeout=0 |
|||
EOF |
|||
fi |
|||
if [ -d /etc/NetworkManager ]; then |
|||
echo "Disable dhclient.service autostart." |
|||
systemctl disable dhclient |
|||
mkdir -p /etc/netplan |
|||
cat <<EOF >/etc/netplan/01-netcfg.yaml |
|||
# This file describes the network interfaces available on your system |
|||
# For more information, see netplan(5). |
|||
# Set and change netplan renderer to NetworkManager GUI tool |
|||
network: |
|||
version: 2 |
|||
renderer: NetworkManager |
|||
EOF |
|||
cat <<EOF >/etc/NetworkManager/NetworkManager.conf |
|||
[main] |
|||
rc-manager=resolvconf |
|||
plugins=ifupdown,keyfile |
|||
dns=dnsmasq |
|||
[ifupdown] |
|||
managed=false |
|||
EOF |
|||
|
|||
dpkg-reconfigure -f noninteractive network-manager |
|||
fi |
|||
|
|||
if [ -f /usr/share/xfce4/backdrops/xubuntu-wallpaper.png ]; then |
|||
rm /usr/share/xfce4/backdrops/xubuntu-wallpaper.png |
|||
fi |
|||
if [ ! -d /usr/share/xfce4/backdrops ]; then |
|||
mkdir -p /usr/share/xfce4/backdrops |
|||
fi |
|||
ln -s /usr/share/backgrounds/MiniOS.png /usr/share/xfce4/backdrops/xubuntu-wallpaper.png |
@ -0,0 +1 @@ |
|||
minios |
@ -0,0 +1,7 @@ |
|||
127.0.0.1 localhost |
|||
127.0.1.1 minios |
|||
|
|||
# The following lines are desirable for IPv6 capable hosts |
|||
::1 localhost ip6-localhost ip6-loopback |
|||
ff02::1 ip6-allnodes |
|||
ff02::2 ip6-allrouters |
@ -0,0 +1 @@ |
|||
/usr/share/zoneinfo/Europe/Moscow |
@ -0,0 +1,2 @@ |
|||
PermitRootLogin yes |
|||
PasswordAuthentication yes |
@ -0,0 +1,58 @@ |
|||
#!/bin/bash |
|||
# Author: Tomas M. <http://www.slax.org/> |
|||
|
|||
usage() |
|||
{ |
|||
echo "" |
|||
echo "Convert directory to .sb compressed module" |
|||
echo "Usage: $0 [source_directory.sb] [[target_file.sb]]" |
|||
echo " If source_directory does not have .sb suffix and it is not 'squashfs-root'," |
|||
echo " then the source_directory itself is included in the module and" |
|||
echo " then the target_file.sb parameter is required." |
|||
echo " If target_file.sb is not specified, the source_directory is erased" |
|||
echo " and replaced by the newly generated module file." |
|||
} |
|||
|
|||
P1="$(readlink -f "$1")" |
|||
P2="$(readlink -f "$2")" |
|||
|
|||
if [ "$P1" = "$P2" ]; then |
|||
P2="" |
|||
fi |
|||
|
|||
SB=$(echo "$P1" | grep -o "[.]sb/*\$") |
|||
if [ "$(echo "$P1" | grep -o "/squashfs-root/*\$")" != "" ]; then |
|||
SB="true" |
|||
fi |
|||
|
|||
if [ "$SB" = "" ]; then |
|||
KEEP="-keep-as-directory" |
|||
if [ "$P2" = "" ]; then |
|||
usage |
|||
exit 1 |
|||
fi |
|||
else |
|||
KEEP="" |
|||
fi |
|||
|
|||
if [ ! -d "$P1" ]; then |
|||
echo "Not a directory: $P1" >&2 |
|||
exit 2 |
|||
fi |
|||
|
|||
|
|||
if [ "$P2" = "" ]; then |
|||
TARGET="$P1".sb |
|||
while [ -e "$TARGET" ]; do TARGET="$TARGET"x; done |
|||
mksquashfs "$P1" "$TARGET" -comp xz -b 1024K -always-use-fragments $KEEP >/dev/null || exit 3 |
|||
umount "$P1" 2>/dev/null |
|||
rm -Rf "$P1" |
|||
mv "$TARGET" "$P1" |
|||
else |
|||
if [ -e "$P2" ]; then |
|||
echo "Target exists: $P2" >&2 |
|||
exit 4 |
|||
fi |
|||
|
|||
mksquashfs "$P1" "$P2" -comp xz -b 1024K -always-use-fragments $KEEP >/dev/null |
|||
fi |
@ -0,0 +1,86 @@ |
|||
#!/bin/bash |
|||
# Rebuild initial ramdisk with full network drivers, |
|||
# start DHCP and TFTP server in order to provide PXE service |
|||
# |
|||
# Author: Tomas M <www.slax.org> |
|||
|
|||
LIVE=/run/initramfs |
|||
FTPROOT=/var/state/dnsmasq/root |
|||
|
|||
# find out our own IP address. If more interfaces are available, use the first one |
|||
IP="$(hostname -I | cut -d " " -f 1)" |
|||
GW=$(ip route show | grep default | grep -o "via.*" | head -n 1 | cut -d " " -f 2) |
|||
|
|||
# if no IP is assigned to this computer, setup private address randomly |
|||
if [ "$IP" = "" ]; then |
|||
killall dhclient 2>/dev/null |
|||
IP="10."$(($RANDOM/130+1))"."$(($RANDOM/130+1))".1" |
|||
ifconfig $(ls -1 /sys/class/net | egrep -v '^lo$' | sort | head -n 1) $IP netmask 255.255.255.0 |
|||
fi |
|||
|
|||
# if gateway is not recognized, lets make our IP a gateway and enable forwarding |
|||
if [ "$GW" = "" ]; then |
|||
GW="$IP" |
|||
echo 1 > /proc/sys/net/ipv4/conf/all/forwarding |
|||
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding |
|||
fi |
|||
|
|||
echo Starting PXE server on $IP ... |
|||
|
|||
# calculate C class range |
|||
RANGE=$(echo $IP | cut -d "." -f 1-3) |
|||
|
|||
# make sure dnsmasq can be started |
|||
killall dnsmasq 2>/dev/null |
|||
killall busybox 2>/dev/null |
|||
rm -Rf $FTPROOT 2>/dev/null |
|||
mkdir -p $FTPROOT/{pxelinux.cfg,tmp}/ |
|||
|
|||
# create root filesystem for ftfp |
|||
cd $LIVE |
|||
( find . -print | grep -v "memory" |
|||
cd / |
|||
find /lib/modules/$(uname -r)/kernel/drivers/net | grep -v wireless |
|||
) | cpio -pvd $FTPROOT/tmp 2>/dev/null |
|||
|
|||
cp /lib/modules/$(uname -r)/modules.* $FTPROOT/tmp/lib/modules/$(uname -r) |
|||
depmod -b $FTPROOT/tmp |
|||
rm $FTPROOT/tmp/lib/initramfs_escaped |
|||
|
|||
# pack root in initramfs |
|||
cd $FTPROOT/tmp |
|||
find . -print | cpio -o -H newc 2>/dev/null | gzip -f --fast >../initrfs.img |
|||
cd .. |
|||
rm -Rf tmp |
|||
|
|||
# link files here since copying is not necessary |
|||
ln -s $(find $LIVE/memory/{data,iso,toram} 2>/dev/null | grep vmlinuz | head -n 1) $FTPROOT/vmlinuz |
|||
ln -s $(find $LIVE/memory/{data,iso,toram} 2>/dev/null | grep pxelinux.0 | head -n 1) $FTPROOT/pxelinux.0 |
|||
ln -s $(find $LIVE/memory/{data,iso,toram} 2>/dev/null | grep ldlinux.c32 | head -n 1) $FTPROOT/ldlinux.c32 |
|||
|
|||
find $LIVE/memory/{data,iso,toram} 2>/dev/null | egrep "[.]sb\$" | sort -n | while read LINE; do |
|||
BAS="$(basename "$LINE")" |
|||
ln -s $LINE "$FTPROOT/$BAS" |
|||
echo $BAS >> "$FTPROOT/PXEFILELIST" |
|||
done |
|||
|
|||
echo "This is <a href=http://www.slax.org/>Slax</a> PXE data server. PXE clients will download <a href=PXEFILELIST>file list</a>" > "$FTPROOT/index.html" |
|||
|
|||
# default pxelinux configuration. Keep xmode selection for clients the same like for the server |
|||
echo " |
|||
PROMPT 0 |
|||
DEFAULT slax |
|||
LABEL slax |
|||
KERNEL /vmlinuz |
|||
IPAPPEND 1 |
|||
APPEND initrd=/initrfs.img load_ramdisk=1 prompt_ramdisk=0 rw printk.time=0 $(cat /proc/cmdline | egrep -o 'slax.flags=[^ ]+' | sed -r 's:[,=]pxe::' | sed -r 's:[,=]toram::') |
|||
" > $FTPROOT/pxelinux.cfg/default |
|||
|
|||
# start the DHCP server and TFTP server |
|||
dnsmasq --enable-tftp --tftp-root=/var/state/dnsmasq/root \ |
|||
--dhcp-boot=pxelinux.0,"$IP",$IP \ |
|||
--dhcp-option=3,$GW \ |
|||
--dhcp-range=$RANGE.2,$RANGE.250,infinite --log-dhcp |
|||
|
|||
# start HTTP server at port 7529 (that are the numbers you type on your phone to write 'slax') |
|||
busybox httpd -p 7529 -h /var/state/dnsmasq/root |
@ -0,0 +1,17 @@ |
|||
#!/bin/bash |
|||
# Author: Tomas M. <http://www.slax.org/> |
|||
|
|||
if [ ! -e "$1" ]; then |
|||
echo |
|||
echo "Erase module directory created by sb2dir" |
|||
echo "Usage: $0 [source_directory.sb]" |
|||
exit 1 |
|||
fi |
|||
|
|||
if [ ! -d "$1" ]; then |
|||
echo "Directory does not exist: $1" >&2 |
|||
exit |
|||
fi |
|||
|
|||
umount "$1" 2>/dev/null |
|||
rm -Rf "$1" |
@ -0,0 +1,46 @@ |
|||
#!/bin/bash |
|||
|
|||
TMP=/tmp/changes$$ |
|||
EXCLUDE="^\$|/\$|[.]wh[.][.]wh[.]orph/|^[.]wh[.][.]wh[.]plnk/|^[.]wh[.][.]wh[.]aufs|^var/cache/|^var/backups/|^var/tmp/|^var/log/|^var/lib/apt/|^var/lib/dhcp/|^var/lib/systemd/|^sbin/fsck[.]aufs|^etc/resolv[.]conf|^root/[.]Xauthority|^root/[.]xsession-errors|^root/[.]fehbg|^root/[.]fluxbox/lastwallpaper|^root/[.]fluxbox/menu_resolution|^etc/mtab|^etc/fstab|^boot/|^dev/|^mnt/|^proc/|^run/|^sys/|^tmp/" |
|||
CHANGES=/run/initramfs/memory/changes |
|||
|
|||
if [ "$1" = "" ]; then |
|||
echo "" |
|||
echo "savechanges - save all changed files in a compressed filesystem bundle" |
|||
echo " - excluding some predefined files such as /etc/mtab," |
|||
echo " temp & log files, empty directories, apt cache, and such" |
|||
echo "" |
|||
echo "Usage:" |
|||
echo " $0 [ target_file.sb ] [ changes_directory ]" |
|||
echo "" |
|||
echo "If changes_directory is not specified, /run/initramfs/memory/changes is used." |
|||
echo "" |
|||
exit 1 |
|||
fi |
|||
|
|||
if [ ! "$2" = "" ]; then |
|||
CHANGES="$2" |
|||
fi |
|||
|
|||
# exclude the save_file itself of course |
|||
EXCLUDE="$EXCLUDE|^""$(readlink -f "$1" | cut -b 2- | sed -r "s/[.]/[.]/")""\$" |
|||
|
|||
CWD=$(pwd) |
|||
|
|||
cd $CHANGES || exit |
|||
|
|||
mkdir -p $TMP |
|||
mount -t tmpfs tmpfs $TMP |
|||
|
|||
find \( -type d -printf "%p/\n" , -not -type d -print \) \ |
|||
| sed -r "s/^[.]\\///" | egrep -v "$EXCLUDE" \ |
|||
| while read FILE; do |
|||
cp --parents -afr "$FILE" "$TMP" |
|||
done |
|||
|
|||
cd $CWD |
|||
|
|||
mksquashfs $TMP "$1" -comp xz -b 1024K -always-use-fragments -noappend |
|||
|
|||
umount $TMP |
|||
rmdir $TMP |
@ -0,0 +1,29 @@ |
|||
#!/bin/bash |
|||
|
|||
if [ "$1" = "rm" ]; then |
|||
shift |
|||
rmsbdir "$@" |
|||
exit $? |
|||
fi |
|||
|
|||
if [ "$1" = "rmdir" ]; then |
|||
shift |
|||
rmsbdir "$@" |
|||
exit $? |
|||
fi |
|||
|
|||
if [ "$1" = "conv" ]; then |
|||
shift |
|||
fi |
|||
|
|||
if [ ! -r "$1" ]; then |
|||
echo File not found "$1" |
|||
exit 1 |
|||
fi |
|||
|
|||
if [ -d "$1" ]; then |
|||
dir2sb "$@" |
|||
exit $? |
|||
fi |
|||
|
|||
sb2dir "$@" |
@ -0,0 +1,33 @@ |
|||
#!/bin/bash |
|||
# Author: Tomas M. <http://www.slax.org/> |
|||
|
|||
if [ ! -e "$1" ]; then |
|||
echo |
|||
echo "Convert .sb compressed module into directory with the same name" |
|||
echo "Usage: $0 [source_file.sb] [[optional output_directory]]" |
|||
echo " If the output_directory is specified, it must exist" |
|||
echo " If the output_directory is not specified, the name source_file.sb" |
|||
echo " is used and the directory is overmounted with tmpfs" |
|||
exit 1 |
|||
fi |
|||
|
|||
if [ ! -r "$1" ]; then |
|||
echo "File does not exist: $1" >&2 |
|||
exit |
|||
fi |
|||
|
|||
if [ "$2" = "" ]; then |
|||
SOURCE="$1".x |
|||
while [ -e "$SOURCE" ]; do SOURCE="$SOURCE"x; done |
|||
mv "$1" "$SOURCE" || exit |
|||
mkdir "$1" |
|||
mount -t tmpfs tmpfs "$1" |
|||
unsquashfs -f -dest "$1" "$SOURCE" >/dev/null || exit |
|||
rm "$SOURCE" |
|||
else |
|||
if [ ! -d "$2" ]; then |
|||
echo "Directory does not exist: $2" >&2 |
|||
exit |
|||
fi |
|||
unsquashfs -f -dest "$2" "$1" >/dev/null |
|||
fi |
@ -0,0 +1,178 @@ |
|||
#!/bin/bash |
|||
# Slax management and control script |
|||
# Author: Tomas M <http://www.slax.org/> |
|||
|
|||
# activate |
|||
# deactivate |
|||
# list |
|||
|
|||
|
|||
LIVE=/run/initramfs/memory |
|||
RAMSTORE=$LIVE/modules |
|||
|
|||
# Print error message and exit |
|||
# $1 = error message |
|||
# |
|||
die() |
|||
{ |
|||
echo "$1" >&2 |
|||
exit 1 |
|||
} |
|||
|
|||
|
|||
print_branches() |
|||
{ |
|||
local SI BUNDLE LOOP CWD |
|||
|
|||
SI="/sys/fs/aufs/$(cat /proc/mounts | grep 'aufs / aufs' | egrep -o 'si=([^,) ]+)' | tr = _)" |
|||
CWD="$(pwd)" |
|||
cd "$SI" |
|||
ls -v1 | grep -v xi_path | egrep 'br[0-9]+' | xargs cat | grep memory/bundles | rev | cut -b 4- | rev | while read BUNDLE; do |
|||
if mountpoint -q "$BUNDLE"; then |
|||
LOOP=$(cat /proc/mounts | fgrep " $BUNDLE squashfs" | cut -d " " -f 1) |
|||
echo -n "$BUNDLE" |
|||
echo -ne "\t" |
|||
losetup $LOOP | sed -r "s:.*[(]|[)].*::g" |
|||
fi |
|||
done | tac |
|||
cd "$CWD" |
|||
} |
|||
|
|||
|
|||
# Activate Slax Bundle |
|||
# $1 = file to activate |
|||
# |
|||
activate() |
|||
{ |
|||
local SB TGT BAS |
|||
|
|||
SB="$(readlink -f "$1")" |
|||
BAS="$(basename "$SB")" |
|||
|
|||
# check if file exists |
|||
if [ ! -r "$SB" ]; then |
|||
usage |
|||
die "file not found $SB" |
|||
fi |
|||
|
|||
# check if the file is part of aufs union, if yes we need to copy it outside |
|||
if df "$SB" | cut -d " " -f 1 | grep -q aufs; then |
|||
TGT="$RAMSTORE" |
|||
mkdir -p "$TGT" |
|||
if [ -r $TGT/$BAS ]; then die "File exists: $TGT/$BAS"; fi |
|||
cp -n "$SB" "$TGT/$BAS" |
|||
if [ $? -ne 0 ]; then die "Error copying file to $TGT/$BAS. Not enough free RAM or disk space?"; fi |
|||
SB="$TGT/$BAS" |
|||
fi |
|||
|
|||
# check if this particular file is already activated |
|||
if print_branches | cut -f 2 | fgrep -q "$SB"; then |
|||
exit |
|||
fi |
|||
|
|||
# mount remount,add |
|||
TGT="$LIVE/bundles/$BAS" |
|||
mkdir -p "$TGT" |
|||
|
|||
mount -n -o loop,ro "$SB" "$TGT" |
|||
if [ $? -ne 0 ]; then |
|||
die "Error mounting $SB to $TGT, perhaps corrupted download" |
|||
fi |
|||
|
|||
# add current branch to aufs union |
|||
mount -t aufs -o remount,add:1:"$TGT" aufs / |
|||
if [ $? -ne 0 ]; then |
|||
umount "$TGT" |
|||
rmdir "$TGT" |
|||
die "Error attaching bundle filesystem to Slax" |
|||
fi |
|||
|
|||
echo "Slax Bundle activated: $BAS" |
|||
} |
|||
|
|||
|
|||
# Deactivate Slax bundle of the given name |
|||
# $1 = path to bundle file, or its name |
|||
# |
|||
deactivate() |
|||
{ |
|||
local BUNDLES SB MATCH LOOP LOOPFILE |
|||
|
|||
BUNDLES=$LIVE/bundles |
|||
MODULES=$LIVE/modules |
|||
SB="$(basename "$1")" |
|||
|
|||
rmdir "$BUNDLES/$SB" 2>/dev/null # this fails unless the dir is |
|||
rmdir "$BUNDLES/$SB.sb" 2>/dev/null # forgotten there empty. It's safe this way |
|||
|
|||
if [ ! -d "$BUNDLES/$SB" ]; then |
|||
# we don't have real filename match, lets try to add .sb extension |
|||
if [ ! -d "$BUNDLES/$SB.sb" ]; then |
|||
# no, still no match. Lets use some guesswork |
|||
SB=$(print_branches | cut -f 2 | egrep -o "/[0-9]+-$SB.sb\$" | tail -n 1 | xargs -r basename) |
|||
else |
|||
SB="$SB.sb" |
|||
fi |
|||
fi |
|||
|
|||
if [ "$SB" = "" -o ! -d "$BUNDLES/$SB" ]; then |
|||
die "can't find active slax bundle $1" |
|||
fi |
|||
|
|||
echo "Attempting to deactivate Slax bundle $SB..." |
|||
mount -t aufs -o remount,verbose,del:"$BUNDLES/$SB" aufs / 2>/dev/null |
|||
if [ $? -ne 0 ]; then |
|||
die "Unable to deactivate Slax Bundle - still in use. See dmesg for more." |
|||
fi |
|||
|
|||
# remember what loop device was the bundle mounted to, it may be needed later |
|||
LOOP="$(cat /proc/mounts | fgrep " $BUNDLES/$SB " | cut -d " " -f 1)" |
|||
LOOPFILE="$(losetup "$LOOP" | cut -d " " -f 3 | sed -r 's:^.|.$::g')" |
|||
|
|||
umount "$BUNDLES/$SB" 2>/dev/null |
|||
if [ $? -ne 0 ]; then |
|||
die "Unable to umount Slax bundle loop-mount $BUNDLES/$SB" |
|||
fi |
|||
rmdir "$BUNDLES/$SB" |
|||
|
|||
# free the loop device manually since umount fails to do that if the bundle was activated on boot |
|||
losetup -d "$LOOP" 2>/dev/null |
|||
|
|||
if echo "$LOOPFILE" | grep -q $RAMSTORE; then |
|||
rm -f $LOOPFILE |
|||
fi |
|||
|
|||
echo "Slax Bundle deactivated: $SB" |
|||
} |
|||
|
|||
|
|||
usage() |
|||
{ |
|||
echo "Usage: $0 [ activate | deactivate | list ] [ file.sb ]" >&2 |
|||
if [ "$1" != "" ]; then |
|||
echo "$1" >&2 |
|||
fi |
|||
} |
|||
|
|||
|
|||
if [ "$1" = "" ]; then |
|||
usage |
|||
die |
|||
fi |
|||
|
|||
if [ "$1" = "activate" ]; then |
|||
activate "$2" |
|||
fi |
|||
|
|||
if [ "$1" = "deactivate" ]; then |
|||
deactivate "$2" |
|||
fi |
|||
|
|||
if [ "$1" = "list" ]; then |
|||
print_branches |
|||
fi |
|||
|
|||
if [ "$1" = "savechanges" ]; then |
|||
shift |
|||
savechanges "$@" |
|||
fi |
@ -0,0 +1,38 @@ |
|||
[Unit] |
|||
Description=Load AppArmor profiles |
|||
DefaultDependencies=no |
|||
Before=sysinit.target |
|||
After=local-fs.target |
|||
After=systemd-journald-audit.socket |
|||
RequiresMountsFor=/var/cache/apparmor |
|||
AssertPathIsReadWrite=/sys/kernel/security/apparmor/.load |
|||
ConditionSecurity=apparmor |
|||
Documentation=man:apparmor(7) |
|||
Documentation=https://gitlab.com/apparmor/apparmor/wikis/home/ |
|||
|
|||
# Don't start this unit on the Ubuntu Live CD |
|||
ConditionPathExists=!/rofs/etc/apparmor.d |
|||
|
|||
# Don't start this unit on the Debian Live CD when using overlayfs |
|||
ConditionPathExists=!/run/live/overlay/work |
|||
|
|||
# Don't start this unit on Slax Live CD |
|||
ConditionPathExists=!/run/initramfs/lib/livekitlib |
|||
|
|||
[Service] |
|||
Type=oneshot |
|||
ExecStart=/lib/apparmor/apparmor.systemd reload |
|||
ExecReload=/lib/apparmor/apparmor.systemd reload |
|||
|
|||
# systemd maps 'restart' to 'stop; start' which means removing AppArmor confinement |
|||
# from running processes (and not being able to re-apply it later). |
|||
# Upstream systemd developers refused to implement an option that allows overriding |
|||
# this behaviour, therefore we have to make ExecStop a no-op to error out on the |
|||
# safe side. |
|||
# |
|||
# If you really want to unload all AppArmor profiles, run aa-teardown |
|||
ExecStop=/bin/true |
|||
RemainAfterExit=yes |
|||
|
|||
[Install] |
|||
WantedBy=sysinit.target |
@ -0,0 +1,16 @@ |
|||
[Unit] |
|||
Description=DHCP Client |
|||
Documentation=man:dhclient(8) |
|||
Wants=network.target |
|||
After=network-pre.target systemd-sysctl.service systemd-modules-load.service |
|||
Before=network.target shutdown.target network-online.target |
|||
ConditionPathExists=!/run/initramfs/net.up.flag |
|||
|
|||
[Service] |
|||
Type=forking |
|||
ExecStart=-/bin/sh -c 'udevadm settle && dhclient -nw' |
|||
PIDFile=/run/dhclient.pid |
|||
|
|||
[Install] |
|||
WantedBy=multi-user.target |
|||
WantedBy=network-online.target |
@ -0,0 +1,54 @@ |
|||
# This file is part of systemd. |
|||
# |
|||
# systemd is free software; you can redistribute it and/or modify it |
|||
# under the terms of the GNU Lesser General Public License as published by |
|||
# the Free Software Foundation; either version 2.1 of the License, or |
|||
# (at your option) any later version. |
|||
|
|||
[Unit] |
|||
Description=Getty on %I |
|||
Documentation=man:agetty(8) man:systemd-getty-generator(8) |
|||
Documentation=http://0pointer.de/blog/projects/serial-console.html |
|||
After=systemd-user-sessions.service plymouth-quit-wait.service |
|||
After=rc-local.service |
|||
|
|||
# If additional gettys are spawned during boot then we should make |
|||
# sure that this is synchronized before getty.target, even though |
|||
# getty.target didn't actually pull it in. |
|||
Before=getty.target |
|||
IgnoreOnIsolate=yes |
|||
|
|||
# IgnoreOnIsolate causes issues with sulogin, if someone isolates |
|||
# rescue.target or starts rescue.service from multi-user.target or |
|||
# graphical.target. |
|||
Conflicts=rescue.service |
|||
Before=rescue.service |
|||
|
|||
# On systems without virtual consoles, don't start any getty. Note |
|||
# that serial gettys are covered by serial-getty@.service, not this |
|||
# unit. |
|||
ConditionPathExists=/dev/tty0 |
|||
|
|||
[Service] |
|||
# the VT is cleared by TTYVTDisallocate |
|||
ExecStart=-/sbin/agetty --noclear %I $TERM |
|||
Type=idle |
|||
Restart=always |
|||
RestartSec=0 |
|||
UtmpIdentifier=%I |
|||
TTYPath=/dev/%I |
|||
TTYReset=yes |
|||
TTYVHangup=yes |
|||
#TM do not clear VT: |
|||
TTYVTDisallocate=no |
|||
KillMode=process |
|||
IgnoreSIGPIPE=no |
|||
SendSIGHUP=yes |
|||
|
|||
# Unset locale for the console getty since the console has problems |
|||
# displaying some internationalized messages. |
|||
Environment=LANG= LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION= |
|||
|
|||
[Install] |
|||
WantedBy=getty.target |
|||
DefaultInstance=tty1 |
@ -0,0 +1,2 @@ |
|||
# we don't care about loop* and ram* devices |
|||
KERNEL=="[!lr]*", SUBSYSTEM=="block", RUN+="/sbin/slax-automount %r/%k" |
@ -0,0 +1,23 @@ |
|||
#!/bin/bash |
|||
|
|||
LOCK=/run/lock/gtk-bookmark-update-lock |
|||
BOOKMARKS=/root/.gtk-bookmarks |
|||
|
|||
# make sure to avoid parallel execution by using mkdir as lock |
|||
while true; do |
|||
mkdir $LOCK 2>/dev/null |
|||
if [ $? = 0 ]; then |
|||
break |
|||
fi |
|||
done |
|||
|
|||
cat $BOOKMARKS | fgrep -v ///media/ | fgrep -v "file:/// /" | egrep -v '^$' > $BOOKMARKS.tmp 2>/dev/null |
|||
ls -1 /media | sort | while read LINE; do |
|||
echo "file:///media/$LINE $LINE" >> $BOOKMARKS.tmp |
|||
done |
|||
|
|||
echo "file:/// /" >> $BOOKMARKS.tmp # add root at the beginning |
|||
|
|||
mv -f $BOOKMARKS.tmp $BOOKMARKS |
|||
|
|||
rmdir $LOCK |
@ -0,0 +1,67 @@ |
|||
#!/bin/bash |
|||
# Recreate fstab entries in /etc/fstab and make /media directories |
|||
# This script is called by udev rules, see /lib/udev/rules.d/ |
|||
# |
|||
# Author: Tomas M <http://slax.linux-live.org/> |
|||
|
|||
# Variables available in udev environment: |
|||
# $ACTION (eg: add, remove) |
|||
# $DEVNAME (full device node name including path) |
|||
# $DEVTYPE (eg: disk) |
|||
# $ID_FS_TYPE (eg: ext3) |
|||
# $MAJOR and $MINOR numbers |
|||
# $SUBSYSTEM (eg: block) |
|||
|
|||
PATH=$PATH:/usr/bin:/usr/sbin:/bin:/sbin |
|||
|
|||
BAS="$(basename "$DEVNAME")" |
|||
UNIT="media-$BAS.mount" |
|||
MNT="/media/$BAS" |
|||
TARGET="/etc/systemd/system/$UNIT" |
|||
|
|||
|
|||
# exit if noautomount boot parameter is present |
|||
if cat /proc/cmdline | grep -q noautomount; then |
|||
exit |
|||
fi |
|||
|
|||
# exit if 'automount' boot parameter is missing |
|||
if ! cat /proc/cmdline | grep -q automount; then |
|||
exit |
|||
fi |
|||
|
|||
|
|||
if [ "$ACTION" = "add" -o "$ACTION" = "change" ]; then |
|||
if [ ! -r "$TARGET" ]; then # skip if exists |
|||
|
|||
if [ "$ID_FS_TYPE" != "" -a "$(cat /proc/filesystems | grep "$ID_FS_TYPE")" != "" ]; then |
|||
|
|||
mkdir -p "$MNT" |
|||
|
|||
echo "[Unit]" >$TARGET |
|||
echo "Description=Disk $BAS" >>$TARGET |
|||
echo "" >>$TARGET |
|||
echo "[Mount]" >>$TARGET |
|||
echo "What=$DEVNAME" >>$TARGET |
|||
echo "Where=$MNT" >>$TARGET |
|||
echo "Type=$ID_FS_TYPE" >>$TARGET |
|||
echo "Options=defaults" >>$TARGET |
|||
echo "" >>$TARGET |
|||
echo "[Install]" >>$TARGET |
|||
echo "WantedBy=multi-user.target" >>$TARGET |
|||
|
|||
systemctl enable $UNIT |
|||
systemctl start $UNIT |
|||
|
|||
gtk-bookmarks-update |
|||
DISPLAY=:0.0 pcmanfm -n file://$MNT >/dev/null 2>&1 |
|||
fi |
|||
fi |
|||
fi |
|||
|
|||
if [ "$ACTION" = "remove" ]; then |
|||
systemctl disable $UNIT |
|||
rm "$TARGET" |
|||
rmdir "$MNT" |
|||
gtk-bookmarks-update |
|||
fi |
@ -0,0 +1,16 @@ |
|||
#!/bin/bash |
|||
|
|||
set -e # exit on error |
|||
set -o pipefail # exit on pipeline error |
|||
set -u # treat unset variable as error |
|||
|
|||
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" |
|||
|
|||
# install packages |
|||
if [ -f $SCRIPT_DIR/package.list ]; then |
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD update >>$OUTPUT 2>&1 && |
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD install $APT_OPTIONS \ |
|||
$(grep -vE "^\s*#" $SCRIPT_DIR/package.list | tr "\n" " ") >>$OUTPUT 2>&1 |
|||
fi |
@ -0,0 +1,5 @@ |
|||
ubiquity |
|||
ubiquity-casper |
|||
ubiquity-frontend-gtk |
|||
ubiquity-slideshow-xubuntu |
|||
ubiquity-ubuntu-artwork |
@ -0,0 +1,41 @@ |
|||
#!/bin/bash |
|||
|
|||
if [ -d /etc/lightdm ]; then |
|||
cat <<EOF >/etc/lightdm/lightdm.conf |
|||
[Seat:*] |
|||
autologin-session=xubuntu |
|||
autologin-user=live |
|||
autologin-user-timeout=0 |
|||
EOF |
|||
fi |
|||
if [ -d /etc/NetworkManager ]; then |
|||
echo "Disable dhclient.service autostart." |
|||
systemctl disable dhclient |
|||
mkdir -p /etc/netplan |
|||
cat <<EOF >/etc/netplan/01-netcfg.yaml |
|||
# This file describes the network interfaces available on your system |
|||
# For more information, see netplan(5). |
|||
# Set and change netplan renderer to NetworkManager GUI tool |
|||
network: |
|||
version: 2 |
|||
renderer: NetworkManager |
|||
EOF |
|||
cat <<EOF >/etc/NetworkManager/NetworkManager.conf |
|||
[main] |
|||
rc-manager=resolvconf |
|||
plugins=ifupdown,keyfile |
|||
dns=dnsmasq |
|||
[ifupdown] |
|||
managed=false |
|||
EOF |
|||
|
|||
dpkg-reconfigure -f noninteractive network-manager |
|||
fi |
|||
|
|||
if [ -f /usr/share/xfce4/backdrops/xubuntu-wallpaper.png ]; then |
|||
rm /usr/share/xfce4/backdrops/xubuntu-wallpaper.png |
|||
fi |
|||
if [ ! -d /usr/share/xfce4/backdrops ]; then |
|||
mkdir -p /usr/share/xfce4/backdrops |
|||
fi |
|||
ln -s /usr/share/backgrounds/MiniOS.png /usr/share/xfce4/backdrops/xubuntu-wallpaper.png |
@ -0,0 +1,247 @@ |
|||
function build_modules_chroot() { |
|||
current_process |
|||
|
|||
if [ $LIVE_TYPE = "casper" ]; then |
|||
#return 0 |
|||
|
|||
chroot_mount_fs |
|||
|
|||
cd $SCRIPT_DIR/linux-live/modules |
|||
|
|||
for MODULE in *; do |
|||
if [ -f $SCRIPT_DIR/linux-live/modules/$MODULE/preinstall ]; then |
|||
cp $SCRIPT_DIR/linux-live/modules/$MODULE/preinstall $BUILDDIR/preinstall |
|||
chmod +x $BUILDDIR/preinstall |
|||
chroot $BUILDDIR /usr/bin/env \ |
|||
OUTPUT=$OUTPUT \ |
|||
LOGPATH=$LOGPATH \ |
|||
BUILD_TEST_ISO=$BUILD_TEST_ISO \ |
|||
CREATE_BACKUP=$CREATE_BACKUP \ |
|||
DEBIAN_FRONTEND_TYPE=$DEBIAN_FRONTEND_TYPE \ |
|||
APT_CMD=$APT_CMD \ |
|||
APT_OPTIONS=$APT_OPTIONS \ |
|||
LIVE_TYPE=$LIVE_TYPE \ |
|||
/preinstall >>$OUTPUT 2>&1 |
|||
fi |
|||
|
|||
# copy files |
|||
if [ "$(ls -A $SCRIPT_DIR/linux-live/modules/$MODULE/rootcopy)" != "" ]; then |
|||
(cd $SCRIPT_DIR/linux-live/modules/$MODULE/rootcopy && cp --parents -afr * $BUILDDIR/) |
|||
fi |
|||
|
|||
# run install script |
|||
if [ -f $SCRIPT_DIR/linux-live/modules/$MODULE/install ]; then |
|||
cp $SCRIPT_DIR/linux-live/modules/$MODULE/install $BUILDDIR/install |
|||
chmod +x $BUILDDIR/install |
|||
if [ -f $SCRIPT_DIR/linux-live/modules/$MODULE/package.list ]; then |
|||
cp $SCRIPT_DIR/linux-live/modules/$MODULE/package.list $BUILDDIR/package.list |
|||
fi |
|||
chroot $BUILDDIR /usr/bin/env \ |
|||
OUTPUT=$OUTPUT \ |
|||
LOGPATH=$LOGPATH \ |
|||
BUILD_TEST_ISO=$BUILD_TEST_ISO \ |
|||
CREATE_BACKUP=$CREATE_BACKUP \ |
|||
DEBIAN_FRONTEND_TYPE=$DEBIAN_FRONTEND_TYPE \ |
|||
APT_CMD=$APT_CMD \ |
|||
APT_OPTIONS=$APT_OPTIONS \ |
|||
LIVE_TYPE=$LIVE_TYPE \ |
|||
/install >>$OUTPUT 2>&1 |
|||
fi |
|||
|
|||
# run post-install script |
|||
if [ -f $SCRIPT_DIR/linux-live/modules/$MODULE/postinstall ]; then |
|||
cp $SCRIPT_DIR/linux-live/modules/$MODULE/postinstall $BUILDDIR/postinstall |
|||
chmod +x $BUILDDIR/postinstall |
|||
chroot $BUILDDIR /usr/bin/env \ |
|||
OUTPUT=$OUTPUT \ |
|||
LOGPATH=$LOGPATH \ |
|||
BUILD_TEST_ISO=$BUILD_TEST_ISO \ |
|||
CREATE_BACKUP=$CREATE_BACKUP \ |
|||
DEBIAN_FRONTEND_TYPE=$DEBIAN_FRONTEND_TYPE \ |
|||
APT_CMD=$APT_CMD \ |
|||
APT_OPTIONS=$APT_OPTIONS \ |
|||
LIVE_TYPE=$LIVE_TYPE \ |
|||
/postinstall >>$OUTPUT 2>&1 |
|||
fi |
|||
|
|||
chroot_finish_up |
|||
|
|||
chroot_umount_fs |
|||
done |
|||
fi |
|||
|
|||
if [ $CONTAINER_TYPE = "1" ]; then |
|||
if [ ! -f /.minios-live ]; then |
|||
setup_host |
|||
fi |
|||
fi |
|||
|
|||
MODULES_DIR=$PARENT_DIR/modules |
|||
|
|||
cd $SCRIPT_DIR/linux-live/modules |
|||
|
|||
for MODULE in *; do |
|||
if (ls $PARENT_DIR/image/$LIVEKITNAME/*.$BEXT | grep -q $MODULE 2>/dev/null); then |
|||
echo -e "${RED}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!${ENDCOLOUR}" |
|||
echo -e "Please remove ${MAGENTA}$PARENT_DIR/image/$LIVEKITNAME/$MODULE.$BEXT${ENDCOLOUR} if you want to build ${MAGENTA}$MODULE${ENDCOLOUR}." |
|||
echo -e "${RED}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!${ENDCOLOUR}" |
|||
else |
|||
MODULE_UPPER_DIR="$MODULES_DIR/$MODULE-upper" |
|||
MODULE_WORK_DIR="$MODULES_DIR/$MODULE-work" |
|||
MODULE_MERGED_DIR="$MODULES_DIR/$MODULE-merged" |
|||
|
|||
module_check_build_dir |
|||
|
|||
module_chroot_mount_fs |
|||
|
|||
# run pre-install script |
|||
if [ -f $SCRIPT_DIR/linux-live/modules/$MODULE/preinstall ]; then |
|||
cp $SCRIPT_DIR/linux-live/modules/$MODULE/preinstall $BUILDDIR/preinstall |
|||
chmod +x $BUILDDIR/preinstall |
|||
chroot $BUILDDIR /usr/bin/env \ |
|||
OUTPUT=$OUTPUT \ |
|||
LOGPATH=$LOGPATH \ |
|||
BUILD_TEST_ISO=$BUILD_TEST_ISO \ |
|||
CREATE_BACKUP=$CREATE_BACKUP \ |
|||
DEBIAN_FRONTEND_TYPE=$DEBIAN_FRONTEND_TYPE \ |
|||
APT_CMD=$APT_CMD \ |
|||
APT_OPTIONS=$APT_OPTIONS \ |
|||
LIVE_TYPE=$LIVE_TYPE \ |
|||
/preinstall >>$OUTPUT 2>&1 |
|||
fi |
|||
|
|||
: '# install packages |
|||
if [ -f $SCRIPT_DIR/linux-live/modules/$MODULE/package.list ]; then |
|||
if [ -d /opt/minios-live ] || [ -f /.minios-live-container ]; then |
|||
chroot $BUILDDIR /usr/bin/env \ |
|||
OUTPUT=$OUTPUT \ |
|||
LOGPATH=$LOGPATH \ |
|||
BUILD_TEST_ISO=$BUILD_TEST_ISO \ |
|||
CREATE_BACKUP=$CREATE_BACKUP \ |
|||
DEBIAN_FRONTEND_TYPE=$DEBIAN_FRONTEND_TYPE \ |
|||
APT_CMD=$APT_CMD \ |
|||
APT_OPTIONS=$APT_OPTIONS \ |
|||
LIVE_TYPE=$LIVE_TYPE \ |
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD update >>$OUTPUT 2>&1 && |
|||
chroot $BUILDDIR /usr/bin/env \ |
|||
OUTPUT=$OUTPUT \ |
|||
LOGPATH=$LOGPATH \ |
|||
BUILD_TEST_ISO=$BUILD_TEST_ISO \ |
|||
CREATE_BACKUP=$CREATE_BACKUP \ |
|||
DEBIAN_FRONTEND_TYPE=$DEBIAN_FRONTEND_TYPE \ |
|||
APT_CMD=$APT_CMD \ |
|||
APT_OPTIONS=$APT_OPTIONS \ |
|||
LIVE_TYPE=$LIVE_TYPE \ |
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD install $APT_OPTIONS \ |
|||
$(grep -vE "^\s*#" $SCRIPT_DIR/linux-live/modules/$MODULE/package.list | tr "\n" " ") >>$OUTPUT 2>&1 |
|||
else |
|||
chroot $BUILDDIR sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD update >>$OUTPUT 2>&1 && |
|||
chroot $BUILDDIR sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD install $APT_OPTIONS \ |
|||
$(grep -vE "^\s*#" $SCRIPT_DIR/linux-live/modules/$MODULE/package.list | tr "\n" " ") >>$OUTPUT 2>&1 |
|||
fi |
|||
fi' |
|||
|
|||
# copy files |
|||
if [ "$(ls -A $SCRIPT_DIR/linux-live/modules/$MODULE/rootcopy)" != "" ]; then |
|||
(cd $SCRIPT_DIR/linux-live/modules/$MODULE/rootcopy && cp --parents -afr * $BUILDDIR/) |
|||
fi |
|||
|
|||
# run install script |
|||
if [ -f $SCRIPT_DIR/linux-live/modules/$MODULE/install ]; then |
|||
cp $SCRIPT_DIR/linux-live/modules/$MODULE/install $BUILDDIR/install |
|||
chmod +x $BUILDDIR/install |
|||
if [ -f $SCRIPT_DIR/linux-live/modules/$MODULE/package.list ]; then |
|||
cp $SCRIPT_DIR/linux-live/modules/$MODULE/package.list $BUILDDIR/package.list |
|||
fi |
|||
chroot $BUILDDIR /usr/bin/env \ |
|||
OUTPUT=$OUTPUT \ |
|||
LOGPATH=$LOGPATH \ |
|||
BUILD_TEST_ISO=$BUILD_TEST_ISO \ |
|||
CREATE_BACKUP=$CREATE_BACKUP \ |
|||
DEBIAN_FRONTEND_TYPE=$DEBIAN_FRONTEND_TYPE \ |
|||
APT_CMD=$APT_CMD \ |
|||
APT_OPTIONS=$APT_OPTIONS \ |
|||
LIVE_TYPE=$LIVE_TYPE \ |
|||
/install >>$OUTPUT 2>&1 |
|||
fi |
|||
|
|||
# run post-install script |
|||
if [ -f $SCRIPT_DIR/linux-live/modules/$MODULE/postinstall ]; then |
|||
cp $SCRIPT_DIR/linux-live/modules/$MODULE/postinstall $BUILDDIR/postinstall |
|||
chmod +x $BUILDDIR/postinstall |
|||
chroot $BUILDDIR /usr/bin/env \ |
|||
OUTPUT=$OUTPUT \ |
|||
LOGPATH=$LOGPATH \ |
|||
BUILD_TEST_ISO=$BUILD_TEST_ISO \ |
|||
CREATE_BACKUP=$CREATE_BACKUP \ |
|||
DEBIAN_FRONTEND_TYPE=$DEBIAN_FRONTEND_TYPE \ |
|||
APT_CMD=$APT_CMD \ |
|||
APT_OPTIONS=$APT_OPTIONS \ |
|||
LIVE_TYPE=$LIVE_TYPE \ |
|||
/postinstall >>$OUTPUT 2>&1 |
|||
fi |
|||
|
|||
module_chroot_finish_up |
|||
|
|||
module_chroot_umount_fs |
|||
|
|||
if [ ! -f $PARENT_DIR/image/$LIVEKITNAME/$MODULE.$BEXT ]; then |
|||
build_modules_live |
|||
fi |
|||
|
|||
fi |
|||
done |
|||
} |
|||
|
|||
function build_modules_live() { |
|||
current_process |
|||
|
|||
if [ $LIVE_TYPE = "casper" ]; then |
|||
return 0 |
|||
fi |
|||
|
|||
if [ $CONTAINER_TYPE = "1" ]; then |
|||
if [ ! -f /.minios-live ]; then |
|||
setup_host |
|||
fi |
|||
fi |
|||
|
|||
MODULES_DIR=$PARENT_DIR/modules |
|||
|
|||
cd $SCRIPT_DIR/linux-live/modules |
|||
|
|||
for MODULE in *; do |
|||
|
|||
if (ls $PARENT_DIR/image/$LIVEKITNAME/*.$BEXT | grep -q $MODULE 2>/dev/null); then |
|||
echo -e "${RED}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!${ENDCOLOUR}" |
|||
echo -e "Please remove ${MAGENTA}$PARENT_DIR/image/$LIVEKITNAME/$MODULE.$BEXT${ENDCOLOUR} if you want to build ${MAGENTA}$MODULE${ENDCOLOUR}." |
|||
echo -e "${RED}!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!${ENDCOLOUR}" |
|||
else |
|||
|
|||
MODULE_UPPER_DIR="$MODULES_DIR/$MODULE-upper" |
|||
MODULE_WORK_DIR="$MODULES_DIR/$MODULE-work" |
|||
MODULE_MERGED_DIR="$MODULES_DIR/$MODULE-merged" |
|||
|
|||
if [ "$(ls -A $MODULE_UPPER_DIR)" != "" ]; then |
|||
|
|||
# create compressed 01-core.sb |
|||
: 'cd $MODULE_UPPER_DIR |
|||
COREFS="" |
|||
for i in $MKMOD; do |
|||
if [ -d /$i ]; then |
|||
COREFS="$COREFS $i" |
|||
fi |
|||
done |
|||
mksquashfs $COREFS $PARENT_DIR/image/$LIVEKITNAME/$MODULE.$BEXT -comp $COMP_TYPE -b 1024K -always-use-fragments -keep-as-directory -noappend || exit' |
|||
|
|||
mksquashfs $MODULE_UPPER_DIR $PARENT_DIR/image/$LIVEKITNAME/$MODULE-$COMP_TYPE.$BEXT -comp $COMP_TYPE -b 1024K -always-use-fragments -noappend || exit |
|||
else |
|||
echo -e "${MAGENTA}$BUILD_DIR${ENDCOLOUR} is empty. Nothing to do." |
|||
fi |
|||
fi |
|||
done |
|||
} |
@ -0,0 +1,16 @@ |
|||
#!/bin/bash |
|||
|
|||
set -e # exit on error |
|||
set -o pipefail # exit on pipeline error |
|||
set -u # treat unset variable as error |
|||
|
|||
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" |
|||
|
|||
# install packages |
|||
if [ -f $SCRIPT_DIR/package.list ]; then |
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD update >>$OUTPUT 2>&1 && |
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD install $APT_OPTIONS \ |
|||
$(grep -vE "^\s*#" $SCRIPT_DIR/package.list | tr "\n" " ") >>$OUTPUT 2>&1 |
|||
fi |
@ -0,0 +1,37 @@ |
|||
#!/bin/bash |
|||
|
|||
set -e # exit on error |
|||
set -o pipefail # exit on pipeline error |
|||
set -u # treat unset variable as error |
|||
|
|||
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" |
|||
|
|||
# install packages |
|||
if [ -f $SCRIPT_DIR/package.list ]; then |
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD update >>$OUTPUT 2>&1 && |
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD install $APT_OPTIONS \ |
|||
$(grep -vE "^\s*#" $SCRIPT_DIR/package.list | tr "\n" " ") >>$OUTPUT 2>&1 |
|||
fi |
|||
|
|||
cd /root |
|||
#apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys CB2DE8E5 >>$OUTPUT 2>&1 |
|||
#echo "deb https://download.onlyoffice.com/repo/debian squeeze main" >/etc/apt/sources.list.d/onlyoffice.list >>$OUTPUT 2>&1 |
|||
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - >>$OUTPUT 2>&1 |
|||
wget -c https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb >>$OUTPUT 2>&1 |
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD update |
|||
#sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
# $APT_CMD install $APT_OPTIONS onlyoffice-desktopeditors |
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD install $APT_OPTIONS /root/google-chrome-stable_current_amd64.deb /root/cts-4.0.0-104.ks1_amd64.deb >>$OUTPUT 2>&1 |
|||
|
|||
if [ -d /home/live ]; then |
|||
mkdir -p /home/live/.cts |
|||
cp /etc/skel/.cts/settings.conf /home/live/.cts/ |
|||
chmod 755 /home/live/.cts |
|||
chown live:live /home/live/.cts |
|||
chmod 644 /home/live/.cts/settings.conf |
|||
chown live:live /home/live/.cts/settings.conf |
|||
fi |
@ -1,4 +1,8 @@ |
|||
open-vm-tools-desktop |
|||
#firefox |
|||
#firefox-locale-ru |
|||
remmina |
|||
remmina |
|||
parole |
|||
recordmydesktop |
|||
compizconfig-settings-manager |
|||
compiz-plugins |
@ -1,12 +1,10 @@ |
|||
#!/bin/bash |
|||
cd /root |
|||
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys CB2DE8E5 |
|||
echo "deb https://download.onlyoffice.com/repo/debian squeeze main" > /etc/apt/sources.list.d/onlyoffice.list |
|||
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - |
|||
wget -c https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb |
|||
apt update |
|||
apt install -y onlyoffice-desktopeditors |
|||
apt install -y /root/google-chrome-stable_current_amd64.deb |
|||
apt install -y /root/cts-4.0.0-104.ks1_amd64.deb |
|||
rm -f /root/google-chrome-stable_current_amd64.deb |
|||
rm -f /root/cts-4.0.0-104.ks1_amd64.deb |
|||
|
|||
set -e # exit on error |
|||
set -o pipefail # exit on pipeline error |
|||
set -u # treat unset variable as error |
|||
|
|||
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" |
|||
|
|||
rm -f /root/google-chrome-stable_current_amd64.deb >>$OUTPUT 2>&1 |
|||
rm -f /root/cts-4.0.0-104.ks1_amd64.deb >>$OUTPUT 2>&1 |
@ -0,0 +1,4 @@ |
|||
[settings] |
|||
auto_connect=false |
|||
auto_disconnect=true |
|||
minimize_on_start=true |
@ -0,0 +1,16 @@ |
|||
#!/bin/bash |
|||
|
|||
set -e # exit on error |
|||
set -o pipefail # exit on pipeline error |
|||
set -u # treat unset variable as error |
|||
|
|||
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" |
|||
|
|||
# install packages |
|||
if [ -f $SCRIPT_DIR/package.list ]; then |
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD update >>$OUTPUT 2>&1 && |
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD install $APT_OPTIONS \ |
|||
$(grep -vE "^\s*#" $SCRIPT_DIR/package.list | tr "\n" " ") >>$OUTPUT 2>&1 |
|||
fi |
@ -0,0 +1,10 @@ |
|||
#!/bin/bash |
|||
|
|||
set -e # exit on error |
|||
set -o pipefail # exit on pipeline error |
|||
set -u # treat unset variable as error |
|||
|
|||
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" |
|||
|
|||
sudo DEBIAN_FRONTEND=$DEBIAN_FRONTEND_TYPE \ |
|||
$APT_CMD remove linux-headers-generic-hwe-20.04 $APT_OPTIONS >>$OUTPUT 2>&1 |
@ -0,0 +1,5 @@ |
|||
ubiquity |
|||
ubiquity-casper |
|||
ubiquity-frontend-gtk |
|||
ubiquity-slideshow-xubuntu |
|||
ubiquity-ubuntu-artwork |
@ -0,0 +1,2 @@ |
|||
Welcome to MiniOS! \n \l |
|||
|
@ -0,0 +1 @@ |
|||
MiniOS 2021 |
@ -0,0 +1 @@ |
|||
WebBrowser=google-chrome |
@ -0,0 +1,15 @@ |
|||
[Desktop Entry] |
|||
Version=1.0 |
|||
Type=Application |
|||
Exec=exo-open --launch FileManager %u |
|||
Icon=system-file-manager |
|||
StartupNotify=true |
|||
Terminal=false |
|||
Categories=Utility;X-XFCE;X-Xfce-Toplevel; |
|||
OnlyShowIn=XFCE; |
|||
X-XFCE-MimeType=inode/directory;x-scheme-handler/trash; |
|||
Name=File Manager |
|||
Name[ru]=Файловый менеджер |
|||
Comment=Browse the file system |
|||
Comment[ru]=Просмотреть файловую систему |
|||
X-XFCE-Source=file:///usr/share/applications/exo-file-manager.desktop |
@ -0,0 +1,16 @@ |
|||
[Desktop Entry] |
|||
Version=1.0 |
|||
Type=Application |
|||
Exec=exo-open --launch WebBrowser %u |
|||
Icon=web-browser |
|||
StartupNotify=true |
|||
Terminal=false |
|||
Categories=Network;X-XFCE;X-Xfce-Toplevel; |
|||
OnlyShowIn=XFCE; |
|||
X-XFCE-MimeType=x-scheme-handler/http;x-scheme-handler/https; |
|||
Name=Web Browser |
|||
Name[ru]=Веб-браузер |
|||
Comment=Browse the web |
|||
Comment[ru]=Смотреть в Интернете |
|||
X-XFCE-Source=file:///usr/share/applications/exo-web-browser.desktop |
|||
Path= |
@ -0,0 +1,14 @@ |
|||
[Desktop Entry] |
|||
Version=1.0 |
|||
Type=Application |
|||
Exec=exo-open --launch TerminalEmulator |
|||
Icon=utilities-terminal |
|||
StartupNotify=true |
|||
Terminal=false |
|||
Categories=Utility;X-XFCE;X-Xfce-Toplevel; |
|||
OnlyShowIn=XFCE; |
|||
Name=Terminal Emulator |
|||
Name[ru]=Эмулятор терминала |
|||
Comment=Use the command line |
|||
Comment[ru]=Использовать командную строку |
|||
X-XFCE-Source=file:///usr/share/applications/exo-terminal-emulator.desktop |
@ -0,0 +1,68 @@ |
|||
favorites=RDWebAccess.desktop,RDWebClient.desktop,org.remmina.Remmina.desktop,ctsg.desktop,ctskeyimportg.desktop,ubiquity.desktop |
|||
recent= |
|||
button-title=Applications Menu |
|||
button-icon=MiniOS-white |
|||
button-single-row=false |
|||
show-button-title=false |
|||
show-button-icon=true |
|||
launcher-show-name=true |
|||
launcher-show-description=false |
|||
launcher-show-tooltip=true |
|||
item-icon-size=2 |
|||
hover-switch-category=false |
|||
category-show-name=true |
|||
category-icon-size=1 |
|||
load-hierarchy=true |
|||
recent-items-max=10 |
|||
favorites-in-recent=true |
|||
display-recent-default=false |
|||
position-search-alternate=true |
|||
position-commands-alternate=false |
|||
position-categories-alternate=false |
|||
menu-width=400 |
|||
menu-height=500 |
|||
menu-opacity=100 |
|||
command-settings=xfce4-settings-manager |
|||
show-command-settings=true |
|||
command-lockscreen=xflock4 |
|||
show-command-lockscreen=true |
|||
command-switchuser=dm-tool switch-to-greeter |
|||
show-command-switchuser=false |
|||
command-logout=xfce4-session-logout |
|||
show-command-logout=true |
|||
command-menueditor=menulibre |
|||
show-command-menueditor=true |
|||
command-profile=mugshot |
|||
show-command-profile=true |
|||
search-actions=5 |
|||
|
|||
[action0] |
|||
name=Man-страницы |
|||
pattern=# |
|||
command=exo-open --launch TerminalEmulator man %s |
|||
regex=false |
|||
|
|||
[action1] |
|||
name=Web-поиск |
|||
pattern=? |
|||
command=exo-open --launch WebBrowser https://duckduckgo.com/?q=%u |
|||
regex=false |
|||
|
|||
[action2] |
|||
name=Википедия |
|||
pattern=!w |
|||
command=exo-open --launch WebBrowser https://en.wikipedia.org/wiki/%u |
|||
regex=false |
|||
|
|||
[action3] |
|||
name=Выполнить в терминале |
|||
pattern=! |
|||
command=exo-open --launch TerminalEmulator %s |
|||
regex=false |
|||
|
|||
[action4] |
|||
name=Открыть URI |
|||
pattern=^(file|http|https):\\/\\/(.*)$ |
|||
command=exo-open \\0 |
|||
regex=true |
|||
|
@ -0,0 +1,123 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
|
|||
<channel name="xfce4-panel" version="1.0"> |
|||
<property name="panels" type="uint" value="1"> |
|||
<property name="panel-0" type="empty"> |
|||
<property name="position" type="string" value="p=8;x=1109;y=1275"/> |
|||
<property name="length" type="uint" value="100"/> |
|||
<property name="position-locked" type="bool" value="true"/> |
|||
<property name="plugin-ids" type="array"> |
|||
<value type="int" value="1"/> |
|||
<value type="int" value="21"/> |
|||
<value type="int" value="23"/> |
|||
<value type="int" value="19"/> |
|||
<value type="int" value="24"/> |
|||
<value type="int" value="22"/> |
|||
<value type="int" value="2"/> |
|||
<value type="int" value="3"/> |
|||
<value type="int" value="5"/> |
|||
<value type="int" value="4"/> |
|||
<value type="int" value="7"/> |
|||
<value type="int" value="6"/> |
|||
<value type="int" value="9"/> |
|||
<value type="int" value="10"/> |
|||
<value type="int" value="11"/> |
|||
<value type="int" value="12"/> |
|||
</property> |
|||
<property name="background-style" type="uint" value="0"/> |
|||
<property name="background-alpha" type="uint" value="60"/> |
|||
<property name="size" type="uint" value="32"/> |
|||
<property name="length-adjust" type="bool" value="true"/> |
|||
<property name="span-monitors" type="bool" value="false"/> |
|||
<property name="enter-opacity" type="uint" value="100"/> |
|||
<property name="leave-opacity" type="uint" value="100"/> |
|||
<property name="mode" type="uint" value="0"/> |
|||
<property name="autohide-behavior" type="uint" value="0"/> |
|||
<property name="nrows" type="uint" value="1"/> |
|||
</property> |
|||
</property> |
|||
<property name="plugins" type="empty"> |
|||
<property name="plugin-1" type="string" value="whiskermenu"/> |
|||
<property name="plugin-2" type="string" value="tasklist"> |
|||
<property name="flat-buttons" type="bool" value="true"/> |
|||
<property name="show-handle" type="bool" value="false"/> |
|||
<property name="show-labels" type="bool" value="false"/> |
|||
</property> |
|||
<property name="plugin-3" type="string" value="separator"> |
|||
<property name="style" type="uint" value="0"/> |
|||
<property name="expand" type="bool" value="true"/> |
|||
</property> |
|||
<property name="plugin-4" type="string" value="systray"> |
|||
<property name="show-frame" type="bool" value="false"/> |
|||
<property name="size-max" type="uint" value="22"/> |
|||
<property name="names-visible" type="array"> |
|||
<value type="string" value="thunar"/> |
|||
<value type="string" value="ctsg"/> |
|||
</property> |
|||
<property name="names-hidden" type="array"> |
|||
<value type="string" value="network"/> |
|||
<value type="string" value="xfce4-power-manager"/> |
|||
<value type="string" value="сеть"/> |
|||
<value type="string" value="апплет networkmanager"/> |
|||
<value type="string" value="networkmanager applet"/> |
|||
<value type="string" value="remmina"/> |
|||
</property> |
|||
</property> |
|||
<property name="plugin-9" type="string" value="pulseaudio"> |
|||
<property name="enable-keyboard-shortcuts" type="bool" value="true"/> |
|||
<property name="enable-mpris" type="bool" value="true"/> |
|||
<property name="mixer-command" type="string" value="pavucontrol"/> |
|||
<property name="mpris-players" type="string" value="parole"/> |
|||
<property name="show-notifications" type="bool" value="true"/> |
|||
</property> |
|||
<property name="plugin-10" type="string" value="separator"> |
|||
<property name="style" type="uint" value="0"/> |
|||
<property name="expand" type="bool" value="false"/> |
|||
</property> |
|||
<property name="plugin-11" type="string" value="clock"> |
|||
<property name="digital-format" type="string" value="%d %b, %H:%M"/> |
|||
</property> |
|||
<property name="plugin-12" type="string" value="showdesktop"/> |
|||
<property name="plugin-19" type="string" value="launcher"> |
|||
<property name="items" type="array"> |
|||
<value type="string" value="16093657651.desktop"/> |
|||
</property> |
|||
</property> |
|||
<property name="plugin-21" type="string" value="separator"> |
|||
<property name="style" type="uint" value="0"/> |
|||
</property> |
|||
<property name="plugin-22" type="string" value="separator"> |
|||
<property name="style" type="uint" value="0"/> |
|||
</property> |
|||
<property name="plugin-23" type="string" value="launcher"> |
|||
<property name="items" type="array"> |
|||
<value type="string" value="16093659533.desktop"/> |
|||
</property> |
|||
<property name="show-label" type="bool" value="false"/> |
|||
<property name="disable-tooltips" type="bool" value="false"/> |
|||
</property> |
|||
<property name="plugin-24" type="string" value="launcher"> |
|||
<property name="items" type="array"> |
|||
<value type="string" value="16093659584.desktop"/> |
|||
</property> |
|||
</property> |
|||
<property name="plugin-5" type="string" value="xkb"> |
|||
<property name="display-scale" type="uint" value="50"/> |
|||
<property name="display-tooltip-icon" type="bool" value="true"/> |
|||
<property name="group-policy" type="uint" value="0"/> |
|||
<property name="display-type" type="uint" value="2"/> |
|||
<property name="display-name" type="uint" value="1"/> |
|||
</property> |
|||
<property name="plugin-7" type="string" value="statusnotifier"> |
|||
<property name="known-items" type="array"> |
|||
<value type="string" value="ctsg"/> |
|||
<value type="string" value="remmina-icon"/> |
|||
<value type="string" value="nm-applet"/> |
|||
</property> |
|||
<property name="hidden-items" type="array"> |
|||
</property> |
|||
</property> |
|||
<property name="plugin-6" type="string" value="power-manager-plugin"/> |
|||
</property> |
|||
<property name="configver" type="int" value="2"/> |
|||
</channel> |
@ -0,0 +1 @@ |
|||
Europe/Moscow |
@ -0,0 +1,140 @@ |
|||
# ~/.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 |
|||
case $- in |
|||
*i*) ;; |
|||
*) return;; |
|||
esac |
|||
|
|||
# don't put duplicate lines or lines starting with space in the history. |
|||
# See bash(1) for more options |
|||
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=1000 |
|||
HISTFILESIZE=2000 |
|||
|
|||
# check the window size after each command and, if necessary, |
|||
# update the values of LINES and COLUMNS. |
|||
shopt -s checkwinsize |
|||
|
|||
# If set, the pattern "**" used in a pathname expansion context will |
|||
# match all files and zero or more directories and subdirectories. |
|||
#shopt -s globstar |
|||
|
|||
# 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|*-256color) 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 |
|||
|
|||
if [ "$color_prompt" = yes ]; then |
|||
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' |
|||
else |
|||
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' |
|||
fi |
|||
unset color_prompt force_color_prompt |
|||
|
|||
# If this is an xterm set the title to user@host:dir |
|||
case "$TERM" in |
|||
xterm*|rxvt*) |
|||
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" |
|||
;; |
|||
*) |
|||
;; |
|||
esac |
|||
|
|||
# enable color support of ls and also add handy aliases |
|||
if [ -x /usr/bin/dircolors ]; then |
|||
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || 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 |
|||
|
|||
# colored GCC warnings and errors |
|||
#export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01' |
|||
|
|||
# some more ls aliases |
|||
alias ll='ls -alF' |
|||
alias la='ls -A' |
|||
alias l='ls -CF' |
|||
|
|||
# Add an "alert" alias for long running commands. Use like so: |
|||
# sleep 10; alert |
|||
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' |
|||
|
|||
# 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 programmable completion features (you don't need to enable |
|||
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile |
|||
# sources /etc/bash.bashrc). |
|||
if ! shopt -oq posix; then |
|||
if [ -f /usr/share/bash-completion/bash_completion ]; then |
|||
. /usr/share/bash-completion/bash_completion |
|||
elif [ -f /etc/bash_completion ]; then |
|||
. /etc/bash_completion |
|||
fi |
|||
fi |
|||
|
|||
apt-get() |
|||
{ |
|||
if [ -e /var/cache/apt/pkgcache.bin ]; then |
|||
/usr/bin/apt-get "$@" |
|||
else |
|||
/usr/bin/apt-get update |
|||
/usr/bin/apt-get "$@" |
|||
fi |
|||
} |
|||
|
|||
apt() |
|||
{ |
|||
if [ -e /var/cache/apt/pkgcache.bin ]; then |
|||
/usr/bin/apt "$@" |
|||
else |
|||
/usr/bin/apt update |
|||
/usr/bin/apt "$@" |
|||
fi |
|||
} |
|||
|
|||
export -f apt-get |
|||
export -f apt |
After Width: | Height: | Size: 681 KiB |
After Width: | Height: | Size: 17 KiB |
@ -0,0 +1 @@ |
|||
/usr/share/plymouth/themes/minios-logo/minios-logo.plymouth |
@ -0,0 +1,4 @@ |
|||
[Plymouth Theme] |
|||
Name=Details |
|||
Description=Verbose fallback theme |
|||
ModuleName=details |
After Width: | Height: | Size: 326 B |
After Width: | Height: | Size: 98 B |
After Width: | Height: | Size: 7.0 KiB |
After Width: | Height: | Size: 3.4 KiB |
@ -0,0 +1,8 @@ |
|||
[Plymouth Theme] |
|||
Name=MiniOS Logo |
|||
Description=A theme that features a background with a logo. |
|||
ModuleName=script |
|||
|
|||
[script] |
|||
ImageDir=/usr/share/plymouth/themes/minios-logo |
|||
ScriptFile=/usr/share/plymouth/themes/minios-logo/minios-logo.script |
@ -0,0 +1,512 @@ |
|||
/************************************************************************** |
|||
* |
|||
* Copyright (C) 2011 The Xubuntu Community |
|||
* Copyright (C) 2009 Canonical Ltd. |
|||
* |
|||
* This program is free software: you can redistribute it and/or modify |
|||
* it under the terms of the GNU 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 General Public License for more details. |
|||
* |
|||
* You should have received a copy of the GNU General Public License |
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
* |
|||
* Written by: Mad Nick <dr.madnick@gmail.com> |
|||
* |
|||
**************************************************************************/ |
|||
|
|||
/* |
|||
* Related to the screen */ |
|||
|
|||
screen_width = Window.GetWidth(); |
|||
screen_height = Window.GetHeight(); |
|||
screen_x = Window.GetX(); |
|||
screen_y = Window.GetY(); |
|||
|
|||
/**/ |
|||
|
|||
/* |
|||
* Images, check bits per pixel |
|||
* and load images accordingly */ |
|||
|
|||
background_image = Image("wallpaper.png"); |
|||
passw_dialog_input_image = Image("passw-dialog.png"); |
|||
bullet_image = Image("test.png"); |
|||
|
|||
bpp = Window.GetBitsPerPixel(); |
|||
|
|||
if (bpp == 4) { |
|||
|
|||
logotype_image = Image("logo_16bit.png"); |
|||
progress_meter_image = Image("progress-meter_16bit.png"); |
|||
progress_fade_image = Image("progress-fade_16bit.png"); |
|||
fsck_progress_meter_image = Image("progress-meter_16bit.png"); |
|||
fsck_progress_fade_image = Image("fsck-fade_16bit.png"); |
|||
|
|||
} |
|||
else { |
|||
|
|||
logotype_image = Image("logo.png"); |
|||
progress_meter_image = Image("progress-meter.png"); |
|||
progress_fade_image = Image("progress-fade.png"); |
|||
fsck_progress_meter_image = Image("progress-meter.png"); |
|||
fsck_progress_fade_image = Image("fsck-fade.png"); |
|||
|
|||
} |
|||
|
|||
/**/ |
|||
|
|||
/* |
|||
* Sprites */ |
|||
|
|||
ratio = screen_height / screen_width; |
|||
background_ratio = background_image.GetHeight() / background_image.GetWidth(); |
|||
factor = 0; |
|||
|
|||
if (ratio > background_ratio) { |
|||
|
|||
factor = screen_height / background_image.GetHeight(); |
|||
|
|||
} |
|||
else { |
|||
|
|||
factor = screen_width / background_image.GetWidth(); |
|||
|
|||
} |
|||
|
|||
scaled = background_image.Scale(background_image.GetWidth() * factor, background_image.GetHeight() * factor); |
|||
background_sprite = Sprite(scaled); |
|||
background_sprite.SetX(screen_x + screen_width / 2 - scaled.GetWidth() / 2); |
|||
background_sprite.SetY(screen_y + screen_height / 2 - scaled.GetHeight() / 2); |
|||
|
|||
logotype_sprite = Sprite(logotype_image); |
|||
|
|||
fsck_progress_meter_sprite = Sprite(fsck_progress_meter_image); |
|||
fsck_progress_fade_sprite = Sprite(fsck_progress_fade_image.Scale(1, fsck_progress_fade_image.GetHeight())); |
|||
|
|||
passw_dialog_input_sprite = Sprite(passw_dialog_input_image); |
|||
passw_lbl_sprite = Sprite(); |
|||
|
|||
msg_label_sprite = Sprite(); |
|||
|
|||
/**/ |
|||
|
|||
/* |
|||
* Misc */ |
|||
|
|||
counter = 0; |
|||
|
|||
fade_pos_x = (screen_width / 2) - (progress_meter_image.GetWidth() / 2); |
|||
fade_dir = 0; /* 0 = right, 1 = left */ |
|||
|
|||
fsck_running = 0; |
|||
fsck_dev_array; |
|||
fsck_dev_counter = 0; |
|||
fsck_fade_in_counter = 0; |
|||
fsck_done_fading = 0; |
|||
|
|||
stars_array; |
|||
stars_n = 0; |
|||
|
|||
//full_msg = ""; |
|||
msgs_line = [NULL,NULL,NULL,NULL,NULL]; |
|||
|
|||
/**/ |
|||
|
|||
/* |
|||
* Debug related */ |
|||
|
|||
debug = 0; |
|||
debug_sprite = Sprite(); |
|||
|
|||
fun debugOutput(str) { |
|||
|
|||
/* |
|||
* This will print to the top left corner */ |
|||
debug_sprite.SetImage(Image.Text(str)); |
|||
|
|||
} |
|||
|
|||
/**/ |
|||
|
|||
/* |
|||
* Setup the graphics properties */ |
|||
logotype_sprite.SetPosition(screen_x + (screen_width / 2) - (logotype_image.GetWidth() / 2), screen_y + (screen_height / 2) - (logotype_image.GetHeight() / 2)); |
|||
fsck_progress_meter_sprite.SetPosition(screen_x + (screen_width / 2) - (progress_meter_image.GetWidth() / 2), screen_y + (screen_height / 2) + (logotype_image.GetHeight() / 2) + 25); |
|||
fsck_progress_fade_sprite.SetPosition(screen_x + (screen_width / 2) - (progress_meter_image.GetWidth() / 2), screen_y + (screen_height / 2) + (logotype_image.GetHeight() / 2) + 25); |
|||
fsck_progress_meter_sprite.SetOpacity(0); |
|||
fsck_progress_fade_sprite.SetOpacity(0); |
|||
passw_dialog_input_sprite.SetPosition(screen_x + (screen_width / 2) - (passw_dialog_input_image.GetWidth() / 2), screen_y + (screen_height / 2) + (logotype_image.GetHeight() / 2) + 70); |
|||
passw_dialog_input_sprite.SetOpacity(0); |
|||
passw_lbl_sprite.SetOpacity(0); |
|||
|
|||
spin = 0; |
|||
|
|||
/* |
|||
* this function only goes up to 100 |
|||
* because thats all thats needed for |
|||
* the progress meter bar */ |
|||
fun atoi(str) { |
|||
|
|||
int = -1; |
|||
|
|||
for (i = 0; i <= 100; i++) { |
|||
|
|||
if (i + "" == str) { |
|||
|
|||
int = i; |
|||
|
|||
break; |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
return int; |
|||
|
|||
} |
|||
|
|||
/* |
|||
* This handler will/can be invoked |
|||
* 50 times per second. |
|||
* |
|||
* According to the previous author of the |
|||
* splash script, without this callback |
|||
* the screen is not updated correctly */ |
|||
spinner_sprite; |
|||
spinner; |
|||
|
|||
fun refreshHandler() { |
|||
|
|||
if (spin < 3.14 * 2) { |
|||
|
|||
spin = spin + 0.1; |
|||
|
|||
} |
|||
else { |
|||
|
|||
spin = 0; |
|||
|
|||
} |
|||
|
|||
/* if fsck is running or the password is prompted, hide the spinner */ |
|||
if (fsck_running == 1 || passw_dialog_input_sprite.GetOpacity() == 1) { |
|||
|
|||
spinner_sprite.SetOpacity(0); |
|||
|
|||
} else { |
|||
|
|||
spinner = Image("spinner.png"); |
|||
spinner = spinner.Rotate(spin); |
|||
spinner_sprite = Sprite(spinner); |
|||
spinner_sprite.SetPosition(screen_x + (screen_width / 2) - (spinner.GetWidth() / 2), screen_y + (screen_height / 2) - (spinner.GetHeight() / 2) + 80); |
|||
|
|||
} |
|||
|
|||
if (fade_dir == 0) { |
|||
|
|||
counter++; |
|||
|
|||
if (counter >= 200) { |
|||
|
|||
fade_dir = 1; |
|||
|
|||
} |
|||
|
|||
} |
|||
else { |
|||
|
|||
counter--; |
|||
|
|||
if (counter <= 0) { |
|||
|
|||
fade_dir = 0; |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
if ((fsck_running == 1) && (fsck_done_fading == 0)) { |
|||
|
|||
|
|||
fsck_progress_meter_sprite.SetOpacity(fsck_fade_in_counter); |
|||
fsck_progress_fade_sprite.SetOpacity(fsck_fade_in_counter); |
|||
|
|||
if (fsck_fade_in_counter < 1) { |
|||
|
|||
fsck_fade_in_counter+= 0.025; |
|||
|
|||
} |
|||
else { |
|||
|
|||
fsck_done_fading = 1; |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
Plymouth.SetRefreshFunction (refreshHandler); |
|||
|
|||
/**/ |
|||
|
|||
/* |
|||
* This function will display the password related information |
|||
* when being prompt with entering a password */ |
|||
fun showPasswordHandler(prompt, stars) { |
|||
|
|||
if (passw_dialog_input_sprite.GetOpacity() == 0 && passw_lbl_sprite.GetOpacity() == 0) { |
|||
|
|||
passw_dialog_input_sprite.SetOpacity(1); |
|||
passw_lbl_sprite.SetOpacity(1); |
|||
|
|||
} |
|||
|
|||
tmp_prompt_image = Image.Text(prompt, 1, 1, 1); |
|||
|
|||
passw_lbl_sprite.SetImage(tmp_prompt_image); |
|||
passw_lbl_sprite.SetPosition(screen_x + (screen_width / 2) - (tmp_prompt_image.GetWidth() / 2), screen_y + (screen_height / 2) + (logotype_image.GetHeight() / 2) + 50); |
|||
|
|||
for(i = 0; i < stars_n; i++) { |
|||
|
|||
stars_array[i] = NULL; |
|||
|
|||
} |
|||
|
|||
stars_n = 0; |
|||
|
|||
for(i = 0; (i < stars) && (i < 15); i++) { |
|||
|
|||
stars_array[i] = Sprite(bullet_image); |
|||
stars_array[i].SetPosition(screen_x + (((screen_width / 2) - (passw_dialog_input_image.GetWidth() / 2)) + (18 * i)) + 2, screen_y + (screen_height / 2) + (logotype_image.GetHeight() / 2) + 75); |
|||
stars_n++; |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
Plymouth.SetDisplayPasswordFunction(showPasswordHandler); |
|||
|
|||
/**/ |
|||
|
|||
fun displayNormalHandler() { |
|||
|
|||
/* |
|||
* Hide the password dialog and the bullets */ |
|||
|
|||
if (passw_dialog_input_sprite.GetOpacity() == 1) { |
|||
|
|||
passw_dialog_input_sprite.SetOpacity(0); |
|||
|
|||
} |
|||
|
|||
if (passw_lbl_sprite.GetOpacity() == 1) { |
|||
|
|||
passw_lbl_sprite.SetOpacity(0); |
|||
|
|||
} |
|||
|
|||
for(i = 0; i < stars_n; i++) { |
|||
|
|||
stars_array[i] = NULL; |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
Plymouth.SetDisplayNormalFunction(displayNormalHandler); |
|||
|
|||
fun strlen(string) { |
|||
|
|||
i = 0; |
|||
|
|||
while (String(string).CharAt(i)) { |
|||
|
|||
i++; |
|||
|
|||
} |
|||
|
|||
return i; |
|||
|
|||
} |
|||
|
|||
/* |
|||
* This function will display the most current message */ |
|||
fun messageHandler(msg) { |
|||
|
|||
if ((msg == "") || !msg) { |
|||
|
|||
return 0; |
|||
|
|||
} |
|||
|
|||
if (msg.SubString(0, 5) == "keys:") { |
|||
|
|||
msg = msg.SubString(5, strlen(msg)); |
|||
|
|||
} |
|||
|
|||
# Get the message without the "fsckd-cancel-msg" prefix as we don't support i18n |
|||
if (msg.SubString(0, 17) == "fsckd-cancel-msg:") |
|||
msg = msg.SubString(17, strlen(msg)); |
|||
|
|||
//full_msg += msg + " "; |
|||
for(i = 4; i > 0; i--) { |
|||
|
|||
msgs_line[i] = msgs_line[i - 1]; |
|||
|
|||
} |
|||
|
|||
msgs_line[0] = Sprite(Image.Text(msg, 1, 1, 1)); |
|||
|
|||
dist = 1; |
|||
|
|||
for(i = 0; i < 5; i++) { |
|||
|
|||
if (msgs_line[i] != NULL) { |
|||
|
|||
msgs_line[i].SetPosition(screen_x + (screen_width / 2) - (msgs_line[i].GetImage().GetWidth() / 2), screen_y + (screen_height - msgs_line[i].GetImage().GetHeight()) - 20*dist); |
|||
dist++; |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
Plymouth.SetMessageFunction(messageHandler); |
|||
|
|||
/**/ |
|||
|
|||
/* |
|||
* Handles the updates passed to the plymouth daemon |
|||
* for example the FSCK data */ |
|||
fun statusHandler(status) { |
|||
|
|||
tmp_char; |
|||
status_array[0] = ""; |
|||
elem_count = 0; |
|||
|
|||
for (i = 0; String(status).CharAt(i) != ""; i++) { |
|||
|
|||
tmp_char = String(status).CharAt(i); |
|||
|
|||
if (tmp_char != ":") { |
|||
|
|||
status_array[elem_count] += tmp_char; |
|||
|
|||
} |
|||
else { |
|||
|
|||
elem_count++; |
|||
status_array[elem_count] = ""; |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
if (status_array[0] == "fsck") { |
|||
|
|||
already_added = 0; |
|||
|
|||
if (fsck_running == 0) { |
|||
|
|||
/* |
|||
* use the dedicated message handler for this |
|||
* since there is no messages about fsck checks |
|||
* currently... */ |
|||
messageHandler("Routine disk drive check."); |
|||
|
|||
fsck_running = 1; |
|||
|
|||
} |
|||
|
|||
for(i = 0; i < fsck_dev_counter; i++) { |
|||
|
|||
/* |
|||
* check if the device already exist and update |
|||
* the progress only in that case */ |
|||
if (fsck_dev_array[i][0] == status_array[1]) { |
|||
|
|||
fsck_dev_array[i][1] = status_array[2]; /* progress */ |
|||
already_added = 1; |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
/* |
|||
* if the device is not added, then add it */ |
|||
if (already_added == 0) { |
|||
|
|||
fsck_dev_array[fsck_dev_counter][0] = status_array[1]; /* device */ |
|||
fsck_dev_array[fsck_dev_counter][1] = status_array[2]; /* progress */ |
|||
fsck_dev_counter++; |
|||
|
|||
} |
|||
|
|||
/* |
|||
* update the progress */ |
|||
|
|||
total = 0; |
|||
|
|||
for(i = 0; i < fsck_dev_counter; i++) { |
|||
|
|||
total += atoi(fsck_dev_array[i][1]); |
|||
|
|||
} |
|||
|
|||
if (fsck_dev_counter > 0) { |
|||
|
|||
/* |
|||
* display the total percentage */ |
|||
fsck_progress_fade_sprite.SetImage(fsck_progress_fade_image.Scale((fsck_progress_meter_image.GetWidth() / 100) * (total / fsck_dev_counter), fsck_progress_fade_image.GetHeight())); |
|||
|
|||
} |
|||
|
|||
/**/ |
|||
|
|||
/* |
|||
* if the total progress is at maximum, |
|||
* make the progress meter go away, |
|||
* we might want to fade this out... */ |
|||
if (total == (100 * fsck_dev_counter)) { |
|||
|
|||
fsck_progress_meter_sprite.SetOpacity(0); |
|||
fsck_progress_fade_sprite.SetOpacity(0); |
|||
|
|||
} |
|||
|
|||
} |
|||
|
|||
# systemd-fsckd pass fsckd:<number_devices>:<progress>:<l10n_string> |
|||
if (status_array[0] == "fsckd") { |
|||
fsck_running = 1; |
|||
|
|||
# remove ",x" as we only care about integers |
|||
progress_str = status_array[2]; |
|||
progress = atoi(progress_str.SubString(0, strlen(progress_str) - 2)); |
|||
|
|||
fsck_progress_fade_sprite.SetImage(fsck_progress_fade_image.Scale((fsck_progress_meter_image.GetWidth() / 100) * progress, fsck_progress_fade_image.GetHeight())); |
|||
|
|||
/* |
|||
* if the total progress is at maximum, |
|||
* make the progress meter go away, |
|||
* we might want to fade this out... */ |
|||
if (progress == 100) { |
|||
fsck_progress_meter_sprite.SetOpacity(0); |
|||
fsck_progress_fade_sprite.SetOpacity(0); |
|||
} |
|||
} |
|||
|
|||
} |
|||
|
|||
Plymouth.SetUpdateStatusFunction(statusHandler); |
|||
|
|||
/**/ |
After Width: | Height: | Size: 101 B |
After Width: | Height: | Size: 267 B |
After Width: | Height: | Size: 88 B |
After Width: | Height: | Size: 236 B |
After Width: | Height: | Size: 88 B |
After Width: | Height: | Size: 981 B |
After Width: | Height: | Size: 136 B |
After Width: | Height: | Size: 2.0 KiB |
@ -0,0 +1,11 @@ |
|||
[Plymouth Theme] |
|||
Name=MiniOS Text |
|||
Description=Text mode theme based on minios-logo theme |
|||
ModuleName=ubuntu-text |
|||
|
|||
[ubuntu-text] |
|||
title=MiniOS 2021 |
|||
black=0x000000 |
|||
white=0xffffff |
|||
brown=0x000000 |
|||
blue=0xffffff |
@ -0,0 +1 @@ |
|||
/usr/share/plymouth/themes/minios-text/minios-text.plymouth |