This commit is contained in:
2Shirt 2018-01-15 19:09:30 -07:00
commit 8f4ec41359
8 changed files with 243 additions and 27 deletions

201
.bin/Scripts/build-ufd Executable file
View 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

View file

@ -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

View file

@ -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 = []

View file

@ -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',

View file

@ -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"
}

View file

@ -10,5 +10,5 @@ papirus-icon-theme
pasystray
smartmontools-svn
testdisk-wip
ttf-font-awesome
ttf-font-awesome-4
wd719x-firmware

View file

@ -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

View file

@ -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"