@ -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,12 +1,10 @@ |
|||||
#!/bin/bash |
#!/bin/bash |
||||
cd /root |
|
||||
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys CB2DE8E5 |
set -e # exit on error |
||||
echo "deb https://download.onlyoffice.com/repo/debian squeeze main" > /etc/apt/sources.list.d/onlyoffice.list |
set -o pipefail # exit on pipeline error |
||||
wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - |
set -u # treat unset variable as error |
||||
wget -c https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb |
|
||||
apt update |
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" |
||||
apt install -y onlyoffice-desktopeditors |
|
||||
apt install -y /root/google-chrome-stable_current_amd64.deb |
rm -f /root/google-chrome-stable_current_amd64.deb >>$OUTPUT 2>&1 |
||||
apt install -y /root/cts-4.0.0-104.ks1_amd64.deb |
rm -f /root/cts-4.0.0-104.ks1_amd64.deb >>$OUTPUT 2>&1 |
||||
rm -f /root/google-chrome-stable_current_amd64.deb |
|
||||
rm -f /root/cts-4.0.0-104.ks1_amd64.deb |
|
@ -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 |