diff --git a/archlive/airootfs/etc/hostname b/archlive/airootfs/etc/hostname index 2dbe21eb..5e647960 100644 --- a/archlive/airootfs/etc/hostname +++ b/archlive/airootfs/etc/hostname @@ -1 +1 @@ -archiso +arch-wk diff --git a/archlive/airootfs/etc/lightdm/lightdm-gtk-greeter.conf b/archlive/airootfs/etc/lightdm/lightdm-gtk-greeter.conf new file mode 100644 index 00000000..ac30a13a --- /dev/null +++ b/archlive/airootfs/etc/lightdm/lightdm-gtk-greeter.conf @@ -0,0 +1,64 @@ +# LightDM GTK+ Configuration +# Available configuration options listed below. +# +# Appearance: +# theme-name = GTK+ theme to use +# icon-theme-name = Icon theme to use +# background = Background file to use, either an image path or a color (e.g. #772953) +# user-background = false|true ("true" by default) Display user background (if available) +# transition-duration = Length of time (in milliseconds) to transition between background images ("500" by default) +# transition-type = ease-in-out|linear|none ("ease-in-out" by default) +# +# Fonts: +# font-name = Font to use +# xft-antialias = false|true Whether to antialias Xft fonts +# xft-dpi = Resolution for Xft in dots per inch (e.g. 96) +# xft-hintstyle = none|slight|medium|hintfull What degree of hinting to use +# xft-rgba = none|rgb|bgr|vrgb|vbgr Type of subpixel antialiasing +# +# Login window: +# active-monitor = Monitor to display greeter window (name or number). Use #cursor value to display greeter at monitor with cursor. Can be a semicolon separated list +# position = x y ("50% 50%" by default) Login window position +# default-user-image = Image used as default user icon, path or #icon-name +# hide-user-image = false|true ("false" by default) +# +# Panel: +# panel-position = top|bottom ("top" by default) +# clock-format = strftime-format string, e.g. %H:%M +# indicators = semi-colon ";" separated list of allowed indicator modules. Built-in indicators include "~a11y", "~language", "~session", "~power", "~clock", "~host", "~spacer". Unity indicators can be represented by short name (e.g. "sound", "power"), service file name, or absolute path +# +# Accessibility: +# a11y-states = states of accessibility features: "name" - save state on exit, "-name" - disabled at start (default value for unlisted), "+name" - enabled at start. Allowed names: contrast, font, keyboard, reader. +# keyboard = command to launch on-screen keyboard (e.g. "onboard") +# keyboard-position = x y[;width height] ("50%,center -0;50% 25%" by default) Works only for "onboard" +# reader = command to launch screen reader (e.g. "orca") +# +# Security: +# allow-debugging = false|true ("false" by default) +# screensaver-timeout = Timeout (in seconds) until the screen blanks when the greeter is called as lockscreen +# +# Template for per-monitor configuration: +# [monitor: name] +# background = overrides default value +# user-background = overrides default value +# laptop = false|true ("false" by default) Marks monitor as laptop display +# transition-duration = overrides default value +# +[greeter] +background=/usr/share/wallpaper/wallhaven-105688.png +#user-background= +theme-name=Numix +icon-theme-name=Numix-Circle-Light +font-name=Noto-Sans +#xft-antialias= +#xft-dpi= +#xft-hintstyle= +#xft-rgba= +hide-user-image=true +#indicators= +clock-format=%H:%M +#keyboard= +#reader= +#position=50%,center 100%,bottom +position=5% 45%,center +#screensaver-timeout= diff --git a/archlive/airootfs/etc/lightdm/lightdm.conf b/archlive/airootfs/etc/lightdm/lightdm.conf new file mode 100644 index 00000000..2281dff8 --- /dev/null +++ b/archlive/airootfs/etc/lightdm/lightdm.conf @@ -0,0 +1,163 @@ +# +# General configuration +# +# start-default-seat = True to always start one seat if none are defined in the configuration +# greeter-user = User to run greeter as +# minimum-display-number = Minimum display number to use for X servers +# minimum-vt = First VT to run displays on +# lock-memory = True to prevent memory from being paged to disk +# user-authority-in-system-dir = True if session authority should be in the system location +# guest-account-script = Script to be run to setup guest account +# logind-check-graphical = True to on start seats that are marked as graphical by logind +# log-directory = Directory to log information to +# run-directory = Directory to put running state in +# cache-directory = Directory to cache to +# sessions-directory = Directory to find sessions +# remote-sessions-directory = Directory to find remote sessions +# greeters-directory = Directory to find greeters +# backup-logs = True to move add a .old suffix to old log files when opening new ones +# +[LightDM] +#start-default-seat=true +#greeter-user=lightdm +#minimum-display-number=0 +#minimum-vt=7 # Setting this to a value < 7 implies security issues, see FS#46799 +#lock-memory=true +#user-authority-in-system-dir=false +#guest-account-script=guest-account +#logind-check-graphical=false +#log-directory=/var/log/lightdm +run-directory=/run/lightdm +#cache-directory=/var/cache/lightdm +#sessions-directory=/usr/share/lightdm/sessions:/usr/share/xsessions:/usr/share/wayland-sessions +#remote-sessions-directory=/usr/share/lightdm/remote-sessions +#greeters-directory=/usr/share/lightdm/greeters:/usr/share/xgreeters +#backup-logs=true + +# +# Seat configuration +# +# Seat configuration is matched against the seat name glob in the section, for example: +# [Seat:*] matches all seats and is applied first. +# [Seat:seat0] matches the seat named "seat0". +# [Seat:seat-thin-client*] matches all seats that have names that start with "seat-thin-client". +# +# type = Seat type (xlocal, xremote, unity) +# pam-service = PAM service to use for login +# pam-autologin-service = PAM service to use for autologin +# pam-greeter-service = PAM service to use for greeters +# xserver-command = X server command to run (can also contain arguments e.g. X -special-option) +# xmir-command = Xmir server command to run (can also contain arguments e.g. Xmir -special-option) +# xserver-config = Config file to pass to X server +# xserver-layout = Layout to pass to X server +# xserver-allow-tcp = True if TCP/IP connections are allowed to this X server +# xserver-share = True if the X server is shared for both greeter and session +# xserver-hostname = Hostname of X server (only for type=xremote) +# xserver-display-number = Display number of X server (only for type=xremote) +# xdmcp-manager = XDMCP manager to connect to (implies xserver-allow-tcp=true) +# xdmcp-port = XDMCP UDP/IP port to communicate on +# xdmcp-key = Authentication key to use for XDM-AUTHENTICATION-1 (stored in keys.conf) +# unity-compositor-command = Unity compositor command to run (can also contain arguments e.g. unity-system-compositor -special-option) +# unity-compositor-timeout = Number of seconds to wait for compositor to start +# greeter-session = Session to load for greeter +# greeter-hide-users = True to hide the user list +# greeter-allow-guest = True if the greeter should show a guest login option +# greeter-show-manual-login = True if the greeter should offer a manual login option +# greeter-show-remote-login = True if the greeter should offer a remote login option +# user-session = Session to load for users +# allow-user-switching = True if allowed to switch users +# allow-guest = True if guest login is allowed +# guest-session = Session to load for guests (overrides user-session) +# session-wrapper = Wrapper script to run session with +# greeter-wrapper = Wrapper script to run greeter with +# guest-wrapper = Wrapper script to run guest sessions with +# display-setup-script = Script to run when starting a greeter session (runs as root) +# display-stopped-script = Script to run after stopping the display server (runs as root) +# greeter-setup-script = Script to run when starting a greeter (runs as root) +# session-setup-script = Script to run when starting a user session (runs as root) +# session-cleanup-script = Script to run when quitting a user session (runs as root) +# autologin-guest = True to log in as guest by default +# autologin-user = User to log in with by default (overrides autologin-guest) +# autologin-user-timeout = Number of seconds to wait before loading default user +# autologin-session = Session to load for automatic login (overrides user-session) +# autologin-in-background = True if autologin session should not be immediately activated +# exit-on-failure = True if the daemon should exit if this seat fails +# +[Seat:*] +#type=xlocal +pam-service=lightdm +pam-autologin-service=lightdm-autologin +#pam-greeter-service=lightdm-greeter +#xserver-command=X +#xmir-command=Xmir +#xserver-config= +#xserver-layout= +#xserver-allow-tcp=false +#xserver-share=true +#xserver-hostname= +#xserver-display-number= +#xdmcp-manager= +#xdmcp-port=177 +#xdmcp-key= +#unity-compositor-command=unity-system-compositor +#unity-compositor-timeout=60 +#greeter-session=example-gtk-gnome +#greeter-hide-users=false +#greeter-allow-guest=true +#greeter-show-manual-login=false +#greeter-show-remote-login=true +#user-session=default +#allow-user-switching=true +#allow-guest=true +#guest-session= +session-wrapper=/etc/lightdm/Xsession +#greeter-wrapper= +#guest-wrapper= +#display-setup-script= +#display-stopped-script= +#greeter-setup-script= +#session-setup-script= +#session-cleanup-script= +#autologin-guest=false +autologin-user=wktech +autologin-user-timeout=0 +#autologin-in-background=false +#autologin-session= +#exit-on-failure=false + +# +# XDMCP Server configuration +# +# enabled = True if XDMCP connections should be allowed +# port = UDP/IP port to listen for connections on +# listen-address = Host/address to listen for XDMCP connections (use all addresses if not present) +# key = Authentication key to use for XDM-AUTHENTICATION-1 or blank to not use authentication (stored in keys.conf) +# +# The authentication key is a 56 bit DES key specified in hex as 0xnnnnnnnnnnnnnn. Alternatively +# it can be a word and the first 7 characters are used as the key. +# +[XDMCPServer] +#enabled=false +#port=177 +#listen-address= +#key= + +# +# VNC Server configuration +# +# enabled = True if VNC connections should be allowed +# command = Command to run Xvnc server with +# port = TCP/IP port to listen for connections on +# listen-address = Host/address to listen for VNC connections (use all addresses if not present) +# width = Width of display to use +# height = Height of display to use +# depth = Color depth of display to use +# +[VNCServer] +#enabled=false +#command=Xvnc +#port=5900 +#listen-address= +#width=1024 +#height=768 +#depth=8 diff --git a/archlive/airootfs/etc/skel/.Xresources b/archlive/airootfs/etc/skel/.Xresources new file mode 100644 index 00000000..5a39a77c --- /dev/null +++ b/archlive/airootfs/etc/skel/.Xresources @@ -0,0 +1,35 @@ +URxvt*font: xft:Inconsolata:size=11 + +URxvt*geometry: 128x32+24+24 + +URxvt*scrollBar_right: True +URxvt*scrollstyle: plain + +URxvt*shading: 30 +URxvt*transparent: true + +! Base16 Isotope +! Scheme: Jan T. Sott +!! Modified by 2Shirt + +*.foreground: #d0d0d0 +*.background: #000000 +*.cursorColor: #d0d0d0 + +*.color0: #000000 +*.color1: #ff0000 +*.color2: #33ff00 +*.color3: #ffd000 +*.color4: #0066ff +*.color5: #cc00ff +*.color6: #00ffff +*.color7: #d0d0d0 + +*.color8: #808080 +*.color9: #ff9900 +*.color10: #404040 +*.color11: #606060 +*.color12: #c0c0c0 +*.color13: #e0e0e0 +*.color14: #3300ff +*.color15: #ffffff diff --git a/archlive/airootfs/etc/skel/.bash_logout b/archlive/airootfs/etc/skel/.bash_logout new file mode 100644 index 00000000..0e4e4f18 --- /dev/null +++ b/archlive/airootfs/etc/skel/.bash_logout @@ -0,0 +1,3 @@ +# +# ~/.bash_logout +# diff --git a/archlive/airootfs/etc/skel/.bash_profile b/archlive/airootfs/etc/skel/.bash_profile new file mode 100644 index 00000000..5545f007 --- /dev/null +++ b/archlive/airootfs/etc/skel/.bash_profile @@ -0,0 +1,5 @@ +# +# ~/.bash_profile +# + +[[ -f ~/.bashrc ]] && . ~/.bashrc diff --git a/archlive/airootfs/etc/skel/.bashrc b/archlive/airootfs/etc/skel/.bashrc new file mode 100644 index 00000000..a355b0cd --- /dev/null +++ b/archlive/airootfs/etc/skel/.bashrc @@ -0,0 +1,9 @@ +# +# ~/.bashrc +# + +# If not running interactively, don't do anything +[[ $- != *i* ]] && return + +alias ls='ls --color=auto' +PS1='[\u@\h \W]\$ ' diff --git a/archlive/airootfs/etc/skel/.config/autostart/Conky.desktop b/archlive/airootfs/etc/skel/.config/autostart/Conky.desktop new file mode 100644 index 00000000..56eb2051 --- /dev/null +++ b/archlive/airootfs/etc/skel/.config/autostart/Conky.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=0.9.4 +Type=Application +Name=Conky +Comment=Conky +Exec=/home/wktech/.conky_start +OnlyShowIn=XFCE; +StartupNotify=false +Terminal=false +Hidden=false + diff --git a/archlive/airootfs/etc/skel/.config/autostart/urxvt-default-res.desktop b/archlive/airootfs/etc/skel/.config/autostart/urxvt-default-res.desktop new file mode 100644 index 00000000..7ee94394 --- /dev/null +++ b/archlive/airootfs/etc/skel/.config/autostart/urxvt-default-res.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=0.9.4 +Type=Application +Name=urxvt-Resolution +Comment=urxvt-Resolution +Exec=/home/wktech/.urxvt_default_res +OnlyShowIn=XFCE; +StartupNotify=false +Terminal=false +Hidden=false + diff --git a/archlive/airootfs/etc/skel/.config/autostart/wifi.desktop b/archlive/airootfs/etc/skel/.config/autostart/wifi.desktop new file mode 100644 index 00000000..2459b12d --- /dev/null +++ b/archlive/airootfs/etc/skel/.config/autostart/wifi.desktop @@ -0,0 +1,12 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=0.9.4 +Type=Application +Name=WiFi +Comment=WiFi +Exec=/home/wktech/.wifi +OnlyShowIn=XFCE; +StartupNotify=false +Terminal=false +Hidden=false + diff --git a/archlive/airootfs/etc/skel/.config/xfce4/helpers.rc b/archlive/airootfs/etc/skel/.config/xfce4/helpers.rc index 149d8b72..889c575f 100644 --- a/archlive/airootfs/etc/skel/.config/xfce4/helpers.rc +++ b/archlive/airootfs/etc/skel/.config/xfce4/helpers.rc @@ -1,2 +1,3 @@ -WebBrowser=chromium +WebBrowser=midori +TerminalEmulator=urxvt diff --git a/archlive/airootfs/etc/skel/.config/xfce4/panel/whiskermenu-18.rc b/archlive/airootfs/etc/skel/.config/xfce4/panel/whiskermenu-18.rc index efcae705..00f15a7d 100644 --- a/archlive/airootfs/etc/skel/.config/xfce4/panel/whiskermenu-18.rc +++ b/archlive/airootfs/etc/skel/.config/xfce4/panel/whiskermenu-18.rc @@ -1,5 +1,5 @@ -favorites=exo-file-manager.desktop,gparted.desktop,gsmartcontrol.desktop,truecrypt.desktop,exo-web-browser.desktop -recent=xfce4-settings-editor.desktop,xfce-session-settings.desktop,xfce-workspaces-settings.desktop,gsmartcontrol.desktop,gparted.desktop,gksu-properties.desktop,xfce-keyboard-settings.desktop,xfce-backdrop-settings.desktop,truecrypt.desktop,exo-web-browser.desktop +favorites=exo-file-manager.desktop,hwdiags.desktop,gparted.desktop,gsmartcontrol.desktop,truecrypt.desktop,speedtest.desktop,exo-web-browser.desktop +recent=exo-web-browser.desktop button-title=Applications button-icon=desktop-environment-xfce button-single-row=false diff --git a/archlive/airootfs/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml b/archlive/airootfs/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml index 91600493..0337f6f7 100644 --- a/archlive/airootfs/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml +++ b/archlive/airootfs/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml @@ -7,7 +7,7 @@ - + diff --git a/archlive/airootfs/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml b/archlive/airootfs/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml index 76dc6bac..f52b0e10 100644 --- a/archlive/airootfs/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml +++ b/archlive/airootfs/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml @@ -46,7 +46,10 @@ - + + + + diff --git a/archlive/airootfs/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml b/archlive/airootfs/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml index dc424b47..bd7b830d 100644 --- a/archlive/airootfs/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml +++ b/archlive/airootfs/etc/skel/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml @@ -13,8 +13,9 @@ - + + @@ -40,7 +41,13 @@ - + + + + + + + diff --git a/archlive/airootfs/etc/skel/.conky_start b/archlive/airootfs/etc/skel/.conky_start index 95add4d0..811f7722 100644 --- a/archlive/airootfs/etc/skel/.conky_start +++ b/archlive/airootfs/etc/skel/.conky_start @@ -1,3 +1,3 @@ #!/bin/bash -sleep 2s && conky +sleep 3s && conky diff --git a/archlive/airootfs/etc/skel/.conkyrc b/archlive/airootfs/etc/skel/.conkyrc index 796c3aee..9dafc71e 100644 --- a/archlive/airootfs/etc/skel/.conkyrc +++ b/archlive/airootfs/etc/skel/.conkyrc @@ -152,10 +152,12 @@ Down: ${downspeed}${goto 115}Up:${alignr}${upspeed} ${alignc}S H O R T C U T K E Y S ${hr} -[Win] + d${alignr}HW Diagnostics -[Win] + f${alignr}File Manager -[Win] + h${alignr}Task Manager -[Win] + r${alignr}Run Dialog -[Win] + t${alignr}Terminal -[Win] + w${alignr}Web Browser -[Win] + x${alignr}Logout +[Super] + d${alignr}HW Diagnostics +[Super] + f${alignr}File Manager +[Super] + h${alignr}Task Manager +[Super] + m${alignr}Mount Volumes +[Super] + r${alignr}Run Dialog +[Super] + s${alignr}SMART Check +[Super] + t${alignr}Terminal +[Super] + w${alignr}Web Browser +[Super] + x${alignr}Logout diff --git a/archlive/airootfs/etc/skel/.dmrc b/archlive/airootfs/etc/skel/.dmrc new file mode 100644 index 00000000..9cd11917 --- /dev/null +++ b/archlive/airootfs/etc/skel/.dmrc @@ -0,0 +1,3 @@ +[Desktop] +Language=en_US.utf8 +Session=xfce diff --git a/archlive/airootfs/etc/skel/.local/share/keyrings/login.keyring b/archlive/airootfs/etc/skel/.local/share/keyrings/login.keyring new file mode 100644 index 00000000..f312a94a Binary files /dev/null and b/archlive/airootfs/etc/skel/.local/share/keyrings/login.keyring differ diff --git a/archlive/airootfs/etc/skel/.local/share/keyrings/user.keystore b/archlive/airootfs/etc/skel/.local/share/keyrings/user.keystore new file mode 100644 index 00000000..2d8eee8d Binary files /dev/null and b/archlive/airootfs/etc/skel/.local/share/keyrings/user.keystore differ diff --git a/archlive/airootfs/etc/skel/.tmux.conf b/archlive/airootfs/etc/skel/.tmux.conf new file mode 100644 index 00000000..cdf5a3f2 --- /dev/null +++ b/archlive/airootfs/etc/skel/.tmux.conf @@ -0,0 +1 @@ +set -g status off diff --git a/archlive/airootfs/etc/skel/.urxvt_default_res b/archlive/airootfs/etc/skel/.urxvt_default_res new file mode 100644 index 00000000..92923ebd --- /dev/null +++ b/archlive/airootfs/etc/skel/.urxvt_default_res @@ -0,0 +1,11 @@ +#!/bin/bash + +XWIDTH="$(xrandr 2>/dev/null | grep '*' | sed -r 's/^\s+([0-9]+)x.*/\1/')" +XHEIGHT="$(xrandr 2>/dev/null | grep '*' | sed -r 's/^\s+[0-9]+x([0-9]+).*/\1/')" + +WIDTH="$(echo "${XWIDTH}*96/1024" | bc)" +HEIGHT="$(echo "${XHEIGHT}*32/768" | bc)" + +sed -i -r "s/96x32/${WIDTH}x${HEIGHT}/" ~/.Xresources +xrdb -merge ~/.Xresources + diff --git a/archlive/airootfs/etc/skel/.wifi b/archlive/airootfs/etc/skel/.wifi new file mode 100644 index 00000000..859c57b5 --- /dev/null +++ b/archlive/airootfs/etc/skel/.wifi @@ -0,0 +1,5 @@ +#!/bin/bash + +sleep 1s +nmcli dev wifi con "SomeWiFi" password "Abracadabra" + diff --git a/archlive/airootfs/etc/skel/.xinitrc b/archlive/airootfs/etc/skel/.xinitrc index 5958cc9f..f7420078 100644 --- a/archlive/airootfs/etc/skel/.xinitrc +++ b/archlive/airootfs/etc/skel/.xinitrc @@ -6,35 +6,15 @@ sysresources=/etc/X11/xinit/.Xresources sysmodmap=/etc/X11/xinit/.Xmodmap # merge in defaults and keymaps - if [ -f $sysresources ]; then - - - - - - - xrdb -merge $sysresources - fi - if [ -f $sysmodmap ]; then xmodmap $sysmodmap fi - if [ -f "$userresources" ]; then - - - - - - - xrdb -merge "$userresources" - fi - if [ -f "$usermodmap" ]; then xmodmap "$usermodmap" fi @@ -43,8 +23,5 @@ fi eval $(/usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh) export SSH_AUTH_SOCK -# Start Openbox -#exec openbox-session - # Start Xfce4 exec startxfce4 diff --git a/archlive/airootfs/etc/skel/.zlogin b/archlive/airootfs/etc/skel/.zlogin deleted file mode 100644 index 70b70593..00000000 --- a/archlive/airootfs/etc/skel/.zlogin +++ /dev/null @@ -1 +0,0 @@ -[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx diff --git a/archlive/airootfs/etc/skel/.zsh_aliases b/archlive/airootfs/etc/skel/.zsh_aliases index b7dc9bbc..417a3e84 100644 --- a/archlive/airootfs/etc/skel/.zsh_aliases +++ b/archlive/airootfs/etc/skel/.zsh_aliases @@ -6,18 +6,19 @@ alias 7z5='7z a -t7z -mx=5' alias 7z7='7z a -t7z -mx=7' alias 7z9='7z a -t7z -mx=9' alias du='du -sch --apparent-size' +alias fidentify="/usr/bin/fidentify-wip$(getconf LONG_BIT)" alias fix-perms='find -type d -exec chmod 755 "{}" \; && find -type f -exec chmod 644 "{}" \;' alias less='less -S' alias mkdir='mkdir -p' alias mount='sudo mount' alias mv='mv -nv' -alias photorec='sudo photorec' -alias q='clear && ls -lh' -alias q1='clear && ls -1' -alias q1a='clear && ls -1A' -alias qa='clear && ls -lAh' -alias qs='clear && ls' -alias qsa='clear && ls -A' +alias photorec="sudo /usr/bin/photorec-wip$(getconf LONG_BIT)" +alias q1='clear && sudo ls -1' +alias q1a='clear && sudo ls -1A' +alias q='clear && sudo ls -lh' +alias qa='clear && sudo ls -lAh' +alias qs='clear && sudo ls' +alias qsa='clear && sudo ls -A' alias rm='rm -v' alias rmdirs='find -depth -mindepth 1 -type d -exec rmdir "{}" --ignore-fail-on-non-empty \;' alias rs='rsync -avhPS --stats --exclude-from="$HOME/.rsync_exclusions"' @@ -26,6 +27,6 @@ alias sdu='sudo du -sch --apparent-size' alias srmdirs='find -depth -mindepth 1 -type d -exec sudo rmdir "{}" --ignore-fail-on-non-empty \;' alias srs='sudo rsync -avhPS --stats --exclude-from="$HOME/.rsync_exclusions"' alias srsz='sudo rsync -avhzPS --stats --exclude-from="$HOME/.rsync_exclusions"' -alias testdisk='sudo testdisk' +alias testdisk="sudo /usr/bin/testdisk-wip$(getconf LONG_BIT)" alias umount='sudo umount' alias unmount='sudo umount' diff --git a/archlive/airootfs/etc/skel/.zshrc b/archlive/airootfs/etc/skel/.zshrc index 1779863e..d4a35296 100644 --- a/archlive/airootfs/etc/skel/.zshrc +++ b/archlive/airootfs/etc/skel/.zshrc @@ -15,7 +15,7 @@ ZSH_THEME="lean" # HYPHEN_INSENSITIVE="true" # Uncomment the following line to disable bi-weekly auto-update checks. -# DISABLE_AUTO_UPDATE="true" +DISABLE_AUTO_UPDATE="true" # Uncomment the following line to change how often to auto-update (in days). # export UPDATE_ZSH_DAYS=13 diff --git a/archlive/airootfs/etc/systemd/system/dbus-org.freedesktop.NetworkManager.service b/archlive/airootfs/etc/systemd/system/dbus-org.freedesktop.NetworkManager.service new file mode 100644 index 00000000..e874a9b3 --- /dev/null +++ b/archlive/airootfs/etc/systemd/system/dbus-org.freedesktop.NetworkManager.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/NetworkManager.service \ No newline at end of file diff --git a/archlive/airootfs/etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service b/archlive/airootfs/etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service new file mode 100644 index 00000000..a7e5cd4e --- /dev/null +++ b/archlive/airootfs/etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/NetworkManager-dispatcher.service \ No newline at end of file diff --git a/archlive/airootfs/etc/systemd/system/display-manager.service b/archlive/airootfs/etc/systemd/system/display-manager.service new file mode 100644 index 00000000..5595cea3 --- /dev/null +++ b/archlive/airootfs/etc/systemd/system/display-manager.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/lightdm.service \ No newline at end of file diff --git a/archlive/airootfs/etc/systemd/system/getty.target.wants/getty@tty1.service b/archlive/airootfs/etc/systemd/system/getty.target.wants/getty@tty1.service new file mode 100644 index 00000000..7bfe0808 --- /dev/null +++ b/archlive/airootfs/etc/systemd/system/getty.target.wants/getty@tty1.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/getty@.service \ No newline at end of file diff --git a/archlive/airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service b/archlive/airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service new file mode 100644 index 00000000..e874a9b3 --- /dev/null +++ b/archlive/airootfs/etc/systemd/system/multi-user.target.wants/NetworkManager.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/NetworkManager.service \ No newline at end of file diff --git a/archlive/airootfs/etc/systemd/system/multi-user.target.wants/remote-fs.target b/archlive/airootfs/etc/systemd/system/multi-user.target.wants/remote-fs.target new file mode 100644 index 00000000..2bc8b1cc --- /dev/null +++ b/archlive/airootfs/etc/systemd/system/multi-user.target.wants/remote-fs.target @@ -0,0 +1 @@ +/usr/lib/systemd/system/remote-fs.target \ No newline at end of file diff --git a/archlive/airootfs/etc/udevil/udevil.conf b/archlive/airootfs/etc/udevil/udevil.conf new file mode 100644 index 00000000..92f37043 --- /dev/null +++ b/archlive/airootfs/etc/udevil/udevil.conf @@ -0,0 +1,336 @@ +############################################################################## +# +# udevil configuration file /etc/udevil/udevil.conf +# +# This file controls what devices, networks, and files users may mount and +# unmount via udevil (set suid). +# +# IMPORTANT: IT IS POSSIBLE TO CREATE SERIOUS SECURITY PROBLEMS IF THIS FILE +# IS MISCONFIGURED - EDIT WITH CARE +# +# Note: For greater control for specific users, including root, copy this +# file to /etc/udevil/udevil-user-USERNAME.conf replacing USERNAME with the +# desired username (eg /etc/udevil/udevil-user-jim.conf). +# +# Format: +# OPTION = VALUE[, VALUE, ...] +# +# DO NOT USE QUOTES except literally +# Lines beginning with # are ignored +# +############################################################################## + + +# To log all uses of udevil, set log_file to a file path: +# log_file = /var/log/udevil.log + +# Approximate number of days to retain log entries (0=forever, max=60): +log_keep_days = 10 + + +# allowed_types determines what fstypes can be passed by a user to the u/mount +# program, what device filesystems may be un/mounted implicitly, and what +# network filesystems may be un/mounted. +# It may also include the 'file' keyword, indicating that the user is allowed +# to mount files (eg an ISO file). The $KNOWN_FILESYSTEMS variable may +# be included to include common local filesystems as well as those listed in +# /etc/filesystems and /proc/filesystems. +# allowed_types_USERNAME, if present, is used to override allowed_types for +# the specific user 'USERNAME'. For example, to allow user 'jim' to mount +# only vfat filesystems, add: +# allowed_types_jim = vfat +# Setting allowed_types = * does NOT allow all types, as this is a security +# risk, but does allow all recognized types. +# allowed_types = $KNOWN_FILESYSTEMS, file, cifs, smbfs, nfs, curlftpfs, ftpfs, sshfs, davfs, tmpfs, ramfs +allowed_types = $KNOWN_FILESYSTEMS, file, cifs, smbfs, nfs, hfsplus + + +# allowed_users is a list of users permitted to mount and unmount with udevil. +# Wildcards (* or ?) may be used in the usernames. To allow all users, +# specify "allowed_users=*". UIDs may be included using the form UID=1000. +# For example: allowed_users = carl, UID=1000, pre* +# Also note that permission to execute udevil may be limited to users belonging +# to the group that owns /usr/bin/udevil, such as 'plugdev' or 'storage', +# depending on installation. +# allowed_users_FSTYPE, if present, is used to override allowed_users when +# mounting or unmounting a specific fstype (eg nfs, ext3, file). +# Note that when mounting a file, fstype will always be 'file' regardless of +# the internal fstype of the file. +# For example, to allow only user 'bob' to mount nfs shares, add: +# allowed_users_nfs = bob +# The root user is NOT automatically allowed to use udevil in some cases unless +# listed here (except for unmounting anything or mounting fstab devices). +allowed_users = * + + +# allowed_groups is a list of groups permitted to mount and unmount with +# udevil. The user MUST belong to at least one of these groups. Wildcards +# or GIDs may NOT be used in group names, but a single * may be used to allow +# all groups. +# Also note that permission to execute udevil may be limited to users belonging +# to the group that owns /usr/bin/udevil, such as 'plugdev' or 'storage', +# depending on installation. +# allowed_groups_FSTYPE, if present, is used to override allowed_groups when +# mounting or unmounting a specific fstype (eg nfs, ext3, file). For example, +# to allow only members of the 'network' group to mount smb and nfs shares, +# use both of these lines: +# allowed_groups_smbfs = network +# allowed_groups_nfs = network +# The root user is NOT automatically allowed to use udevil in some cases unless +# listed here (except for unmounting anything or mounting fstab devices). +allowed_groups = * + + +# allowed_media_dirs specifies the media directories in which user mount points +# may be located. The first directory which exists and does not contain a +# wildcard will be used as the default media directory (normally /media or +# /media/$USER). +# The $USER variable, if included, will be replaced with the username of the +# user running udevil. Wildcards may also be used in any directory EXCEPT the +# default. Wildcards will not match a /, except a /** suffix for recursion. +# allowed_media_dirs_FSTYPE, if present, is used to override allowed_media_dirs +# when mounting or unmounting a specific fstype (eg ext2, nfs). For example, +# to cause /media/network to be used as the default media directory for +# nfs and ftpfs mounts, use these two lines: +# allowed_media_dirs_nfs = /media/network, /media, /media/$USER +# allowed_media_dirs_ftpfs = /media/network, /media, /media/$USER +# NOTE: If you want only the user who mounted a device to have access to it +# and be allowed to unmount it, specify /media/$USER as the first +# allowed media directory (only /media/$USER is created on demand). +# IMPORTANT: If an allowed file is mounted to a media directory, the user may +# be permitted to unmount its associated loop device even though internal. +# INCLUDING /MNT HERE IS NOT RECOMMENDED. ALL ALLOWED MEDIA DIRECTORIES +# SHOULD BE OWNED AND WRITABLE ONLY BY ROOT. +allowed_media_dirs = /media, /media/$USER, /run/media/$USER + + +# allowed_devices is the first criteria for what block devices users may mount +# or unmount. If a device is not listed in allowed_devices, it cannot be +# un/mounted (unless in fstab). However, even if a device is listed, other +# factors may prevent its use. For example, access to system internal devices +# will be denied to normal users even if they are included in allowed_devices. +# allowed_devices_FSTYPE, if present, is used to override allowed_devices when +# mounting or unmounting a specific fstype (eg ext3, ntfs). For example, to +# prevent all block devices containing an ext4 filesystem from being +# un/mounted use: +# allowed_devices_ext4 = +# Note: Wildcards may be used, but a wildcard will never match a /, except +# for "allowed_devices=*" which allows any device. The recommended setting is +# allowed_devices = /dev/* +# WARNING: ALLOWING USERS TO MOUNT DEVICES OUTSIDE OF /dev CAN CAUSE SERIOUS +# SECURITY PROBLEMS. DO NOT ALLOW DEVICES IN /dev/shm +allowed_devices = /dev/* + + +# allowed_internal_devices causes udevil to treat any listed block devices as +# removable, thus allowing normal users to un/mount them (providing they are +# also listed in allowed_devices). +# allowed_internal_devices_FSTYPE, if present, is used to override +# allowed_internal_devices when mounting or unmounting a specific fstype +# (eg ext3, ntfs). For example, to allow block devices containing a vfat +# filesystem to be un/mounted even if they are system internal devices, use: +# allowed_internal_devices_vfat = /dev/sdb* +# Some removable esata drives look like internal drives to udevil. To avoid +# this problem, they can be treated as removable with this setting. +# WARNING: SETTING A SYSTEM DEVICE HERE CAN CAUSE SERIOUS SECURITY PROBLEMS. +allowed_internal_devices = /dev/* + + +# allowed_internal_uuids and allowed_internal_uuids_FSTYPE work similarly to +# allowed_internal_devices, except that UUIDs are specified instead of devices. +# For example, to allow un/mounting of an internal filesystem based on UUID: +# allowed_internal_uuids = cc0c4489-8def-1e5b-a304-ab87c3cb626c0 +# WARNING: SETTING A SYSTEM DEVICE HERE CAN CAUSE SERIOUS SECURITY PROBLEMS. +# allowed_internal_uuids = + + +# forbidden_devices is used to prevent block devices from being un/mounted +# even if other settings would allow them (except devices in fstab). +# forbidden_devices_FSTYPE, if present, is used to override +# forbidden_devices when mounting or unmounting a specific fstype +# (eg ext3, ntfs). For example, to prevent device /dev/sdd1 from being +# mounted when it contains an ntfs filesystem, use: +# forbidden_devices_ntfs = /dev/sdd1 +# NOTE: device node paths are canonicalized before being tested, so forbidding +# a link to a device will have no effect. +forbidden_devices = + + +# allowed_networks determines what hosts may be un/mounted by udevil users when +# using nfs, cifs, smbfs, curlftpfs, ftpfs, or sshfs. Hosts may be specified +# using a hostname (eg myserver.com) or IP address (192.168.1.100). +# Wildcards may be used in hostnames and IP addresses, but CIDR notation +# (192.168.1.0/16) is NOT supported. IP v6 is supported. For example: +# allowed_networks = 127.0.0.1, 192.168.1.*, 10.0.0.*, localmachine, *.okay.com +# Or, to prevent un/mounting of any network shares, set: +# allowed_networks = +# allowed_networks_FSTYPE, if present, is used to override allowed_networks +# when mounting or unmounting a specific network fstype (eg nfs, cifs, sshfs, +# curlftpfs). For example, to limit nfs and samba shares to only local +# networks, use these two lines: +# allowed_networks_nfs = 192.168.1.*, 10.0.0.* +# allowed_networks_cifs = 192.168.1.*, 10.0.0.* +allowed_networks = * + + +# forbidden_networks and forbidden_networks_FSTYPE are used to specify networks +# that are never allowed, even if other settings allow them (except fstab). +# NO REVERSE LOOKUP IS PERFORMED, so including bad.com will only have an effect +# if the user uses that hostname. IP lookup is always performed, so forbidding +# an IP address will also forbid all corresponding hostnames. +forbidden_networks = + + +# allowed_files is used to determine what files in what directories may be +# un/mounted. A user must also have read permission on a file to mount it. +# Note: Wildcards may be used, but a wildcard will never match a /, except +# for "allowed_files=*" which allows any file, and a /** suffix, which matches +# all files recursively. +# For example, to allow only files in the /share directory to be mounted, use: +# allowed_files = /share/* +# To allow all files in the /share directory AND all subdirectories use: +# allowed_files = /share/** +# NOTE: Specifying allowed_files_FSTYPE will NOT work because the fstype of +# files is always 'file'. +allowed_files = * + + +# forbidden_files is used to specify files that are never allowed, even if +# other settings allow them (except fstab). Specify a full path. +# Note: Wildcards may be used, but a wildcard will never match a /, except +# for "forbidden_files = *", or a /** suffix, which matches all recursively. +# NOTE: file paths are canonicalized before being tested, so forbidding +# a link to a file will have no effect. +forbidden_files = + + +# default_options specifies what options are always included when performing +# a mount, in addition to any options the user may specify. +# Note: When a device is present in /etc/fstab, and the user does not specify +# a mount point, the device is mounted with normal user permissions using +# the fstab entry, without these options. +# default_options_FSTYPE, if present, is used to override default_options +# when mounting a specific fstype (eg ext2, nfs). +# The variables $USER, $UID, and $GID are changed to the user's username, UID, +# and GID. +# FOR GOOD SECURITY, default_options SHOULD ALWAYS INCLUDE: nosuid,noexec,nodev +# WARNING: OPTIONS PRESENT OR MISSING CAN CAUSE SERIOUS SECURITY PROBLEMS. +default_options = nosuid, noexec, nodev, noatime +default_options_file = nosuid, noexec, nodev, noatime, uid=$UID, gid=$GID, ro +# mount iso9660 with 'ro' to prevent mount read-only warning +default_options_iso9660 = nosuid, noexec, nodev, noatime, uid=$UID, gid=$GID, ro, utf8 +default_options_udf = nosuid, noexec, nodev, noatime, uid=$UID, gid=$GID +default_options_vfat = nosuid, noexec, nodev, noatime, fmask=0133, dmask=0022, uid=$UID, gid=$GID, utf8 +default_options_exfat = nosuid, noexec, nodev, noatime, umask=0077, uid=$UID, gid=$GID, iocharset=utf8, namecase=0, nonempty +default_options_hfsplus = nosuid, noexec, nodev, ro, uid=$UID, gid=$GID +default_options_msdos = nosuid, noexec, nodev, noatime, fmask=0133, dmask=0022, uid=$UID, gid=$GID +default_options_umsdos = nosuid, noexec, nodev, noatime, fmask=0133, dmask=0022, uid=$UID, gid=$GID +default_options_ntfs = nosuid, noexec, nodev, noatime, fmask=0133, uid=$UID, gid=$GID, utf8 +default_options_cifs = nosuid, noexec, nodev, uid=$UID, gid=$GID +default_options_smbfs = nosuid, noexec, nodev, uid=$UID, gid=$GID +default_options_sshfs = nosuid, noexec, nodev, noatime, uid=$UID, gid=$GID, nonempty, allow_other +default_options_curlftpfs = nosuid, noexec, nodev, noatime, uid=$UID, gid=$GID, nonempty, allow_other +default_options_ftpfs = nosuid, noexec, nodev, noatime, uid=$UID, gid=$GID +default_options_davfs = nosuid, noexec, nodev, uid=$UID, gid=$GID +default_options_tmpfs = nosuid, noexec, nodev, noatime, uid=$UID, gid=$GID +default_options_ramfs = nosuid, noexec, nodev, noatime, uid=$UID, gid=$GID + + +# allowed_options determines all options that a user may specify when mounting. +# All the options used in default_options above must be included here too, or +# they will be rejected. If the user attempts to use an option not included +# here, an error will result. Wildcards may be used. +# allowed_options_FSTYPE, if present, is used to override allowed_options +# when mounting a specific fstype (eg ext2, nfs). +# The variables $USER, $UID, and $GID are changed to the user's username, UID, +# and GID. +# If you want to forbid remounts, remove 'remount' from here. +# WARNING: OPTIONS HERE CAN CAUSE SERIOUS SECURITY PROBLEMS - CHOOSE CAREFULLY +allowed_options = nosuid, noexec, nodev, noatime, fmask=0133, dmask=0022, uid=$UID, gid=$GID, ro, rw, sync, flush, iocharset=*, utf8, remount +allowed_options_nfs = nosuid, noexec, nodev, noatime, ro, rw, sync, remount, port=*, rsize=*, wsize=*, hard, proto=*, timeo=*, retrans=* +allowed_options_cifs = nosuid, noexec, nodev, ro, rw, remount, port=*, user=*, username=*, pass=*, password=*, guest, domain=*, uid=$UID, gid=$GID, credentials=* +allowed_options_smbfs = nosuid, noexec, nodev, ro, rw, remount, port=*, user=*, username=*, pass=*, password=*, guest, domain=*, uid=$UID, gid=$GID, credentials=* +allowed_options_sshfs = nosuid, noexec, nodev, noatime, ro, rw, uid=$UID, gid=$GID, nonempty, allow_other, idmap=user, BatchMode=yes, port=* +allowed_options_curlftpfs = nosuid, noexec, nodev, noatime, ro, rw, uid=$UID, gid=$GID, nonempty, allow_other, user=* +allowed_options_ftpfs = nosuid, noexec, nodev, noatime, ro, rw, port=*, user=*, pass=*, root=*, uid=$UID, gid=$GID +allowed_options_exfat = nosuid, noexec, nodev, noatime, fmask=0133, dmask=0022, uid=$UID, gid=$GID, umask=0077, namecase=*, ro, rw, sync, flush, iocharset=*, remount, nonempty + + +# mount_point_mode, if present and set to a non-empty value, will cause udevil +# to set the mode (permissions) on the moint point after mounting If not +# specified or if left empty, the mode is not changed. Mode must be octal +# starting with a zero (0755). +# mount_point_mode_FSTYPE, if present, is used to override mount_point_mode +# when mounting a specific fstype (eg ext2, nfs). +# NOT SETTING A MODE CAN HAVE SECURITY IMPLICATIONS FOR SOME FSTYPES +mount_point_mode = 0755 +# don't set a mode for some types: +mount_point_mode_sshfs = +mount_point_mode_curlftpfs = +mount_point_mode_ftpfs = + + +# Use the settings below to change the default locations of programs used by +# udevil, or (advanced topic) to redirect commands to your scripts. +# When substituting scripts, make sure they are root-owned and accept the +# options used by udevil (for example, the mount_program must accept --fake, +# -o, -v, and other options valid to mount.) +# Be sure to specify the full path and include NO OPTIONS or other arguments. +# These programs may also be specified as configure options when building +# udevil. +# THESE PROGRAMS ARE RUN AS ROOT +# mount_program = /bin/mount +# umount_program = /bin/umount +# losetup_program = /sbin/losetup +# setfacl_program = /usr/bin/setfacl + + +# validate_exec specifies a program or script which provides additional +# validation of a mount or unmount command, beyond the checks performed by +# udevil. The program is run as a normal user (if root runs udevil, +# validate_exec will NOT be run). The program is NOT run if the user is +# mounting a device without root priviledges (a device in fstab). +# The program is passed the username, a printable description of what is +# happening, and the entire udevil command line as the first three arguments. +# The program must return an exit status of 0 to allow the mount or unmount +# to proceed. If it returns non-zero, the user will be denied permission. +# For example, validate_exec might specify a script which notifies you +# of the command being run, or performs additional steps to authenticate the +# user. +# Specify a full path to the program, with NO options or arguments. +# validate_exec = + + +# validate_rootexec works similarly to validate_exec, except that the program +# is run as root. validate_rootexec will also be run if the root user runs +# udevil. If both validate_exec and validate_rootexec are specified, +# validate_rootexec will run first, followed by validate_exec. +# The program must return an exit status of 0 to allow the mount or unmount +# to proceed. If it returns non-zero, the user will be denied permission. +# Unless you are familiar with writing root scripts, it is recommended that +# rootexec settings NOT be used, as it is easy to inadvertently open exploits. +# THIS PROGRAM IS ALWAYS RUN AS ROOT, even if the user running udevil is not. +# validate_rootexec = + + +# success_exec is run after a successful mount, remount, or unmount. The +# program is run as a normal user (if root runs udevil, success_exec +# will NOT be run). +# The program is passed the username, a printable description of what action +# was taken, and the entire udevil command line as the first three arguments. +# The program's exit status is ignored. +# For example, success_exec might run a script which informs you of what action +# was taken, and might perform further actions. +# Specify a full path to the program, with NO options or arguments. +# success_exec = + + +# success_rootexec works similarly to success_exec, except that the program is +# run as root. success_rootexec will also be run if the root user runs udevil. +# If both success_exec and success_rootexec are specified, success_rootexec +# will run first, followed by success_exec. +# Unless you are familiar with writing root scripts, it is recommended that +# rootexec settings NOT be used, as it is easy to inadvertently open exploits. +# THIS PROGRAM IS ALWAYS RUN AS ROOT, even if the user running udevil is not. +# success_rootexec = + diff --git a/archlive/airootfs/root/customize_airootfs.sh b/archlive/airootfs/root/customize_airootfs.sh index 07bf9bc7..022df645 100644 --- a/archlive/airootfs/root/customize_airootfs.sh +++ b/archlive/airootfs/root/customize_airootfs.sh @@ -14,18 +14,18 @@ ln -sf /usr/share/zoneinfo/America/Los_Angeles /etc/localtime # root user settings usermod -s /usr/bin/zsh root cp -aT /etc/skel/ /root/ -rm /root/.zlogin chmod 700 /root +echo "root:Abracadabra" | chpasswd + +# Add autologin group +groupadd -r autologin # Add wktech user -useradd -m -s /bin/zsh -G wheel -U wktech +useradd -m -s /bin/zsh -G autologin,storage,wheel -U wktech echo "wktech:Abracadabra" | chpasswd # Enable sudo for %wheel -echo '%wheel ALL=(ALL) ALL' >> /etc/sudoers - -# Enable firewall -ufw enable +echo '%wheel ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers # Set pacman mirrorlist echo 'Server = http://arch.localmsp.org/arch/$repo/os/$arch' > /etc/pacman.d/mirrorlist @@ -44,5 +44,5 @@ sed -i 's/#\(HandleLidSwitch=\)suspend/\1ignore/' /etc/systemd/logind.conf # Startup settings (from archiso) systemctl enable pacman-init.service choose-mirror.service -systemctl enable NetworkManager.service -systemctl set-default multi-user.target +#systemctl set-default multi-user.target +systemctl set-default graphical.target diff --git a/archlive/airootfs/usr/local/bin/hw-diags b/archlive/airootfs/usr/local/bin/hw-diags new file mode 100644 index 00000000..af422a7d --- /dev/null +++ b/archlive/airootfs/usr/local/bin/hw-diags @@ -0,0 +1,86 @@ +#!/bin/bash +# +## WK HW diagnostics - Launcher + +MODE="$1" + +# Ensure a proper mode is selected +while :; do + if [[ "$MODE" =~ ^(all|cpu|drives|foh|smart|badblocks)$ ]]; then + break + else + clear + echo "Hardware Diagnostics" + echo "────────────────────" + echo "0: Quick drive test" + echo "1: All tests" + echo "2: Prime95" + echo "3: SMART & badblocks" + echo "4: SMART" + echo "5: badblocks" + echo "────────────────────" + if [[ -n $DISPLAY ]]; then + echo "6: Graphics Test - FurMark" + echo "7: Graphics Test - Piano" + echo "8: Graphics Test - Volplosion" + fi + echo "A: Speaker Test" + if [[ -n $DISPLAY ]]; then + echo "K: Keyboard Test" + fi + echo "────────────────────" + echo "" + echo "Q: Quit" + echo "" + read -r -p "Please make a selection: " MODE + + # Check input + case $MODE in + 0) + MODE=foh + break;; + 1) + MODE=all + break;; + 2) + MODE=cpu + break;; + 3) + MODE=drives + break;; + 4) + MODE=smart + break;; + 5) + MODE=badblocks + break;; + 6) + if [[ -n $DISPLAY ]]; then + gputest /fullscreen /test=fur + fi + ;; + 7) + if [[ -n $DISPLAY ]]; then + gputest /fullscreen /test=pixmark_piano + fi + ;; + 8) + if [[ -n $DISPLAY ]]; then + gputest /fullscreen /test=pixmark_volplosion + fi + ;; + a|A|audio|Audio) + hw-diags-audio;; + k|K|keyboard|Keyboard) + if [[ -n $DISPLAY ]]; then + xev + fi + ;; + q|Q|quit|Quit) + exit 1;; + esac + fi +done + +# Start tmux +tmux new-session -s 'hw-session' -n 'hw-window' "hw-diags-inner $MODE" diff --git a/archlive/airootfs/usr/local/bin/hw-diags-audio b/archlive/airootfs/usr/local/bin/hw-diags-audio new file mode 100644 index 00000000..eb6feef9 --- /dev/null +++ b/archlive/airootfs/usr/local/bin/hw-diags-audio @@ -0,0 +1,11 @@ +#!/bin/bash +# +## WK HW diagnostics - Audio (Stereo) + +# Unmute and set volume +amixer -q set "Master" 80% unmute +amixer -q set "PCM" 90% unmute + +speaker-test -c 2 -l 1 -t pink +# speaker-test -c 2 -l 1 -t sine +speaker-test -c 2 -l 1 -t wav diff --git a/archlive/airootfs/usr/local/bin/hw-diags-badblocks b/archlive/airootfs/usr/local/bin/hw-diags-badblocks new file mode 100644 index 00000000..8b5d75dc --- /dev/null +++ b/archlive/airootfs/usr/local/bin/hw-diags-badblocks @@ -0,0 +1,25 @@ +#!/bin/bash +# +## WK HW diagnostics - badblocks + +function usage { + echo "Usage: $0 log-dir device" + echo " e.g. $0 /var/tmp/hw-diags/9001 /dev/sda" +} + +# Bail early +if [ ! -d "$1" ]; then + usage + exit 1 +fi +if [ ! -b "$2" ]; then + usage + exit 1 +fi + +# Run Badblocks +sudo badblocks -sv -e 1 "$2" +tmux capture-pane +tmux save-buffer "$1/bb_tmp.out" +grep -Ev '^$' "$1/bb_tmp.out" > "$1/${2##*/}_badblocks.log" +rm "$1/bb_tmp.out" diff --git a/archlive/airootfs/usr/local/bin/hw-diags-inner b/archlive/airootfs/usr/local/bin/hw-diags-inner new file mode 100644 index 00000000..28b4d600 --- /dev/null +++ b/archlive/airootfs/usr/local/bin/hw-diags-inner @@ -0,0 +1,483 @@ +#!/bin/bash +# +## WK HW Diagnostics - Main script + +# Setup tmux +# tmux set remain-on-exit on +tmux set status off + +# Get TICKET# +TICKET="" +while [[ "$TICKET" == "" ]]; do + if [[ "$1" == "foh" ]]; then + TICKET="foh-consult" + else + echo -n "Please enter the Service Order #: " + read -r _ticket + if echo "$_ticket" | grep -Eq '^[0-9]+\S*$'; then + TICKET="$_ticket" + fi + fi +done + +# Init +DIAG_DATE="$(date "+%F_%H%M")" +DIAG_SERVER_AVAIL="False" +DIAG_SERVER="10.0.0.10" +DIAG_DEST="/srv/Diagnostics/${TICKET}/${DIAG_DATE}" +DIAG_USER="wkdiag" +TMP_DIR="/var/tmp/hw-diags/${TICKET}/${DIAG_DATE}" +ERRORS="False" +ERROR_IMG="$TMP_DIR/error.jpg" +PASSED_IMG="$TMP_DIR/passed.jpg" +TEST_CPU="False" +TEST_OVER="False" +TEST_SMART="False" +TEST_BADBLOCKS="False" +SKIP_SHORT_TEST="False" +LOG="$TMP_DIR/hw-diags.log" +OUT="$TMP_DIR/hw-diags.out" + +# Get list of drives to test (excluding any ARCH drives) +## Some code borrowed from stackoverflow.com/a/10020397 +ARCH_DRIVES=($(ls -l /dev/disk/by-label | grep -iE 'ARCH.*[hs]d[a-z]' | sed -r 's#.*/([hs]d[a-z])[0-9]+#\1#' | sort | uniq)) +DRIVES=($(inxi -Dxx -c 0 | grep -E "ID-[0-9]+" | sed -r 's#.*/dev/([hs]d[a-z]).*#\1#' | sort)) +for d in "${ARCH_DRIVES[@]}"; do + DRIVES=(${DRIVES[@]//*$d*}) +done + +# Test connection to DIAG_SERVER +if ip a | grep -q '192.168.1' && \ + ping -c 1 -q $DIAG_SERVER >/dev/null 2>&1; then + DIAG_SERVER_AVAIL="True" + ssh $DIAG_USER@$DIAG_SERVER mkdir -p "$DIAG_DEST" +fi + +# Setup Env +mkdir "$TMP_DIR" -p 2>/dev/null +pushd "$TMP_DIR" >/dev/null +touch "$OUT" +rm local.txt results.txt 2>/dev/null + +# Functions +CLEAR="\e[0m" +RED="\e[31m" +GREEN="\e[32m" +YELLOW="\e[33m" +BLUE="\e[34m" +function update_progress { + echo "HW Diagnostics" > "$LOG" + echo "${BLUE}HW Diagnostics${CLEAR}" > "$OUT" + echo "───────────────" >> "$LOG" + echo "───────────────" >> "$OUT" + + if [[ "$TEST_CPU" == "True" ]]; then + echo "" >> "$LOG" + echo "" >> "$OUT" + if [[ "$cpu_result" == "CS" ]]; then + echo "Prime95 CS" >> "$LOG" + echo "${BLUE}Prime95${CLEAR} ${GREEN}CS${CLEAR}" >> "$OUT" + elif [[ "$cpu_result" == "Working" ]]; then + echo "Prime95 Working" >> "$LOG" + echo "${BLUE}Prime95${CLEAR} ${YELLOW}Working${CLEAR}" >> "$OUT" + elif [[ "$cpu_result" == "Unknown" ]]; then + echo "Prime95 Unknown" >> "$LOG" + echo "${BLUE}Prime95${CLEAR} ${YELLOW}Unknown${CLEAR}" >> "$OUT" + else + echo "Prime95 NS" >> "$LOG" + echo "${BLUE}Prime95${CLEAR} ${RED}NS${CLEAR}" >> "$OUT" + fi + fi + + if [[ "$TEST_SMART" == "True" ]]; then + echo "" >> "$LOG" + echo "" >> "$OUT" + if [[ "$SKIP_SHORT_TEST" == "True" ]]; then + echo "SMART (Quick)" >> "$LOG" + echo "${BLUE}SMART${CLEAR} ${YELLOW}(Quick)${CLEAR}" >> "$OUT" + else + echo "SMART" >> "$LOG" + echo "${BLUE}SMART${CLEAR}" >> "$OUT" + fi + for d in "${DRIVES[@]}"; do + d_tmp="${d##*/}_smart_result" + eval "d_tmp=\$$d_tmp" + if [[ "$d_tmp" == "CS" ]]; then + echo "${d##*/} CS" >> "$LOG" + echo "${d##*/} ${GREEN}CS${CLEAR}" >> "$OUT" + elif [[ "$d_tmp" == "Working" ]]; then + echo "${d##*/} Working" >> "$LOG" + echo "${d##*/} ${YELLOW}Working${CLEAR}" >> "$OUT" + elif [[ "$d_tmp" == "Unknown" ]]; then + echo "${d##*/} Unknown" >> "$LOG" + echo "${d##*/} ${YELLOW}Unknown${CLEAR}" >> "$OUT" + elif [[ "$d_tmp" == "NS" ]]; then + echo "${d##*/} NS" >> "$LOG" + echo "${d##*/} ${RED}NS${CLEAR}" >> "$OUT" + else + echo "${d##*/}" >> "$LOG" + echo "${d##*/}" >> "$OUT" + fi + done + fi + + if [[ "$TEST_BADBLOCKS" == "True" ]]; then + echo "" >> "$LOG" + echo "" >> "$OUT" + echo "Badblocks" >> "$LOG" + echo "${BLUE}Badblocks${CLEAR}" >> "$OUT" + for d in "${DRIVES[@]}"; do + d_tmp="${d##*/}_badblocks_result" + eval "d_tmp=\$$d_tmp" + if [[ "$d_tmp" == "CS" ]]; then + echo "${d##*/} CS" >> "$LOG" + echo "${d##*/} ${GREEN}CS${CLEAR}" >> "$OUT" + elif [[ "$d_tmp" == "Working" ]]; then + echo "${d##*/} Working" >> "$LOG" + echo "${d##*/} ${YELLOW}Working${CLEAR}" >> "$OUT" + elif [[ "$d_tmp" == "Skipped" ]]; then + echo "${d##*/} Skipped" >> "$LOG" + echo "${d##*/} ${RED}Skipped${CLEAR}" >> "$OUT" + elif [[ "$d_tmp" == "NS" ]]; then + echo "${d##*/} NS" >> "$LOG" + echo "${d##*/} ${RED}NS${CLEAR}" >> "$OUT" + else + echo "${d##*/}" >> "$LOG" + echo "${d##*/}" >> "$OUT" + fi + done + fi + + if [[ "$TEST_OVER" == "True" ]]; then + echo "" >> "$LOG" + echo "" >> "$OUT" + echo "───────────────" >> "$LOG" + echo "───────────────" >> "$OUT" + + if [[ "$ERRORS" == "True" ]]; then + echo "HW: Error(s)" >> "$LOG" + echo "${RED}HW: Error(s)${CLEAR}" >> "$OUT" + else + echo "HW: Passed" >> "$LOG" + echo "${GREEN}HW: Passed${CLEAR}" >> "$OUT" + fi + fi + + # Update Server + if [[ "$DIAG_SERVER_AVAIL" == "True" ]]; then + rsync -aqz "$TMP_DIR/" $DIAG_USER@$DIAG_SERVER:"$DIAG_DEST/" --exclude '*.out' + fi +} + +# Select Tests +case "$1" in + all) + TEST_CPU="True" + TEST_SMART="True" + TEST_BADBLOCKS="True" + ;; + cpu) + TEST_CPU="True" + TEST_SMART="False" + TEST_BADBLOCKS="False" + ;; + drives) + TEST_CPU="False" + TEST_SMART="True" + TEST_BADBLOCKS="True" + ;; + foh) + TEST_CPU="False" + TEST_SMART="True" + TEST_BADBLOCKS="False" + SKIP_SHORT_TEST="True" + ;; + smart) + TEST_CPU="False" + TEST_SMART="True" + TEST_BADBLOCKS="False" + ;; + badblocks) + TEST_CPU="False" + TEST_SMART="False" + TEST_BADBLOCKS="True" + ;; +esac + +if [[ "$TEST_CPU" == "False" ]] && \ + [[ "$TEST_SMART" == "False" ]] && \ + [[ "$TEST_BADBLOCKS" == "False" ]]; then + echo -e "${YELLOW}Aborting HW diagnostics${CLEAR}" + exit 1 +fi + +# Configure display +tmux split-window -d -h -l 16 "hw-diags-progress $OUT" +update_progress + +# CPU +if [[ "$TEST_CPU" == "True" ]]; then + clear + CPU_ERRORS="False" + cpu_result="Working" + update_progress + (sleep 10m && killall -s INT "mprime$(getconf LONG_BIT)" >>/dev/null 2>&1) & + (sleep 10m && killall "hw-diags-sensors" >>/dev/null 2>&1) & + tmux split-window -d -v -l 10 "hw-diags-prime95 $TMP_DIR" + hw-diags-sensors "$TMP_DIR" 2>/dev/null + sleep 1s + # tmux kill-pane -t 1 + if [[ -f "results.txt" ]]; then + mv -nv results.txt "prime-results.txt" + if grep -q -iE '(error|fail)' "prime-results.txt"; then + cpu_result="NS" + CPU_ERRORS="True" + else + cpu_result="CS" + fi + elif [[ -f "prime.log" ]]; then + if grep -i 'completed' "prime.log" | grep -q -iv '0 errors, 0 warnings'; then + cpu_result="NS" + CPU_ERRORS="True" + else + cpu_result="CS" + fi + else + CPU_ERRORS="True" + cpu_result="Unknown" + fi + + update_progress + + if [[ "$CPU_ERRORS" == "True" ]]; then + ERRORS="True" + fi +fi + +# SMART +if [[ "$TEST_SMART" == "True" ]]; then + clear + SMART_ERRORS="False" + echo "Checking SMART status..." + for d in "${DRIVES[@]}"; do + tmp_device="${d##*/}" + eval "${tmp_device}_smart_result=Working" + inxi -Dxx | grep "/dev/${tmp_device}" | sed -r "s#.*/dev/${tmp_device} (.*)# \1#" > "${tmp_device}_report.out" + inxi -Dxxc 0 | grep "/dev/${tmp_device}" | sed -r "s#.*/dev/${tmp_device} (.*)# \1#" > "${tmp_device}_report.log" + update_progress + + # Attempt to enable SMART reporting + if sudo smartctl -s on "/dev/${tmp_device}" | grep -q 'device lacks SMART capability'; then + SMART_ERRORS="True" + eval "${tmp_device}_smart_result=Unknown" + echo " ${RED}ERROR: device lacks SMART capability${CLEAR}" >> "${tmp_device}_report.out" + echo " ERROR: device lacks SMART capability" >> "${tmp_device}_report.log" + sleep 1s + fi + + # Save current SMART values + sudo smartctl --all "/dev/${tmp_device}" >> "${tmp_device}-smart.log" + sudo smartctl -l error "/dev/${tmp_device}" >> "${tmp_device}-smart-err.log" + + # Check specific SMART results + sudo smartctl -A "/dev/${tmp_device}" | grep -E '^\s*(5|9|184|197|198)\s' >> "${tmp_device}-smart-attributes.log" + + # 5 - Reallocated Sectors + if grep -qE '^\s*5\s' "${tmp_device}-smart-attributes.log"; then + line="$(grep -E '^\s*5\s' "${tmp_device}-smart-attributes.log")" + value=$(echo "$line" | sed -r 's/.*\s([0-9]+).*/\1/') + echo " Reallocated Sectors: $value" >> "${tmp_device}_report.log" + if [[ "$value" -gt 0 ]]; then + SMART_ERRORS="True" + echo " ${RED}Reallocated Sectors: $value${CLEAR}" >> "${tmp_device}_report.out" + else + echo " ${GREEN}Reallocated Sectors: $value${CLEAR}" >> "${tmp_device}_report.out" + fi + fi + + # 9 - Power-on Hours (Warn, but don't prevent badblock scan) + if grep -qE '^\s*9\s' "${tmp_device}-smart-attributes.log"; then + line="$(grep -E '^\s*9\s' "${tmp_device}-smart-attributes.log")" + value=$(echo "$line" | sed -r 's/.*\s([0-9]+).*/\1/') + echo " Power-on Hours: $value" >> "${tmp_device}_report.log" + if [[ "$value" -gt 18000 ]]; then + #SMART_ERRORS="True" + echo " ${RED}Power-on Hours: $value (VERY OLD)${CLEAR}" >> "${tmp_device}_report.out" + elif [[ "$value" -gt 12000 ]]; then + echo " ${YELLOW}Power-on Hours: $value${CLEAR}" >> "${tmp_device}_report.out" + else + echo " ${GREEN}Power-on Hours: $value${CLEAR}" >> "${tmp_device}_report.out" + fi + fi + + # 184 - End-to-End Errors + if grep -qE '^\s*184\s' "${tmp_device}-smart-attributes.log"; then + line="$(grep -E '^\s*184\s' "${tmp_device}-smart-attributes.log")" + value=$(echo "$line" | sed -r 's/.*\s([0-9]+).*/\1/') + echo " End-to-End Errors: $value" >> "${tmp_device}_report.log" + if [[ "$value" -gt 0 ]]; then + SMART_ERRORS="True" + echo " ${RED}End-to-End Errors: $value${CLEAR}" >> "${tmp_device}_report.out" + else + echo " ${GREEN}End-to-End Errors: $value${CLEAR}" >> "${tmp_device}_report.out" + fi + fi + + # 197 - Current Pending Sectors + if grep -qE '^\s*197\s' "${tmp_device}-smart-attributes.log"; then + line="$(grep -E '^\s*197\s' "${tmp_device}-smart-attributes.log")" + value=$(echo "$line" | sed -r 's/.*\s([0-9]+).*/\1/') + echo " Current Pending Sectors: $value" >> "${tmp_device}_report.log" + if [[ "$value" -gt 0 ]]; then + SMART_ERRORS="True" + echo " ${RED}Current Pending Sectors: $value${CLEAR}" >> "${tmp_device}_report.out" + else + echo " ${GREEN}Current Pending Sectors: $value${CLEAR}" >> "${tmp_device}_report.out" + fi + fi + + # 198 - Offline Uncorrectable + if grep -qE '^\s*198\s' "${tmp_device}-smart-attributes.log"; then + line="$(grep -E '^\s*198\s' "${tmp_device}-smart-attributes.log")" + value=$(echo "$line" | sed -r 's/.*\s([0-9]+).*/\1/') + echo " Offline Uncorrectable: $value" >> "${tmp_device}_report.log" + if [[ "$value" -gt 0 ]]; then + SMART_ERRORS="True" + echo " ${RED}Offline Uncorrectable: $value${CLEAR}" >> "${tmp_device}_report.out" + else + echo " ${GREEN}Offline Uncorrectable: $value${CLEAR}" >> "${tmp_device}_report.out" + fi + fi + + if [[ "$SMART_ERRORS" == "False" ]] && [[ "$SKIP_SHORT_TEST" == "False" ]]; then + if sudo smartctl -c "/dev/${tmp_device}" >>/dev/null 2>&1; then + # Determine short-test polling time + wait_time=$(sudo smartctl -c "/dev/${tmp_device}" | grep -i 'polling time' | head -1 | sed -r 's/.*\( *([0-9]+)\).*/\1/') + wait_time=$(( wait_time + 5)) + + # Run short self-test + echo " Running SMART short self-test ($wait_time minutes)..." + sudo smartctl -t short "/dev/${tmp_device}" >/dev/null + sleep ${wait_time}m + sudo smartctl -l selftest "/dev/${tmp_device}" >> "${tmp_device}-smart-tests.log" + if grep '^#' "${tmp_device}-smart-tests.log" | head -1 | grep -iq 'completed without error'; then + echo " ${GREEN}Self-test: passed${CLEAR}" >> "${tmp_device}_report.out" + echo " Self-test: passed" >> "${tmp_device}_report.log" + else + echo " ${RED}Self-test: failed${CLEAR}" >> "${tmp_device}_report.out" + echo " Self-test: failed" >> "${tmp_device}_report.log" + SMART_ERRORS="True" + fi + else + echo " ${RED}ERROR: Unable to run SMART self-test.${CLEAR}" >> "${tmp_device}_report.out" + echo " ERROR: Unable to run SMART self-test." >> "${tmp_device}_report.log" + fi + fi + + if [[ "$SMART_ERRORS" == "False" ]]; then + eval "${tmp_device}_smart_result=CS" + else + ERRORS="True" + tmp_if="${tmp_device}_smart_result" + eval "tmp_if=\$$tmp_if" + if [[ "$tmp_if" != "Unknown" ]]; then + eval "${tmp_device}_smart_result=NS" + fi + fi + + update_progress + done +fi + +# Badblocks +if [[ "$TEST_BADBLOCKS" == "True" ]]; then + clear + for d in "${DRIVES[@]}"; do + # Get SMART results + tmp_device="${d##*/}" + d_smart="${tmp_device}_smart_result" + eval "d_smart=\$$d_smart" + + # Check SMART results + if [[ "$d_smart" == "NS" ]]; then + echo -e "${RED}Skipping drive: $tmp_device${CLEAR}" + eval "${tmp_device}_badblocks_result=Skipped" + else + eval "${tmp_device}_badblocks_result=Working" + update_progress + echo "Testing drive: ${tmp_device}" + + # Split and run + tmux split-window -d -v -l 7 "hw-diags-badblocks $TMP_DIR /dev/${tmp_device}" + + # Wait until done + sleep 2s + while pgrep -G 0 -U 0 -f "badblocks.*${tmp_device}" >/dev/null 2>&1; do + sleep 1s; + done + sleep 2s + + # Check log + if grep -q '0/0/0 errors' "${tmp_device}_badblocks.log"; then + eval "${tmp_device}_badblocks_result=CS" + else + eval "${tmp_device}_badblocks_result=NS" + fi + update_progress + fi + done +fi + +# Result Screen +TEST_OVER="True" +update_progress +clear +echo "─── RESULTS ───" +if [[ "$TEST_CPU" == "True" ]]; then + echo -e "${BLUE}CPU:${CLEAR}" + if [[ -f "results.txt" ]]; then + echo "results.txt" + if grep -q -iE '(error|fail)' "prime-results.txt"; then + echo -e "${RED}$(grep -q -iE '(error|fail)' "prime-results.txt" | sed -r 's/^/ /' | tail -4)${CLEAR}" + else + sed -r 's/^/ /' "prime-results.txt" 2>/dev/null | tail -4 + fi + echo "" + fi + if [[ -f "prime.log" ]]; then + echo "prime.log" + if grep -i 'completed' "prime.log" | grep -q -iv '0 errors, 0 warnings'; then + echo -e "${RED}$(grep -i 'completed' "prime.log" | grep -iv '0 errors, 0 warnings' | sed -r 's/^/ /' | tail -4)${CLEAR}" + else + grep -i 'completed' "prime.log" | grep -i '0 errors, 0 warnings' | sed -r 's/^.*(Worker #[0-9]+).*(Torture.*)/ \1 \2/' | tail -4 + fi + fi +fi +if [[ "$TEST_SMART" == "True" ]] || \ + [[ "$TEST_BADBLOCKS" == "True" ]]; then + for d in "${DRIVES[@]}"; do + echo -e "${BLUE}Drive $d:${CLEAR}" + if [[ -f "${d##*/}_report.out" ]]; then + echo -e "$(cat "${d##*/}_report.out" 2>/dev/null)" + fi + if [[ -f "${d##*/}_badblocks.log" ]]; then + grep 'Pass completed, ' "${d##*/}_badblocks.log" 2>/dev/null | sed -r 's/^Pass completed, / /' 2>/dev/null + fi + echo "" + done +fi + +# System info dump +sudo inxi -CDdGlMmNopRsc 0 | grep -Ev '(/dev/ram|No RAID devices|Display Server|multisession)' > "system_info.txt" + +# Cleanup +mkdir "$HOME/Tickets/$TICKET" -p 2>/dev/null +rsync -aS "$TMP_DIR" "$HOME/Tickets/" +popd >/dev/null +cd "$HOME/Tickets" && tar czf "${TICKET}.tgz" "$TICKET" + +# End +echo -n "Press Enter to exit..." +read -r +killall hw-diags-progress >>/dev/null 2>&1 +exit 0 diff --git a/archlive/airootfs/usr/local/bin/hw-diags-prime95 b/archlive/airootfs/usr/local/bin/hw-diags-prime95 new file mode 100644 index 00000000..191639e5 --- /dev/null +++ b/archlive/airootfs/usr/local/bin/hw-diags-prime95 @@ -0,0 +1,20 @@ +#!/bin/bash +# +## WK HW diagnostics - Prime95 + +# Find executable +MPRIME="/usr/bin/mprime$(getconf LONG_BIT)" + +function usage { + echo "Usage: $0 log-dir" + echo " e.g. $0 /var/tmp/hw-diags/9001" +} + +# Bail early +if [ ! -d "$1" ]; then + usage + exit 1 +fi + +# Run Prime95 +$MPRIME -t | grep -iv --line-buffered 'stress.txt' | tee -a "$1/prime.log" diff --git a/archlive/airootfs/usr/local/bin/hw-diags-progress b/archlive/airootfs/usr/local/bin/hw-diags-progress new file mode 100644 index 00000000..83505276 --- /dev/null +++ b/archlive/airootfs/usr/local/bin/hw-diags-progress @@ -0,0 +1,10 @@ +#!/bin/bash +# +## WK HW diagnostics - Progress + +# Loop forever +while :; do + clear + echo -e "$(cat "$1")" + sleep 1s +done diff --git a/archlive/airootfs/usr/local/bin/hw-diags-sensors b/archlive/airootfs/usr/local/bin/hw-diags-sensors new file mode 100644 index 00000000..66cddcc0 --- /dev/null +++ b/archlive/airootfs/usr/local/bin/hw-diags-sensors @@ -0,0 +1,43 @@ +#!/bin/bash +# +## WK HW diagnostics - Sensors + +LOG_DIR="$1" + +function usage { + echo "Usage: $0 log-dir" + echo " e.g. $0 /var/tmp/hw-diags/9001" +} + +# Bail early +if [ ! -d "$LOG_DIR" ]; then + usage + exit 1 +fi + +# Run Sensor loop +if sensors >/dev/null 2>&1; then + while :; do + sensors -A | grep -E -i -v '(N/A|RPM|\d+\s+V\s+|^\s*$)' > "$LOG_DIR/sensors.out" 2>/dev/null + + # Colorize + # Blue: All temps (superseeded by other colors below) + sed -i -r 's#(\+[0-9]+\.[0-9].C)#\\e[34m\1\\e[0m#g' "$LOG_DIR/sensors.out" >/dev/null 2>&1 + # Green >= 60* C + sed -i -r 's#(\+6[0-9]\.[0-9].C)#\\e[32m\1\\e[0m#g' "$LOG_DIR/sensors.out" >/dev/null 2>&1 + # Yellow >= 70* C + sed -i -r 's#(\+7[0-9]\.[0-9].C)#\\e[33m\1\\e[0m#g' "$LOG_DIR/sensors.out" >/dev/null 2>&1 + # Orange >= 80* C + sed -i -r 's#(\+(8[0-9]|9[0-4])\.[0-9].C)#\\e[31\;1m\1\\e[0m#g' "$LOG_DIR/sensors.out" >/dev/null 2>&1 + # Red >= 95* C + sed -i -r 's#(\+(9[5-9]|1[0-9][0-9])\.[0-9].C)#\\e[31m\1\\e[0m#g' "$LOG_DIR/sensors.out" >/dev/null 2>&1 + + # Output data + clear + echo -e "$(cat "$LOG_DIR/sensors.out")" + sleep 1s + done +else + echo -e "\e[33mNo sensors found!\nPlease monitor temperatures manually\e[0m" + sleep 1h +fi diff --git a/archlive/airootfs/usr/local/bin/mount-all-volumes b/archlive/airootfs/usr/local/bin/mount-all-volumes new file mode 100644 index 00000000..fe50a427 --- /dev/null +++ b/archlive/airootfs/usr/local/bin/mount-all-volumes @@ -0,0 +1,14 @@ +#!/bin/bash +# +## Mount all volumes read-only + +echo "Mounting all volumes" +regex="/dev/((h|s)d[a-z]|md)[0-9]+" +for v in $(inxi -Do | grep -E "$regex" | sed -r "s#.*($regex).*#\1#"); do + echo -n " $v: " + if udevil mount -o ro $v >>/dev/null 2>&1; then + echo "Mounted." + else + echo "Failed to mount." + fi +done diff --git a/archlive/airootfs/usr/local/bin/mount-backup-shares b/archlive/airootfs/usr/local/bin/mount-backup-shares new file mode 100644 index 00000000..be313995 --- /dev/null +++ b/archlive/airootfs/usr/local/bin/mount-backup-shares @@ -0,0 +1,10 @@ +#!/bin/bash +# +## Mount NAS backup shares + +echo "Mounting NAS backup shares" +sudo mkdir /Backups/ServerOne +sudo mount //10.0.0.10/Backups /Backups/ServerOne -o username=backup,password=Abracadabra +sudo mkdir /Backups/ServerTwo +sudo mount //10.0.0.11/Backups /Backups/ServerTwo -o username=backup,password=Abracadabra + diff --git a/archlive/airootfs/usr/local/bin/msword-search b/archlive/airootfs/usr/local/bin/msword-search new file mode 100644 index 00000000..bc7d4aa5 --- /dev/null +++ b/archlive/airootfs/usr/local/bin/msword-search @@ -0,0 +1,30 @@ +#!/bin/bash + +IFS=$'\n' +for s in $*; do + REGEX="$s" + REGEX=$(echo "$REGEX" | sed -r 's/\s+/\\s\*/g') + + # Word Doc + for d in *doc; do + if antiword "$d" | grep -iqsP "($REGEX)"; then + echo "Possible match: $d" + echo "$d" >> msword.tmp + fi + done + + # Word Docx + for d in *docx; do + if unzip -p "$d" word/document.xml | grep -iqsP "($REGEX)"; then + echo "Possible match: $d" + echo "$d" >> msword.tmp + fi + done + +done + +# Cleanup results +if [[ -f msword.tmp ]]; then + sort -u msword.tmp >> msword-matches.txt +fi + diff --git a/archlive/airootfs/usr/share/applications/Hardware Diagnostics.desktop b/archlive/airootfs/usr/share/applications/Hardware Diagnostics.desktop index 8f6a5233..02995642 100644 --- a/archlive/airootfs/usr/share/applications/Hardware Diagnostics.desktop +++ b/archlive/airootfs/usr/share/applications/Hardware Diagnostics.desktop @@ -3,7 +3,7 @@ Version=1.0 Type=Application Name=Hardware Diagnostics Comment= -Exec=xfce4-terminal -T "Hardware Diagnostics" -H -I xcos -x hw-diags +Exec=urxvt -title "Hardware Diagnostics" -hold -e hw-diags Icon=xcos Path= Terminal=false diff --git a/archlive/airootfs/usr/share/applications/SpeedTest.desktop b/archlive/airootfs/usr/share/applications/SpeedTest.desktop index eeb2e9be..cea5f356 100644 --- a/archlive/airootfs/usr/share/applications/SpeedTest.desktop +++ b/archlive/airootfs/usr/share/applications/SpeedTest.desktop @@ -3,7 +3,7 @@ Version=1.0 Type=Application Name=SpeedTest Comment= -Exec=xfce4-terminal -T SpeedTest -H -I network-workgroup -x speedtest +Exec=urxvt -titile SpeedTest -hold -e speedtest Icon=network-workgroup Path= Terminal=false diff --git a/archlive/packages.both b/archlive/packages.both index f77bca10..5db6acf4 100644 --- a/archlive/packages.both +++ b/archlive/packages.both @@ -1,22 +1,30 @@ arch-install-scripts +alsa-utils +antiword b43-fwcutter btrfs-progs -chromium +chntpw clonezilla +conky crda +curl darkhttpd ddrescue dhclient dialog +dmidecode dmraid dnsmasq dnsutils +dos2unix dosfstools elinks ethtool +exfat-utils f2fs-tools +ffmpeg fsarchiver -git +gcc-libs gnome-keyring gnu-netcat gparted @@ -25,14 +33,28 @@ grub gsmartcontrol gtk-engine-murrine hdparm +hfsprogs +htop +inxi ipw2100-fw ipw2200-fw iw lftp librsvg +lightdm +lightdm-gtk-greeter linux-atm +lm_sensors mc +mdadm +mediainfo +mesa +midori +mkvtoolnix-cli +mpv mtools +mupdf +ncdu network-manager-applet networkmanager nfs-utils @@ -51,10 +73,13 @@ parted partimage ppp pptpclient +pygtk +python2 refind-efi rfkill rp-pppoe rsync +rxvt-unicode smartmontools speedtest-cli speedtouch @@ -62,10 +87,12 @@ sudo tcpdump terminus-font testdisk +tk tmux truecrypt ttf-inconsolata -ufw +udevil +udisks2 usb_modeswitch vim vpnc @@ -74,6 +101,7 @@ wireless_tools wpa_actiond wpa_supplicant wvdial +xf86-input-synaptics xf86-video-amdgpu xf86-video-ati xf86-video-intel @@ -84,6 +112,8 @@ xfce4-goodies xl2tpd xorg-server xorg-server-utils +xorg-xdpyinfo +xorg-xev xorg-xinit zd1211-firmware zsh