v1.4.2 - Goodbye Snow
Main Kit * Fixed issues #21 & #22 * Open speedtest during User Checklist (fixes #24) * Tool version updates * Various Bugfixes WinPE * Various Bugfixes Linux * `build-ufd` now uses a GPT layout with a protective MBR by default * Can still build MBR (Legacy) with the `--use-mbr` flag * (Hopefully) fixes #20 * `hw-diags` * Re-added keyboard test (fixes #25) * Add drive I/O benchmark test (fixes #23) * All results are in MB/s * Various Bugfixes
This commit is contained in:
commit
8f0393d173
18 changed files with 212 additions and 42 deletions
|
|
@ -15,7 +15,7 @@ rem Set variables using settings\main.py file
|
||||||
set "SETTINGS=%bin%\Scripts\settings\main.py"
|
set "SETTINGS=%bin%\Scripts\settings\main.py"
|
||||||
for %%v in (ARCHIVE_PASSWORD KIT_NAME_FULL) do (
|
for %%v in (ARCHIVE_PASSWORD KIT_NAME_FULL) do (
|
||||||
set "var=%%v"
|
set "var=%%v"
|
||||||
for /f "tokens=* usebackq" %%f in (`findstr "!var!=" %SETTINGS%`) do (
|
for /f "tokens=* usebackq" %%f in (`findstr "!var!=" "%SETTINGS%"`) do (
|
||||||
set "_v=%%f"
|
set "_v=%%f"
|
||||||
set "_v=!_v:*'=!"
|
set "_v=!_v:*'=!"
|
||||||
set "%%v=!_v:~0,-1!"
|
set "%%v=!_v:~0,-1!"
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ rem Set variables using settings\main.py file
|
||||||
set "SETTINGS=%bin%\Scripts\settings\main.py"
|
set "SETTINGS=%bin%\Scripts\settings\main.py"
|
||||||
for %%v in (ARCHIVE_PASSWORD KIT_NAME_FULL OFFICE_SERVER_IP QUICKBOOKS_SERVER_IP) do (
|
for %%v in (ARCHIVE_PASSWORD KIT_NAME_FULL OFFICE_SERVER_IP QUICKBOOKS_SERVER_IP) do (
|
||||||
set "var=%%v"
|
set "var=%%v"
|
||||||
for /f "tokens=* usebackq" %%f in (`findstr "!var!=" %SETTINGS%`) do (
|
for /f "tokens=* usebackq" %%f in (`findstr "!var!=" "%SETTINGS%"`) do (
|
||||||
set "_v=%%f"
|
set "_v=%%f"
|
||||||
set "_v=!_v:*'=!"
|
set "_v=!_v:*'=!"
|
||||||
set "%%v=!_v:~0,-1!"
|
set "%%v=!_v:~0,-1!"
|
||||||
|
|
@ -280,9 +280,9 @@ rem Create VB script
|
||||||
mkdir "%bin%\tmp" 2>nul
|
mkdir "%bin%\tmp" 2>nul
|
||||||
echo Set UAC = CreateObject^("Shell.Application"^) > "%bin%\tmp\Elevate.vbs"
|
echo Set UAC = CreateObject^("Shell.Application"^) > "%bin%\tmp\Elevate.vbs"
|
||||||
if defined L_NCMD (
|
if defined L_NCMD (
|
||||||
echo UAC.ShellExecute "%PYTHON%", "%script%", "", "runas", 3 >> "%bin%\tmp\Elevate.vbs"
|
echo UAC.ShellExecute "%PYTHON%", """%script%""", "", "runas", 3 >> "%bin%\tmp\Elevate.vbs"
|
||||||
) else (
|
) else (
|
||||||
echo UAC.ShellExecute "%CON%", "-run %PYTHON% %script% -new_console:n", "", "runas", 1 >> "%bin%\tmp\Elevate.vbs"
|
echo UAC.ShellExecute "%CON%", "-run ""%PYTHON%"" ""%script%"" -new_console:n", "", "runas", 1 >> "%bin%\tmp\Elevate.vbs"
|
||||||
)
|
)
|
||||||
|
|
||||||
rem Run
|
rem Run
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ popd
|
||||||
:SetTitle
|
:SetTitle
|
||||||
rem Sets title using KIT_NAME_FULL from settings\main.py
|
rem Sets title using KIT_NAME_FULL from settings\main.py
|
||||||
set "SETTINGS=%bin%\Scripts\settings\main.py"
|
set "SETTINGS=%bin%\Scripts\settings\main.py"
|
||||||
for /f "tokens=* usebackq" %%f in (`findstr KIT_NAME_FULL %SETTINGS%`) do (
|
for /f "tokens=* usebackq" %%f in (`findstr KIT_NAME_FULL "%SETTINGS%"`) do (
|
||||||
set "_v=%%f"
|
set "_v=%%f"
|
||||||
set "_v=!_v:*'=!"
|
set "_v=!_v:*'=!"
|
||||||
set "KIT_NAME_FULL=!_v:~0,-1!"
|
set "KIT_NAME_FULL=!_v:~0,-1!"
|
||||||
|
|
|
||||||
|
|
@ -153,6 +153,7 @@ function help () {
|
||||||
ADVANCED:
|
ADVANCED:
|
||||||
-d --debug Enable debug mode
|
-d --debug Enable debug mode
|
||||||
-v --verbose Enable verbose mode
|
-v --verbose Enable verbose mode
|
||||||
|
-M --use-mbr Use real MBR instead of GPT w/ Protective MBR
|
||||||
-F --force Bypass all confirmation messages. USE WITH EXTREME CAUTION!
|
-F --force Bypass all confirmation messages. USE WITH EXTREME CAUTION!
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
|
|
@ -378,6 +379,11 @@ if [[ "${arg_F:?}" == 1 ]]; then
|
||||||
else
|
else
|
||||||
SILENT="False"
|
SILENT="False"
|
||||||
fi
|
fi
|
||||||
|
if [[ "${arg_M:?}" == 1 ]]; then
|
||||||
|
USE_MBR="True"
|
||||||
|
else
|
||||||
|
USE_MBR="False"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ "${arg_h:?}" == 1 ]]; then
|
if [[ "${arg_h:?}" == 1 ]]; then
|
||||||
help "${__usage_example}"
|
help "${__usage_example}"
|
||||||
|
|
@ -499,6 +505,9 @@ echo "Extra Dir: ${EXTRA_DIR:-(Not Specified)}"
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "${BLUE}Destination${CLEAR}"
|
echo -e "${BLUE}Destination${CLEAR}"
|
||||||
lsblk -n -o NAME,LABEL,SIZE,MODEL,SERIAL "${DEST_DEV}"
|
lsblk -n -o NAME,LABEL,SIZE,MODEL,SERIAL "${DEST_DEV}"
|
||||||
|
if [[ "${USE_MBR}" == "True" ]]; then
|
||||||
|
echo -e "${YELLOW}Formatting using legacy MBR${CLEAR}"
|
||||||
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
# Ask before starting job
|
# Ask before starting job
|
||||||
|
|
@ -523,8 +532,15 @@ tmux split-window -dl 10 tail -f "${LOG_FILE}"
|
||||||
|
|
||||||
# Format
|
# Format
|
||||||
echo "Formatting drive..."
|
echo "Formatting drive..."
|
||||||
parted "${DEST_DEV}" -s -- mklabel msdos mkpart primary fat32 1MiB -1s >> "${LOG_FILE}" 2>&1
|
if [[ "${USE_MBR}" == "True" ]]; then
|
||||||
parted "${DEST_DEV}" set 1 boot on >> "${LOG_FILE}" 2>&1
|
parted "${DEST_DEV}" --script -- mklabel msdos mkpart primary fat32 4MiB -1s >> "${LOG_FILE}" 2>&1
|
||||||
|
parted "${DEST_DEV}" set 1 boot on >> "${LOG_FILE}" 2>&1
|
||||||
|
else
|
||||||
|
parted "${DEST_DEV}" --script -- mklabel gpt mkpart primary fat32 4MiB -4MiB >> "${LOG_FILE}" 2>&1
|
||||||
|
parted "${DEST_DEV}" set 1 legacy_boot on >> "${LOG_FILE}" 2>&1
|
||||||
|
#parted "${DEST_DEV}" disk_set pmbr_boot on >> "${LOG_FILE}" 2>&1
|
||||||
|
# pmbr_boot breaks detection on some UEFI MOBOs
|
||||||
|
fi
|
||||||
mkfs.vfat -F 32 -n "${UFD_LABEL}" "${DEST_PAR}" >> "${LOG_FILE}" 2>&1
|
mkfs.vfat -F 32 -n "${UFD_LABEL}" "${DEST_PAR}" >> "${LOG_FILE}" 2>&1
|
||||||
|
|
||||||
# Mount sources and dest
|
# Mount sources and dest
|
||||||
|
|
@ -549,7 +565,7 @@ rsync ${RSYNC_ARGS} "${MAIN_KIT}/" "/mnt/Dest/${KIT_NAME_FULL}/" >> "${LOG_FILE}
|
||||||
|
|
||||||
if [[ ! -z "${EXTRA_DIR:-}" ]]; then
|
if [[ ! -z "${EXTRA_DIR:-}" ]]; then
|
||||||
echo "Copying Extra files..."
|
echo "Copying Extra files..."
|
||||||
rsync ${RSYNC_ARGS} "${EXTRA_DIR}"/* /mnt/Dest/ >> "${LOG_FILE}" 2>&1
|
rsync ${RSYNC_ARGS} "${EXTRA_DIR}"/ /mnt/Dest/ >> "${LOG_FILE}" 2>&1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Install syslinux
|
# Install syslinux
|
||||||
|
|
@ -563,7 +579,11 @@ rmdir /mnt/Dest >> "${LOG_FILE}" 2>&1
|
||||||
sync
|
sync
|
||||||
|
|
||||||
echo "Installing Syslinux MBR..."
|
echo "Installing Syslinux MBR..."
|
||||||
dd bs=440 count=1 if=/usr/lib/syslinux/bios/mbr.bin of=${DEST_DEV} >> "${LOG_FILE}" 2>&1
|
if [[ "${USE_MBR}" == "True" ]]; then
|
||||||
|
dd bs=440 count=1 if=/usr/lib/syslinux/bios/mbr.bin of=${DEST_DEV} >> "${LOG_FILE}" 2>&1
|
||||||
|
else
|
||||||
|
dd bs=440 count=1 if=/usr/lib/syslinux/bios/gptmbr.bin of=${DEST_DEV} >> "${LOG_FILE}" 2>&1
|
||||||
|
fi
|
||||||
sync
|
sync
|
||||||
|
|
||||||
# Cleanup
|
# Cleanup
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ if ($MyInvocation.InvocationName -ne ".") {
|
||||||
DownloadFile -Path $Path -Name "ConEmuPack.7z" -Url $Url
|
DownloadFile -Path $Path -Name "ConEmuPack.7z" -Url $Url
|
||||||
|
|
||||||
# Notepad++
|
# Notepad++
|
||||||
$Url = "https://notepad-plus-plus.org/repository/7.x/7.5.5/npp.7.5.5.bin.minimalist.7z"
|
$Url = "https://notepad-plus-plus.org/repository/7.x/7.5.6/npp.7.5.6.bin.minimalist.7z"
|
||||||
DownloadFile -Path $Path -Name "npp.7z" -Url $Url
|
DownloadFile -Path $Path -Name "npp.7z" -Url $Url
|
||||||
|
|
||||||
# Python
|
# Python
|
||||||
|
|
@ -96,7 +96,7 @@ if ($MyInvocation.InvocationName -ne ".") {
|
||||||
DownloadFile -Path $Path -Name "python64.zip" -Url $Url
|
DownloadFile -Path $Path -Name "python64.zip" -Url $Url
|
||||||
|
|
||||||
# Python: psutil
|
# Python: psutil
|
||||||
$DownloadPage = "https://pypi.python.org/pypi/psutil"
|
$DownloadPage = "https://pypi.org/project/psutil/"
|
||||||
$RegEx = "href=.*-cp36-cp36m-win32.whl"
|
$RegEx = "href=.*-cp36-cp36m-win32.whl"
|
||||||
$Url = FindDynamicUrl $DownloadPage $RegEx
|
$Url = FindDynamicUrl $DownloadPage $RegEx
|
||||||
DownloadFile -Path $Path -Name "psutil32.whl" -Url $Url
|
DownloadFile -Path $Path -Name "psutil32.whl" -Url $Url
|
||||||
|
|
@ -107,7 +107,7 @@ if ($MyInvocation.InvocationName -ne ".") {
|
||||||
# Python: requests & dependancies
|
# Python: requests & dependancies
|
||||||
$RegEx = "href=.*.py3-none-any.whl"
|
$RegEx = "href=.*.py3-none-any.whl"
|
||||||
foreach ($Module in @("chardet", "certifi", "idna", "urllib3", "requests")) {
|
foreach ($Module in @("chardet", "certifi", "idna", "urllib3", "requests")) {
|
||||||
$DownloadPage = "https://pypi.python.org/pypi/$Module"
|
$DownloadPage = "https://pypi.org/project/$Module/"
|
||||||
$Name = "$Module.whl"
|
$Name = "$Module.whl"
|
||||||
$Url = FindDynamicUrl -SourcePage $DownloadPage -RegEx $RegEx
|
$Url = FindDynamicUrl -SourcePage $DownloadPage -RegEx $RegEx
|
||||||
DownloadFile -Path $Path -Name $Name -Url $Url
|
DownloadFile -Path $Path -Name $Name -Url $Url
|
||||||
|
|
|
||||||
|
|
@ -141,15 +141,15 @@ if ($MyInvocation.InvocationName -ne ".") {
|
||||||
@("fastcopy64.zip", "http://ftp.vector.co.jp/69/93/2323/FastCopy341_x64.zip"),
|
@("fastcopy64.zip", "http://ftp.vector.co.jp/69/93/2323/FastCopy341_x64.zip"),
|
||||||
@("fastcopy32.zip", "http://ftp.vector.co.jp/69/93/2323/FastCopy341.zip"),
|
@("fastcopy32.zip", "http://ftp.vector.co.jp/69/93/2323/FastCopy341.zip"),
|
||||||
# HWiNFO
|
# HWiNFO
|
||||||
@("hwinfo.zip", "http://app.oldfoss.com:81/download/HWiNFO/hwi_574.zip"),
|
@("hwinfo.zip", "http://app.oldfoss.com:81/download/HWiNFO/hwi_582.zip"),
|
||||||
# Killer Network Drivers
|
# Killer Network Drivers
|
||||||
@(
|
@(
|
||||||
"killerinf.zip",
|
"killerinf.zip",
|
||||||
("http://www.killernetworking.com"+(FindDynamicUrl "http://www.killernetworking.com/driver-downloads/item/killer-drivers-inf" "Download Killer-Ethernet").replace('&', '&'))
|
("http://www.killernetworking.com"+(FindDynamicUrl "http://www.killernetworking.com/driver-downloads/item/killer-drivers-inf" "Download Killer-Ethernet").replace('&', '&'))
|
||||||
),
|
),
|
||||||
# Notepad++
|
# Notepad++
|
||||||
@("npp_amd64.7z", "https://notepad-plus-plus.org/repository/7.x/7.5.5/npp.7.5.5.bin.minimalist.x64.7z"),
|
@("npp_amd64.7z", "https://notepad-plus-plus.org/repository/7.x/7.5.6/npp.7.5.6.bin.minimalist.x64.7z"),
|
||||||
@("npp_x86.7z", "https://notepad-plus-plus.org/repository/7.x/7.5.5/npp.7.5.5.bin.minimalist.7z"),
|
@("npp_x86.7z", "https://notepad-plus-plus.org/repository/7.x/7.5.6/npp.7.5.6.bin.minimalist.7z"),
|
||||||
# NT Password Editor
|
# NT Password Editor
|
||||||
@("ntpwed.zip", "http://cdslow.org.ru/files/ntpwedit/ntpwed07.zip"),
|
@("ntpwed.zip", "http://cdslow.org.ru/files/ntpwedit/ntpwed07.zip"),
|
||||||
# Prime95
|
# Prime95
|
||||||
|
|
@ -164,11 +164,11 @@ if ($MyInvocation.InvocationName -ne ".") {
|
||||||
# Python: psutil
|
# Python: psutil
|
||||||
@(
|
@(
|
||||||
"psutil64.whl",
|
"psutil64.whl",
|
||||||
(FindDynamicUrl "https://pypi.python.org/pypi/psutil" "href=.*-cp36-cp36m-win_amd64.whl")
|
(FindDynamicUrl "https://pypi.org/project/psutil/" "href=.*-cp36-cp36m-win_amd64.whl")
|
||||||
),
|
),
|
||||||
@(
|
@(
|
||||||
"psutil32.whl",
|
"psutil32.whl",
|
||||||
(FindDynamicUrl "https://pypi.python.org/pypi/psutil" "href=.*-cp36-cp36m-win32.whl")
|
(FindDynamicUrl "https://pypi.org/project/psutil/" "href=.*-cp36-cp36m-win32.whl")
|
||||||
),
|
),
|
||||||
# Q-Dir
|
# Q-Dir
|
||||||
@("qdir64.zip", "https://www.softwareok.com/Download/Q-Dir_Portable_x64.zip"),
|
@("qdir64.zip", "https://www.softwareok.com/Download/Q-Dir_Portable_x64.zip"),
|
||||||
|
|
@ -451,6 +451,7 @@ if ($MyInvocation.InvocationName -ne ".") {
|
||||||
"x", "$Temp\qdir64.zip", "-o$Build\bin\amd64",
|
"x", "$Temp\qdir64.zip", "-o$Build\bin\amd64",
|
||||||
"-aoa", "-bso0", "-bse0", "-bsp0")
|
"-aoa", "-bso0", "-bse0", "-bsp0")
|
||||||
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
|
Start-Process -FilePath $SevenZip -ArgumentList $ArgumentList -NoNewWindow -Wait
|
||||||
|
Move-Item "$Build\bin\amd64\Q-Dir\Q-Dir_x64.exe" "$Build\bin\amd64\Q-Dir\Q-Dir.exe" -Force
|
||||||
$ArgumentList = @(
|
$ArgumentList = @(
|
||||||
"x", "$Temp\qdir32.zip", "-o$Build\bin\x86",
|
"x", "$Temp\qdir32.zip", "-o$Build\bin\x86",
|
||||||
"-aoa", "-bso0", "-bse0", "-bsp0")
|
"-aoa", "-bso0", "-bse0", "-bsp0")
|
||||||
|
|
|
||||||
|
|
@ -131,9 +131,9 @@ def clear_screen():
|
||||||
def convert_to_bytes(size):
|
def convert_to_bytes(size):
|
||||||
"""Convert human-readable size str to bytes and return an int."""
|
"""Convert human-readable size str to bytes and return an int."""
|
||||||
size = str(size)
|
size = str(size)
|
||||||
tmp = re.search(r'(\d+)\s+([KMGT]B)', size.upper())
|
tmp = re.search(r'(\d+\.?\d*)\s+([KMGT]B)', size.upper())
|
||||||
if tmp:
|
if tmp:
|
||||||
size = int(tmp.group(1))
|
size = float(tmp.group(1))
|
||||||
units = tmp.group(2)
|
units = tmp.group(2)
|
||||||
if units == 'TB':
|
if units == 'TB':
|
||||||
size *= 1099511627776
|
size *= 1099511627776
|
||||||
|
|
@ -143,6 +143,7 @@ def convert_to_bytes(size):
|
||||||
size *= 1048576
|
size *= 1048576
|
||||||
elif units == 'KB':
|
elif units == 'KB':
|
||||||
size *= 1024
|
size *= 1024
|
||||||
|
size = int(size)
|
||||||
else:
|
else:
|
||||||
return -1
|
return -1
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -39,8 +39,21 @@ TESTS = {
|
||||||
'Results': {},
|
'Results': {},
|
||||||
'Status': {},
|
'Status': {},
|
||||||
},
|
},
|
||||||
|
'iobenchmark': {
|
||||||
|
'Enabled': False,
|
||||||
|
'Results': {},
|
||||||
|
'Status': {},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def get_read_rate(s):
|
||||||
|
"""Get read rate in bytes/s from dd progress output."""
|
||||||
|
real_rate = None
|
||||||
|
if re.search(r'[KMGT]B/s', s):
|
||||||
|
human_rate = re.sub(r'^.*\s+(\d+\.?\d*)\s+(.B)/s\s*$', r'\1 \2', s)
|
||||||
|
real_rate = convert_to_bytes(human_rate)
|
||||||
|
return real_rate
|
||||||
|
|
||||||
def get_smart_details(dev):
|
def get_smart_details(dev):
|
||||||
"""Get SMART data for dev if possible, returns dict."""
|
"""Get SMART data for dev if possible, returns dict."""
|
||||||
cmd = 'sudo smartctl --all --json /dev/{}'.format(dev).split()
|
cmd = 'sudo smartctl --all --json /dev/{}'.format(dev).split()
|
||||||
|
|
@ -66,20 +79,23 @@ def menu_diags(*args):
|
||||||
"""Main HW-Diagnostic menu."""
|
"""Main HW-Diagnostic menu."""
|
||||||
diag_modes = [
|
diag_modes = [
|
||||||
{'Name': 'All tests',
|
{'Name': 'All tests',
|
||||||
'Tests': ['Prime95', 'NVMe/SMART', 'badblocks']},
|
'Tests': ['Prime95', 'NVMe/SMART', 'badblocks', 'iobenchmark']},
|
||||||
{'Name': 'Prime95',
|
{'Name': 'Prime95',
|
||||||
'Tests': ['Prime95']},
|
'Tests': ['Prime95']},
|
||||||
{'Name': 'NVMe/SMART & badblocks',
|
{'Name': 'All drive tests',
|
||||||
'Tests': ['NVMe/SMART', 'badblocks']},
|
'Tests': ['NVMe/SMART', 'badblocks', 'iobenchmark']},
|
||||||
{'Name': 'NVMe/SMART',
|
{'Name': 'NVMe/SMART',
|
||||||
'Tests': ['NVMe/SMART']},
|
'Tests': ['NVMe/SMART']},
|
||||||
{'Name': 'badblocks',
|
{'Name': 'badblocks',
|
||||||
'Tests': ['badblocks']},
|
'Tests': ['badblocks']},
|
||||||
|
{'Name': 'I/O Benchmark',
|
||||||
|
'Tests': ['iobenchmark']},
|
||||||
{'Name': 'Quick drive test',
|
{'Name': 'Quick drive test',
|
||||||
'Tests': ['Quick', 'NVMe/SMART']},
|
'Tests': ['Quick', 'NVMe/SMART']},
|
||||||
]
|
]
|
||||||
actions = [
|
actions = [
|
||||||
{'Letter': 'A', 'Name': 'Audio test'},
|
{'Letter': 'A', 'Name': 'Audio test'},
|
||||||
|
{'Letter': 'K', 'Name': 'Keyboard test'},
|
||||||
{'Letter': 'N', 'Name': 'Network test'},
|
{'Letter': 'N', 'Name': 'Network test'},
|
||||||
{'Letter': 'M', 'Name': 'Screen Saver - Matrix', 'CRLF': True},
|
{'Letter': 'M', 'Name': 'Screen Saver - Matrix', 'CRLF': True},
|
||||||
{'Letter': 'P', 'Name': 'Screen Saver - Pipes'},
|
{'Letter': 'P', 'Name': 'Screen Saver - Pipes'},
|
||||||
|
|
@ -119,6 +135,8 @@ def menu_diags(*args):
|
||||||
elif selection == 'A':
|
elif selection == 'A':
|
||||||
run_program(['hw-diags-audio'], check=False, pipe=False)
|
run_program(['hw-diags-audio'], check=False, pipe=False)
|
||||||
pause('Press Enter to return to main menu... ')
|
pause('Press Enter to return to main menu... ')
|
||||||
|
elif selection == 'K':
|
||||||
|
run_program(['xev', '-event', 'keyboard'], check=False, pipe=False)
|
||||||
elif selection == 'N':
|
elif selection == 'N':
|
||||||
run_program(['hw-diags-network'], check=False, pipe=False)
|
run_program(['hw-diags-network'], check=False, pipe=False)
|
||||||
pause('Press Enter to return to main menu... ')
|
pause('Press Enter to return to main menu... ')
|
||||||
|
|
@ -194,6 +212,75 @@ def run_badblocks():
|
||||||
run_program('tmux kill-pane -a'.split(), check=False)
|
run_program('tmux kill-pane -a'.split(), check=False)
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def run_iobenchmark():
|
||||||
|
"""Run a read-only test for all detected disks."""
|
||||||
|
aborted = False
|
||||||
|
clear_screen()
|
||||||
|
print_log('\nStart I/O Benchmark test(s)\n')
|
||||||
|
progress_file = '{}/iobenchmark_progress.out'.format(global_vars['LogDir'])
|
||||||
|
update_progress()
|
||||||
|
|
||||||
|
# Set Window layout and start test
|
||||||
|
run_program('tmux split-window -dhl 15 watch -c -n1 -t cat {}'.format(
|
||||||
|
TESTS['Progress Out']).split())
|
||||||
|
|
||||||
|
# Show disk details
|
||||||
|
for name, dev in sorted(TESTS['iobenchmark']['Devices'].items()):
|
||||||
|
show_disk_details(dev)
|
||||||
|
print_standard(' ')
|
||||||
|
update_progress()
|
||||||
|
|
||||||
|
# Run
|
||||||
|
print_standard('Running benchmark test(s):')
|
||||||
|
for name, dev in sorted(TESTS['iobenchmark']['Devices'].items()):
|
||||||
|
cur_status = TESTS['iobenchmark']['Status'][name]
|
||||||
|
nvme_smart_status = TESTS['NVMe/SMART']['Status'].get(name, None)
|
||||||
|
bb_status = TESTS['badblocks']['Status'].get(name, None)
|
||||||
|
if cur_status == 'Denied':
|
||||||
|
# Skip denied disks
|
||||||
|
continue
|
||||||
|
if nvme_smart_status == 'NS':
|
||||||
|
TESTS['iobenchmark']['Status'][name] = 'Skipped'
|
||||||
|
elif bb_status in ['NS', 'Skipped']:
|
||||||
|
TESTS['iobenchmark']['Status'][name] = 'Skipped'
|
||||||
|
else:
|
||||||
|
# (SMART tests not run or CS/OVERRIDE)
|
||||||
|
# AND (BADBLOCKS tests not run or CS)
|
||||||
|
TESTS['iobenchmark']['Status'][name] = 'Working'
|
||||||
|
update_progress()
|
||||||
|
print_standard(' /dev/{:11} '.format(name+'...'), end='', flush=True)
|
||||||
|
run_program('tmux split-window -dl 5 {} {} {}'.format(
|
||||||
|
'hw-diags-iobenchmark',
|
||||||
|
'/dev/{}'.format(name),
|
||||||
|
progress_file).split())
|
||||||
|
wait_for_process('dd')
|
||||||
|
print_standard('Done', timestamp=False)
|
||||||
|
|
||||||
|
# Check results
|
||||||
|
with open(progress_file, 'r') as f:
|
||||||
|
text = f.read()
|
||||||
|
io_stats = text.replace('\r', '\n').split('\n')
|
||||||
|
try:
|
||||||
|
io_stats = [get_read_rate(s) for s in io_stats]
|
||||||
|
io_stats = [float(s/1048576) for s in io_stats if s]
|
||||||
|
TESTS['iobenchmark']['Results'][name] = 'Read speed: {:3.1f} MB/s (Min: {:3.1f}, Max: {:3.1f})'.format(
|
||||||
|
sum(io_stats) / len(io_stats),
|
||||||
|
min(io_stats),
|
||||||
|
max(io_stats))
|
||||||
|
TESTS['iobenchmark']['Status'][name] = 'CS'
|
||||||
|
except:
|
||||||
|
# Requires manual testing
|
||||||
|
TESTS['iobenchmark']['Status'][name] = 'NS'
|
||||||
|
|
||||||
|
# Move temp file
|
||||||
|
shutil.move(progress_file, '{}/iobenchmark-{}.log'.format(
|
||||||
|
global_vars['LogDir'], name))
|
||||||
|
update_progress()
|
||||||
|
|
||||||
|
# Done
|
||||||
|
run_program('tmux kill-pane -a'.split(), check=False)
|
||||||
|
pass
|
||||||
|
|
||||||
def run_mprime():
|
def run_mprime():
|
||||||
"""Run Prime95 for MPRIME_LIMIT minutes while showing the temps."""
|
"""Run Prime95 for MPRIME_LIMIT minutes while showing the temps."""
|
||||||
aborted = False
|
aborted = False
|
||||||
|
|
@ -386,12 +473,12 @@ def run_tests(tests):
|
||||||
print_log('Starting Hardware Diagnostics')
|
print_log('Starting Hardware Diagnostics')
|
||||||
print_log('\nRunning tests: {}'.format(', '.join(tests)))
|
print_log('\nRunning tests: {}'.format(', '.join(tests)))
|
||||||
# Enable selected tests
|
# Enable selected tests
|
||||||
for t in ['Prime95', 'NVMe/SMART', 'badblocks']:
|
for t in ['Prime95', 'NVMe/SMART', 'badblocks', 'iobenchmark']:
|
||||||
TESTS[t]['Enabled'] = t in tests
|
TESTS[t]['Enabled'] = t in tests
|
||||||
TESTS['NVMe/SMART']['Quick'] = 'Quick' in tests
|
TESTS['NVMe/SMART']['Quick'] = 'Quick' in tests
|
||||||
|
|
||||||
# Initialize
|
# Initialize
|
||||||
if TESTS['NVMe/SMART']['Enabled'] or TESTS['badblocks']['Enabled']:
|
if TESTS['NVMe/SMART']['Enabled'] or TESTS['badblocks']['Enabled'] or TESTS['iobenchmark']['Enabled']:
|
||||||
scan_disks()
|
scan_disks()
|
||||||
update_progress()
|
update_progress()
|
||||||
|
|
||||||
|
|
@ -407,6 +494,8 @@ def run_tests(tests):
|
||||||
run_nvme_smart()
|
run_nvme_smart()
|
||||||
if TESTS['badblocks']['Enabled']:
|
if TESTS['badblocks']['Enabled']:
|
||||||
run_badblocks()
|
run_badblocks()
|
||||||
|
if TESTS['iobenchmark']['Enabled']:
|
||||||
|
run_iobenchmark()
|
||||||
|
|
||||||
# Show results
|
# Show results
|
||||||
show_results()
|
show_results()
|
||||||
|
|
@ -434,13 +523,15 @@ def scan_disks():
|
||||||
devs[d['name']] = {'lsblk': d}
|
devs[d['name']] = {'lsblk': d}
|
||||||
TESTS['NVMe/SMART']['Status'][d['name']] = 'Pending'
|
TESTS['NVMe/SMART']['Status'][d['name']] = 'Pending'
|
||||||
TESTS['badblocks']['Status'][d['name']] = 'Pending'
|
TESTS['badblocks']['Status'][d['name']] = 'Pending'
|
||||||
|
TESTS['iobenchmark']['Status'][d['name']] = 'Pending'
|
||||||
else:
|
else:
|
||||||
# Skip WizardKit devices
|
# Skip WizardKit devices
|
||||||
wk_label = '{}_LINUX'.format(KIT_NAME_SHORT)
|
wk_label = '{}_LINUX'.format(KIT_NAME_SHORT)
|
||||||
if wk_label not in [c.get('label', '') for c in d['children']]:
|
if wk_label not in [c.get('label', '') for c in d.get('children', [])]:
|
||||||
devs[d['name']] = {'lsblk': d}
|
devs[d['name']] = {'lsblk': d}
|
||||||
TESTS['NVMe/SMART']['Status'][d['name']] = 'Pending'
|
TESTS['NVMe/SMART']['Status'][d['name']] = 'Pending'
|
||||||
TESTS['badblocks']['Status'][d['name']] = 'Pending'
|
TESTS['badblocks']['Status'][d['name']] = 'Pending'
|
||||||
|
TESTS['iobenchmark']['Status'][d['name']] = 'Pending'
|
||||||
|
|
||||||
for dev, data in devs.items():
|
for dev, data in devs.items():
|
||||||
# Get SMART attributes
|
# Get SMART attributes
|
||||||
|
|
@ -480,21 +571,23 @@ def scan_disks():
|
||||||
data['SMART Support'] = False
|
data['SMART Support'] = False
|
||||||
|
|
||||||
# Ask for manual overrides if necessary
|
# Ask for manual overrides if necessary
|
||||||
if not data['Quick Health OK'] and TESTS['badblocks']['Enabled']:
|
if not data['Quick Health OK'] and (TESTS['badblocks']['Enabled'] or TESTS['iobenchmark']['Enabled']):
|
||||||
show_disk_details(data)
|
show_disk_details(data)
|
||||||
print_warning("WARNING: Health can't be confirmed for: {}".format(
|
print_warning("WARNING: Health can't be confirmed for: {}".format(
|
||||||
'/dev/{}'.format(dev)))
|
'/dev/{}'.format(dev)))
|
||||||
dev_name = data['lsblk']['name']
|
dev_name = data['lsblk']['name']
|
||||||
print_standard(' ')
|
print_standard(' ')
|
||||||
if ask('Run badblocks for this device anyway?'):
|
if ask('Run tests on this device anyway?'):
|
||||||
TESTS['NVMe/SMART']['Status'][dev_name] = 'OVERRIDE'
|
TESTS['NVMe/SMART']['Status'][dev_name] = 'OVERRIDE'
|
||||||
else:
|
else:
|
||||||
TESTS['NVMe/SMART']['Status'][dev_name] = 'NS'
|
TESTS['NVMe/SMART']['Status'][dev_name] = 'NS'
|
||||||
TESTS['badblocks']['Status'][dev_name] = 'Denied'
|
TESTS['badblocks']['Status'][dev_name] = 'Denied'
|
||||||
|
TESTS['iobenchmark']['Status'][dev_name] = 'Denied'
|
||||||
print_standard(' ') # In case there's more than one "OVERRIDE" disk
|
print_standard(' ') # In case there's more than one "OVERRIDE" disk
|
||||||
|
|
||||||
TESTS['NVMe/SMART']['Devices'] = devs
|
TESTS['NVMe/SMART']['Devices'] = devs
|
||||||
TESTS['badblocks']['Devices'] = devs
|
TESTS['badblocks']['Devices'] = devs
|
||||||
|
TESTS['iobenchmark']['Devices'] = devs
|
||||||
|
|
||||||
def show_disk_details(dev):
|
def show_disk_details(dev):
|
||||||
"""Display disk details."""
|
"""Display disk details."""
|
||||||
|
|
@ -613,8 +706,8 @@ def show_results():
|
||||||
print(' {}'.format(line.strip()))
|
print(' {}'.format(line.strip()))
|
||||||
print_standard(' ')
|
print_standard(' ')
|
||||||
|
|
||||||
# NVMe/SMART / badblocks
|
# NVMe/SMART / badblocks / iobenchmark
|
||||||
if TESTS['NVMe/SMART']['Enabled'] or TESTS['badblocks']['Enabled']:
|
if TESTS['NVMe/SMART']['Enabled'] or TESTS['badblocks']['Enabled'] or TESTS['iobenchmark']['Enabled']:
|
||||||
print_success('Disks:')
|
print_success('Disks:')
|
||||||
for name, dev in sorted(TESTS['NVMe/SMART']['Devices'].items()):
|
for name, dev in sorted(TESTS['NVMe/SMART']['Devices'].items()):
|
||||||
show_disk_details(dev)
|
show_disk_details(dev)
|
||||||
|
|
@ -632,6 +725,12 @@ def show_results():
|
||||||
print_standard(' {}'.format(line))
|
print_standard(' {}'.format(line))
|
||||||
else:
|
else:
|
||||||
print_error(' {}'.format(line))
|
print_error(' {}'.format(line))
|
||||||
|
io_status = TESTS['iobenchmark']['Status'].get(name, None)
|
||||||
|
if (TESTS['iobenchmark']['Enabled']
|
||||||
|
and io_status not in ['Denied', 'OVERRIDE', 'Skipped']):
|
||||||
|
print_info('Benchmark:')
|
||||||
|
result = TESTS['iobenchmark']['Results'].get(name, '')
|
||||||
|
print_standard(' {}'.format(result))
|
||||||
print_standard(' ')
|
print_standard(' ')
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
|
|
@ -673,6 +772,16 @@ def update_progress():
|
||||||
s_color = get_status_color(status),
|
s_color = get_status_color(status),
|
||||||
status = status,
|
status = status,
|
||||||
**COLORS))
|
**COLORS))
|
||||||
|
if TESTS['iobenchmark']['Enabled']:
|
||||||
|
output.append(' ')
|
||||||
|
output.append('{BLUE}I/O Benchmark{CLEAR}'.format(**COLORS))
|
||||||
|
for dev, status in sorted(TESTS['iobenchmark']['Status'].items()):
|
||||||
|
output.append('{dev}{s_color}{status:>{pad}}{CLEAR}'.format(
|
||||||
|
dev = dev,
|
||||||
|
pad = 15-len(dev),
|
||||||
|
s_color = get_status_color(status),
|
||||||
|
status = status,
|
||||||
|
**COLORS))
|
||||||
|
|
||||||
# Add line-endings
|
# Add line-endings
|
||||||
output = ['{}\n'.format(line) for line in output]
|
output = ['{}\n'.format(line) for line in output]
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ def backup_registry():
|
||||||
def get_folder_size(path):
|
def get_folder_size(path):
|
||||||
"""Get (human-readable) size of folder passed, returns str."""
|
"""Get (human-readable) size of folder passed, returns str."""
|
||||||
size = 'Unknown'
|
size = 'Unknown'
|
||||||
cmd = [global_vars['Tools']['Du'], '-nobanner', '-q', path]
|
cmd = [global_vars['Tools']['Du'], '-c', '-nobanner', '-q', path]
|
||||||
try:
|
try:
|
||||||
out = run_program(cmd)
|
out = run_program(cmd)
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
|
|
@ -107,10 +107,13 @@ def get_folder_size(path):
|
||||||
# Failed to get folder size
|
# Failed to get folder size
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
size = out.stdout.decode().splitlines()[4]
|
try:
|
||||||
size = re.sub(r'Size:\s+([\d,]+)\sbytes$', r'\1', size)
|
size = out.stdout.decode().split(',')[-2]
|
||||||
size = size.replace(',', '')
|
except IndexError:
|
||||||
size = human_readable_size(size)
|
# Failed to parse csv data
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
size = human_readable_size(size)
|
||||||
return size
|
return size
|
||||||
|
|
||||||
def get_installed_office():
|
def get_installed_office():
|
||||||
|
|
@ -442,6 +445,11 @@ def show_user_data_summary(indent=8, width=32):
|
||||||
users = [u for u in users if u['Active']]
|
users = [u for u in users if u['Active']]
|
||||||
get_user_folder_sizes(users)
|
get_user_folder_sizes(users)
|
||||||
for user in users:
|
for user in users:
|
||||||
|
if ('Size' not in user['Profile']
|
||||||
|
and not any(user['Shell Folders'])
|
||||||
|
and not any(user['Extra Folders'])):
|
||||||
|
# Skip empty users
|
||||||
|
continue
|
||||||
print_success('{indent}User: {user}'.format(
|
print_success('{indent}User: {user}'.format(
|
||||||
indent = ' '*int(indent/2),
|
indent = ' '*int(indent/2),
|
||||||
user = user['Name']))
|
user = user['Name']))
|
||||||
|
|
|
||||||
18
.bin/Scripts/hw-diags-iobenchmark
Executable file
18
.bin/Scripts/hw-diags-iobenchmark
Executable file
|
|
@ -0,0 +1,18 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
## Wizard Kit: HW Diagnostics - Benchmarks
|
||||||
|
|
||||||
|
function usage {
|
||||||
|
echo "Usage: ${0} device log-file"
|
||||||
|
echo " e.g. ${0} /dev/sda /tmp/tmp.XXXXXXX/benchmarks.log"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Bail early
|
||||||
|
if [ ! -b "${1}" ]; then
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Run Benchmarks
|
||||||
|
echo 3 | sudo tee -a /proc/sys/vm/drop_caches >/dev/null 2>&1
|
||||||
|
sudo dd bs=4M if="${1}" of=/dev/null status=progress 2>&1 | tee -a "${2}"
|
||||||
|
|
@ -27,7 +27,7 @@ set iso_date=%_yyyy%-%_mm%-%_dd%
|
||||||
|
|
||||||
:SetVars
|
:SetVars
|
||||||
set "SETTINGS=%bin%\Scripts\settings\main.py"
|
set "SETTINGS=%bin%\Scripts\settings\main.py"
|
||||||
for /f "tokens=* usebackq" %%f in (`findstr KIT_NAME_SHORT %SETTINGS%`) do (
|
for /f "tokens=* usebackq" %%f in (`findstr KIT_NAME_SHORT "%SETTINGS%"`) do (
|
||||||
set "_v=%%f"
|
set "_v=%%f"
|
||||||
set "_v=!_v:*'=!"
|
set "_v=!_v:*'=!"
|
||||||
set "KIT_NAME_SHORT=!_v:~0,-1!"
|
set "KIT_NAME_SHORT=!_v:~0,-1!"
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
# Wizard Kit: Settings - Sources
|
# Wizard Kit: Settings - Sources
|
||||||
|
|
||||||
SOURCE_URLS = {
|
SOURCE_URLS = {
|
||||||
'AIDA64': 'http://download.aida64.com/aida64engineer595.zip',
|
'AIDA64': 'http://download.aida64.com/aida64engineer597.zip',
|
||||||
'Adobe Reader DC': 'http://ardownload.adobe.com/pub/adobe/reader/win/AcrobatDC/1801120035/AcroRdrDC1801120035_en_US.exe',
|
'Adobe Reader DC': 'http://ardownload.adobe.com/pub/adobe/reader/win/AcrobatDC/1801120035/AcroRdrDC1801120035_en_US.exe',
|
||||||
'AdwCleaner': 'https://toolslib.net/downloads/finish/1-adwcleaner/',
|
'AdwCleaner': 'https://toolslib.net/downloads/finish/1-adwcleaner/',
|
||||||
'Autoruns': 'https://download.sysinternals.com/files/Autoruns.zip',
|
'Autoruns': 'https://download.sysinternals.com/files/Autoruns.zip',
|
||||||
|
|
@ -17,13 +17,13 @@ SOURCE_URLS = {
|
||||||
'FastCopy32': 'http://ftp.vector.co.jp/69/93/2323/FastCopy341.zip',
|
'FastCopy32': 'http://ftp.vector.co.jp/69/93/2323/FastCopy341.zip',
|
||||||
'FastCopy64': 'http://ftp.vector.co.jp/69/93/2323/FastCopy341_x64.zip',
|
'FastCopy64': 'http://ftp.vector.co.jp/69/93/2323/FastCopy341_x64.zip',
|
||||||
'Firefox uBO': 'https://addons.cdn.mozilla.net/user-media/addons/607454/ublock_origin-1.15.10-an+fx.xpi?filehash=sha256%3A30b258803fd6cd988c5ba479f2f6ff5b4e9b40110c81e3421a6867b20ec718a6',
|
'Firefox uBO': 'https://addons.cdn.mozilla.net/user-media/addons/607454/ublock_origin-1.15.10-an+fx.xpi?filehash=sha256%3A30b258803fd6cd988c5ba479f2f6ff5b4e9b40110c81e3421a6867b20ec718a6',
|
||||||
'HWiNFO': 'http://app.oldfoss.com:81/download/HWiNFO/hwi_574.zip',
|
'HWiNFO': 'http://app.oldfoss.com:81/download/HWiNFO/hwi_582.zip',
|
||||||
'HitmanPro32': 'https://dl.surfright.nl/HitmanPro.exe',
|
'HitmanPro32': 'https://dl.surfright.nl/HitmanPro.exe',
|
||||||
'HitmanPro64': 'https://dl.surfright.nl/HitmanPro_x64.exe',
|
'HitmanPro64': 'https://dl.surfright.nl/HitmanPro_x64.exe',
|
||||||
'IOBit_Uninstaller': 'https://portableapps.com/redirect/?a=IObitUninstallerPortable&t=http%3A%2F%2Fdownloads.portableapps.com%2Fportableapps%2Fiobituninstallerportable%2FIObitUninstallerPortable_7.3.0.13.paf.exe',
|
'IOBit_Uninstaller': 'https://portableapps.com/redirect/?a=IObitUninstallerPortable&t=http%3A%2F%2Fdownloads.portableapps.com%2Fportableapps%2Fiobituninstallerportable%2FIObitUninstallerPortable_7.3.0.13.paf.exe',
|
||||||
'Intel SSD Toolbox': r'https://downloadmirror.intel.com/27527/eng/Intel%20SSD%20Toolbox%20-%20v3.5.1.exe',
|
'Intel SSD Toolbox': r'https://downloadmirror.intel.com/27656/eng/Intel%20SSD%20Toolbox%20-%20v3.5.2.exe',
|
||||||
'KVRT': 'http://devbuilds.kaspersky-labs.com/devbuilds/KVRT/latest/full/KVRT.exe',
|
'KVRT': 'http://devbuilds.kaspersky-labs.com/devbuilds/KVRT/latest/full/KVRT.exe',
|
||||||
'NotepadPlusPlus': 'https://notepad-plus-plus.org/repository/7.x/7.5.5/npp.7.5.5.bin.minimalist.7z',
|
'NotepadPlusPlus': 'https://notepad-plus-plus.org/repository/7.x/7.5.6/npp.7.5.6.bin.minimalist.7z',
|
||||||
'Office Deployment Tool 2013': 'https://download.microsoft.com/download/6/2/3/6230F7A2-D8A9-478B-AC5C-57091B632FCF/officedeploymenttool_x86_4827-1000.exe',
|
'Office Deployment Tool 2013': 'https://download.microsoft.com/download/6/2/3/6230F7A2-D8A9-478B-AC5C-57091B632FCF/officedeploymenttool_x86_4827-1000.exe',
|
||||||
'Office Deployment Tool 2016': 'https://download.microsoft.com/download/2/7/A/27AF1BE6-DD20-4CB4-B154-EBAB8A7D4A7E/officedeploymenttool_8529.3600.exe',
|
'Office Deployment Tool 2016': 'https://download.microsoft.com/download/2/7/A/27AF1BE6-DD20-4CB4-B154-EBAB8A7D4A7E/officedeploymenttool_8529.3600.exe',
|
||||||
'ProduKey32': 'http://www.nirsoft.net/utils/produkey.zip',
|
'ProduKey32': 'http://www.nirsoft.net/utils/produkey.zip',
|
||||||
|
|
|
||||||
|
|
@ -72,6 +72,9 @@ if __name__ == '__main__':
|
||||||
else:
|
else:
|
||||||
if not answer_config_browsers:
|
if not answer_config_browsers:
|
||||||
print_warning(' Skipped')
|
print_warning(' Skipped')
|
||||||
|
|
||||||
|
# Run speedtest
|
||||||
|
popen_program(['start', '', 'https://fast.com'], shell=True)
|
||||||
|
|
||||||
# Done
|
# Done
|
||||||
print_standard('\nDone.')
|
print_standard('\nDone.')
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ xset s off
|
||||||
xset -dpms
|
xset -dpms
|
||||||
eval $(ssh-agent)
|
eval $(ssh-agent)
|
||||||
export SSH_AUTH_SOCK
|
export SSH_AUTH_SOCK
|
||||||
compton &
|
compton --backend xrender &
|
||||||
sleep 1s
|
sleep 1s
|
||||||
conky -d
|
conky -d
|
||||||
nm-applet &
|
nm-applet &
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ aic94xx-firmware
|
||||||
bash-pipes
|
bash-pipes
|
||||||
hfsprogs
|
hfsprogs
|
||||||
i3lock-fancy-git
|
i3lock-fancy-git
|
||||||
|
inxi
|
||||||
mprime
|
mprime
|
||||||
nvme-cli
|
nvme-cli
|
||||||
openbox-patched
|
openbox-patched
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,16 @@ curl
|
||||||
dos2unix
|
dos2unix
|
||||||
git
|
git
|
||||||
hwloc
|
hwloc
|
||||||
|
imlib2
|
||||||
lhasa
|
lhasa
|
||||||
libbsd
|
libbsd
|
||||||
libewf
|
libewf
|
||||||
|
librsvg
|
||||||
|
libsm
|
||||||
|
libxcursor
|
||||||
|
libxinerama
|
||||||
|
libxml2
|
||||||
|
libxrandr
|
||||||
ntfs-3g
|
ntfs-3g
|
||||||
openssh
|
openssh
|
||||||
p7zip
|
p7zip
|
||||||
|
|
@ -15,5 +22,6 @@ pango
|
||||||
progsreiserfs
|
progsreiserfs
|
||||||
refind-efi
|
refind-efi
|
||||||
rsync
|
rsync
|
||||||
|
startup-notification
|
||||||
subversion
|
subversion
|
||||||
syslinux
|
syslinux
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,8 @@ mupdf
|
||||||
ncdu
|
ncdu
|
||||||
network-manager-applet
|
network-manager-applet
|
||||||
networkmanager
|
networkmanager
|
||||||
|
noto-fonts
|
||||||
|
noto-fonts-cjk
|
||||||
nvme-cli
|
nvme-cli
|
||||||
oblogout
|
oblogout
|
||||||
openbox-patched
|
openbox-patched
|
||||||
|
|
@ -90,7 +92,6 @@ wimlib
|
||||||
xf86-input-libinput
|
xf86-input-libinput
|
||||||
xf86-video-amdgpu
|
xf86-video-amdgpu
|
||||||
xf86-video-fbdev
|
xf86-video-fbdev
|
||||||
xf86-video-intel
|
|
||||||
xf86-video-nouveau
|
xf86-video-nouveau
|
||||||
xf86-video-vesa
|
xf86-video-vesa
|
||||||
xorg-server
|
xorg-server
|
||||||
|
|
|
||||||
|
|
@ -147,7 +147,7 @@ function run_elevated() {
|
||||||
|
|
||||||
function update_live_env() {
|
function update_live_env() {
|
||||||
hostname="$(echo "${KIT_NAME_SHORT}-linux" | tr "[:upper:]" "[:lower:]")"
|
hostname="$(echo "${KIT_NAME_SHORT}-linux" | tr "[:upper:]" "[:lower:]")"
|
||||||
username="$(echo "${KIT_NAME_SHORT}tech" | tr "[:upper:]" "[:lower:]")"
|
username="tech"
|
||||||
label="${KIT_NAME_SHORT}_LINUX"
|
label="${KIT_NAME_SHORT}_LINUX"
|
||||||
|
|
||||||
# Boot config (legacy)
|
# Boot config (legacy)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue