Merge branch 'dev' of https://github.com/2Shirt/WizardKit into dev
This commit is contained in:
commit
8f4ec41359
8 changed files with 243 additions and 27 deletions
201
.bin/Scripts/build-ufd
Executable file
201
.bin/Scripts/build-ufd
Executable file
|
|
@ -0,0 +1,201 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
## Wizard Kit: UFD Build Tool
|
||||
|
||||
DEST_DEV="$1"
|
||||
DEST_PARTITION="${DEST_DEV}1"
|
||||
MAIN_PY="/usr/local/bin/settings/main.py"
|
||||
WD=$(pwd)
|
||||
EXTRA_DIR="${WD}/Extras"
|
||||
MAIN_KIT="$(dirname $(find $WD -type d -name '.bin') 2>/dev/null)"
|
||||
LINUX_ISO="$(find $WD -type f -iname '*Linux*iso' | head -1)"
|
||||
WINPE_ISO="$(find $WD -type f -iname '*WinPE*iso' | head -1)"
|
||||
if [ "$2" == "--silent" ]; then
|
||||
SILENT="True"
|
||||
fi
|
||||
|
||||
# COLORS
|
||||
CLEAR="\e[0m"
|
||||
RED="\e[31m"
|
||||
GREEN="\e[32m"
|
||||
YELLOW="\e[33m"
|
||||
BLUE="\e[34m"
|
||||
|
||||
# Functions
|
||||
function ask() {
|
||||
if [ "$SILENT" == "True" ]; then
|
||||
echo -e "$1 Yes ${BLUE}(Silent)${CLEAR}"
|
||||
return 0
|
||||
fi
|
||||
while :; do
|
||||
read -p "$1 " -r answer
|
||||
if echo "$answer" | egrep -iq '^(y|yes|sure)$'; then
|
||||
return 0
|
||||
elif echo "$answer" | egrep -iq '^(n|no|nope)$'; then
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
die () {
|
||||
echo "$0:" "$@" >&2
|
||||
echo ""
|
||||
read -p "Press Enter to exit... " -r
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Load main.py settings
|
||||
if [ ! -f "$MAIN_PY" ]; then
|
||||
echo -e "${RED}ERROR${CLEAR}: $MAIN_PY not found."
|
||||
die "Aborted."
|
||||
fi
|
||||
while read line; do
|
||||
if echo "$line" | egrep -q "^\w+='"; then
|
||||
line="$(echo "$line" | sed -r 's/[\r\n]+//')"
|
||||
eval "$line"
|
||||
fi
|
||||
done < "$MAIN_PY"
|
||||
if [ -z ${KIT_NAME_FULL+x} ]; then
|
||||
# KIT_NAME_FULL is not set, assume main.py missing or malformatted
|
||||
echo -e "${RED}ERROR${CLEAR}: failed to load settings from $MAIN_PY"
|
||||
die "Aborted."
|
||||
fi
|
||||
UFD_LABEL="${KIT_NAME_SHORT}_LINUX"
|
||||
|
||||
# Check if root
|
||||
if [[ "$EUID" -ne 0 ]]; then
|
||||
echo -e "${RED}ERROR${CLEAR}: This script must be run as root."
|
||||
die "Aborted."
|
||||
fi
|
||||
|
||||
# Check if in tmux
|
||||
if ! tmux list-session | grep -q "build-ufd"; then
|
||||
# Reload in tmux
|
||||
tmux new-session -s "build-ufd" "$0" $*
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Header
|
||||
echo -e "${GREEN}$KIT_NAME_FULL${CLEAR}: UFD Build Tool"
|
||||
echo ""
|
||||
|
||||
# Dest and Sources Check
|
||||
abort="False"
|
||||
if [ ! -b "$DEST_DEV" ]; then
|
||||
echo -e "${RED}ERROR${CLEAR}: Device $DEST_DEV not found."
|
||||
abort="True"
|
||||
fi
|
||||
if [ ! -f "$LINUX_ISO" ]; then
|
||||
echo -e "${RED}ERROR${CLEAR}: Linux ISO not found."
|
||||
abort="True"
|
||||
fi
|
||||
if [ ! -f "$WINPE_ISO" ]; then
|
||||
echo -e "${RED}ERROR${CLEAR}: WinPE ISO not found."
|
||||
abort="True"
|
||||
fi
|
||||
if [ ! -d "$MAIN_KIT" ]; then
|
||||
echo -e "${RED}ERROR${CLEAR}: Wizard Kit directory not found."
|
||||
abort="True"
|
||||
fi
|
||||
if [ ! -d "$EXTRA_DIR" ]; then
|
||||
# Warn but don't abort
|
||||
echo -e "${YELLOW}WARNING${CLEAR}: $EXTRA_DIR not found."
|
||||
echo ""
|
||||
EXTRA_DIR='__None__'
|
||||
fi
|
||||
if [ "$abort" == "True" ]; then
|
||||
echo ""
|
||||
die "Aborted."
|
||||
fi
|
||||
|
||||
# Display Job Settings
|
||||
echo -e "${BLUE}Sources${CLEAR}"
|
||||
echo "Main Kit: $MAIN_KIT"
|
||||
echo "Linux ISO: $LINUX_ISO"
|
||||
echo "WinPE ISO: $WINPE_ISO"
|
||||
echo "Extras: $EXTRA_DIR"
|
||||
echo ""
|
||||
echo -e "${BLUE}Destination${CLEAR}"
|
||||
lsblk -n -o NAME,LABEL,SIZE,MODEL,SERIAL $DEST_DEV
|
||||
|
||||
# Ask before starting job
|
||||
echo ""
|
||||
if ask "Is the above information correct?"; then
|
||||
echo ""
|
||||
echo -e "${YELLOW}SAFETY CHECK${CLEAR}"
|
||||
echo "All data will be DELETED from the disk and partition(s) listed above."
|
||||
echo -e "This is irreversible and will lead to ${RED}DATA LOSS.${CLEAR}"
|
||||
if ! ask "Asking again to confirm, is this correct?"; then
|
||||
die "Aborted."
|
||||
fi
|
||||
else
|
||||
die "Aborted."
|
||||
fi
|
||||
|
||||
# Start Build
|
||||
echo ""
|
||||
echo -e "${GREEN}Building Kit${CLEAR}"
|
||||
|
||||
# Format
|
||||
echo "Formatting drive..."
|
||||
parted "$DEST_DEV" -s -- mklabel msdos mkpart primary fat32 1MiB -1s
|
||||
parted "$DEST_DEV" set 1 boot on
|
||||
mkfs.vfat -F 32 -n "$UFD_LABEL" "$DEST_PARTITION" >/dev/null 2>&1
|
||||
|
||||
# Mount sources and dest
|
||||
echo "Mounting sources and destination..."
|
||||
mkdir /mnt/{Dest,Linux,WinPE} -p
|
||||
mount $DEST_PARTITION /mnt
|
||||
mount "$LINUX_ISO" /mnt/Linux -r
|
||||
mount "$WINPE_ISO" /mnt/WinPE -r
|
||||
|
||||
# Copy files
|
||||
echo "Copying Linux files..."
|
||||
tmux split-window -l 15 cp -Lrv /mnt/Linux/* /mnt/
|
||||
|
||||
echo "Copying WinPE files..."
|
||||
tmux split-window -l 15 cp -Lrv /mnt/WinPE/{Boot,bootmgr{,.efi},en-us,sources} /mnt/
|
||||
tmux split-window -l 15 cp -Lrv /mnt/WinPE/EFI/Microsoft /mnt/EFI/
|
||||
tmux split-window -l 15 cp -Lrv /mnt/WinPE/EFI/Boot/* /mnt/EFI/Microsoft/
|
||||
tmux split-window -l 15 cp -Lrv /mnt/WinPE/{Boot/{BCD,boot.sdi},bootmgr} /mnt/sources/
|
||||
|
||||
echo "Copying Main Kit..."
|
||||
tmux split-window -l 15 cp -Lrv "$MAIN_KIT" /mnt/
|
||||
if [ "$EXTRA_DIR" != "__None__" ]; then
|
||||
echo "Copying Extra files..."
|
||||
tmux split-window -l 15 cp -Lrv "$EXTRA_DIR"/* /mnt/
|
||||
fi
|
||||
|
||||
# Install syslinux
|
||||
echo "Copying Syslinux files..."
|
||||
tmux split-window -l 15 cp -Lrv /usr/lib/syslinux/bios/*.c32 /mnt/arch/boot/syslinux/
|
||||
syslinux --install -d /arch/boot/syslinux/ $DEST_PARTITION >/dev/null 2>&1
|
||||
|
||||
echo "Unmounting destination..."
|
||||
umount /mnt
|
||||
sync
|
||||
|
||||
echo "Installing Syslinux MBR..."
|
||||
dd bs=440 count=1 if=/usr/lib/syslinux/bios/mbr.bin of=$DEST_DEV >/dev/null 2>&1
|
||||
sync
|
||||
|
||||
# Cleanup
|
||||
echo "Hiding boot files..."
|
||||
echo "drive s: file=\"$DEST_PARTITION\"" > /root/.mtoolsrc
|
||||
echo 'mtools_skip_check=1' >> /root/.mtoolsrc
|
||||
for item in BOOT{,MGR,MGR.EFI} EFI EN-US ISOLINUX LOADER SOURCES SYSLINUX.CFG; do
|
||||
yes | mattrib +h S:/$item >/dev/null 2>&1
|
||||
done
|
||||
sync
|
||||
|
||||
# Unmount Sources
|
||||
echo "Unmounting sources..."
|
||||
umount /mnt/* -R
|
||||
|
||||
# Done
|
||||
echo ""
|
||||
echo "Done."
|
||||
echo ""
|
||||
read -p "Press Enter to exit..." -r
|
||||
exit 0
|
||||
|
||||
|
|
@ -410,10 +410,18 @@ def scan_disks():
|
|||
json_data = json.loads(result.stdout.decode())
|
||||
devs = {}
|
||||
for d in json_data.get('blockdevices', []):
|
||||
if d['type'] == 'disk' and d['hotplug'] == '0':
|
||||
devs[d['name']] = {'lsblk': d}
|
||||
TESTS['NVMe/SMART']['Status'][d['name']] = 'Pending'
|
||||
TESTS['badblocks']['Status'][d['name']] = 'Pending'
|
||||
if d['type'] == 'disk':
|
||||
if d['hotplug'] == '0':
|
||||
devs[d['name']] = {'lsblk': d}
|
||||
TESTS['NVMe/SMART']['Status'][d['name']] = 'Pending'
|
||||
TESTS['badblocks']['Status'][d['name']] = 'Pending'
|
||||
else:
|
||||
# Skip WizardKit devices
|
||||
wk_label = '{}_LINUX'.format(KIT_NAME_SHORT)
|
||||
if wk_label not in [c.get('label', '') for c in d['children']]:
|
||||
devs[d['name']] = {'lsblk': d}
|
||||
TESTS['NVMe/SMART']['Status'][d['name']] = 'Pending'
|
||||
TESTS['badblocks']['Status'][d['name']] = 'Pending'
|
||||
|
||||
for dev, data in devs.items():
|
||||
# Get SMART attributes
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ def color_temp(temp):
|
|||
color = COLORS['CLEAR']
|
||||
return '{color}{prefix}{temp:2.0f}°C{CLEAR}'.format(
|
||||
color = color,
|
||||
prefix = '+' if temp>0 else '-',
|
||||
prefix = '-' if temp < 0 else '',
|
||||
temp = temp,
|
||||
**COLORS)
|
||||
|
||||
|
|
@ -61,12 +61,9 @@ def get_feature_string(chip, feature):
|
|||
skipname = len(feature.name)+1 # skip common prefix
|
||||
data = {}
|
||||
|
||||
if feature.type == sensors.feature.INTRUSION:
|
||||
vals = [sensors.get_value(chip, sf.number) for sf in sfs]
|
||||
# short path for INTRUSION to demonstrate type usage
|
||||
status = "alarm" if int(vals[0]) == 1 else "normal"
|
||||
print_standard(' {:18} {}'.format(label, status))
|
||||
return
|
||||
if feature.type != sensors.feature.TEMP:
|
||||
# Skip non-temperature sensors
|
||||
return None
|
||||
|
||||
for sf in sfs:
|
||||
name = sf.name[skipname:].decode("utf-8").strip()
|
||||
|
|
@ -81,7 +78,7 @@ def get_feature_string(chip, feature):
|
|||
data[name] = ' {}°C'.format(val)
|
||||
else:
|
||||
data[name] = '{}{:2.0f}°C'.format(
|
||||
'+' if temp>0 else '-',
|
||||
'-' if temp < 0 else '',
|
||||
temp)
|
||||
else:
|
||||
data[name] = color_temp(val)
|
||||
|
|
@ -94,7 +91,7 @@ def get_feature_string(chip, feature):
|
|||
list_data.append('{}: {}'.format(item, data.pop(item)))
|
||||
list_data.extend(
|
||||
['{}: {}'.format(k, v) for k, v in sorted(data.items())])
|
||||
data_str = '{:18} {} ({})'.format(
|
||||
data_str = '{:18} {} {}'.format(
|
||||
label, main_temp, ', '.join(list_data))
|
||||
else:
|
||||
list_data.extend(sorted(data.items()))
|
||||
|
|
@ -119,10 +116,13 @@ if __name__ == '__main__':
|
|||
chip_name = '{} ({})'.format(
|
||||
sensors.chip_snprintf_name(chip),
|
||||
sensors.get_adapter_name(chip.bus))
|
||||
chip_temps[chip_name] = [chip_name]
|
||||
for feature in sensors.FeatureIterator(chip):
|
||||
chip_temps[chip_name].append(get_feature_string(chip, feature))
|
||||
chip_temps[chip_name].append('')
|
||||
chip_feats = [get_feature_string(chip, feature)
|
||||
for feature in sensors.FeatureIterator(chip)]
|
||||
# Strip empty/None items
|
||||
chip_feats = [f for f in chip_feats if f]
|
||||
|
||||
if chip_feats:
|
||||
chip_temps[chip_name] = [chip_name, *chip_feats, '']
|
||||
|
||||
# Sort chips
|
||||
sensor_temps = []
|
||||
|
|
|
|||
|
|
@ -441,6 +441,12 @@ LAUNCHERS = {
|
|||
},
|
||||
},
|
||||
r'Misc': {
|
||||
'Cleanup CBS Temp Files': {
|
||||
'L_TYPE': 'PyScript',
|
||||
'L_PATH': 'Scripts',
|
||||
'L_ITEM': 'cbs_fix.py',
|
||||
'L_ELEV': 'True',
|
||||
},
|
||||
'ConEmu (as ADMIN)': {
|
||||
'L_TYPE': 'Executable',
|
||||
'L_PATH': 'ConEmu',
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ order += "tztime local"
|
|||
#order += "tztime utc"
|
||||
|
||||
cpu_usage {
|
||||
format = ". %usage"
|
||||
format = " %usage"
|
||||
max_threshold = 90
|
||||
#format_above_threshold = " %usage"
|
||||
degraded_threshold = 75
|
||||
|
|
@ -29,19 +29,19 @@ cpu_usage {
|
|||
}
|
||||
|
||||
wireless _first_ {
|
||||
format_up = ". (%quality at %essid) %ip"
|
||||
format_down = ". Down"
|
||||
format_up = " (%quality at %essid) %ip"
|
||||
format_down = " Down"
|
||||
}
|
||||
|
||||
ethernet _first_ {
|
||||
# if you use %speed, i3status requires root privileges
|
||||
format_up = ". %ip"
|
||||
format_down = ". Down"
|
||||
format_up = " %ip"
|
||||
format_down = " Down"
|
||||
}
|
||||
|
||||
battery all {
|
||||
integer_battery_capacity = true
|
||||
format = "%status. %percentage"
|
||||
format = "%status %percentage"
|
||||
format_down = ""
|
||||
status_chr = ""
|
||||
status_bat = ""
|
||||
|
|
@ -53,7 +53,7 @@ battery all {
|
|||
}
|
||||
|
||||
volume master {
|
||||
format = ". %volume"
|
||||
format = " %volume"
|
||||
format_muted = " muted"
|
||||
device = "pulse"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,5 +10,5 @@ papirus-icon-theme
|
|||
pasystray
|
||||
smartmontools-svn
|
||||
testdisk-wip
|
||||
ttf-font-awesome
|
||||
ttf-font-awesome-4
|
||||
wd719x-firmware
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@ networkmanager
|
|||
nvme-cli
|
||||
oblogout
|
||||
openbox-patched
|
||||
otf-font-awesome-4
|
||||
p7zip
|
||||
papirus-icon-theme
|
||||
pasystray
|
||||
|
|
@ -75,7 +76,7 @@ tint2
|
|||
tk
|
||||
tmux
|
||||
tree
|
||||
ttf-font-awesome
|
||||
ttf-font-awesome-4
|
||||
ttf-inconsolata
|
||||
udevil
|
||||
udisks2
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ attrib +h OUT_KIT\.cbin >nul 2>&1
|
|||
rem Rewrite main.py using PowerShell to have CRLF/`r`n lineendings
|
||||
set "script=OUT_KIT\.bin\Scripts\borrowed\set-eol.ps1"
|
||||
set "main=OUT_KIT\.bin\Scripts\settings\main.py"
|
||||
powershell -executionpolicy bypass -noprofile -file %script% -lineEndings win -file %main% || goto ErrorUnknown
|
||||
powershell -executionpolicy bypass -noprofile -file %script% -lineEnding win -file %main% || goto ErrorUnknown
|
||||
|
||||
:Launch
|
||||
set "script=OUT_KIT\.bin\Scripts\build_kit.ps1"
|
||||
|
|
|
|||
Loading…
Reference in a new issue