Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 9d929bd0ad | |||
| 045f2d2b50 | |||
| 4e4bc5f69e | |||
| c1c3a32fb7 | |||
| d225658e0f | |||
| 15b15d1008 | |||
| 58953da23f | |||
| 1946bb14ff |
+1
-1
@@ -59,7 +59,6 @@
|
||||
<package name="usbutils"/>
|
||||
<package name="pciutils"/>
|
||||
<package name="ncurses-devel"/>
|
||||
<package name="ncurses5-devel"/>
|
||||
<package name="git"/>
|
||||
<package name="make"/>
|
||||
<package name="gcc-c++"/>
|
||||
@@ -67,6 +66,7 @@
|
||||
<package name="smartmontools"/>
|
||||
<package name="curl"/>
|
||||
<package name="nano"/>
|
||||
<package name="dejavu-fonts"/>
|
||||
<package name="NetworkManager"/>
|
||||
<package name="NetworkManager-tui"/>
|
||||
<package name="python3-pip"/>
|
||||
|
||||
@@ -43,11 +43,14 @@ suseInsertService dracut_hostonly
|
||||
#--------------------------------------
|
||||
baseSetRunlevel 3
|
||||
|
||||
pip install sysv-ipc --break-system-packages
|
||||
pip install pycstruct --break-system-packages
|
||||
pip install brother-ql --break-system-packages
|
||||
pip install qrcode --break-system-packages
|
||||
|
||||
systemctl enable getty@tty1
|
||||
systemctl enable getty@tty2
|
||||
systemctl enable getty@tty3
|
||||
systemctl enable getty@tty4
|
||||
|
||||
systemctl enable reHDDPrinter
|
||||
systemctl enable reHDDStartHelper
|
||||
systemctl enable reHDDLogUploader
|
||||
+1
-1
@@ -22,7 +22,7 @@ git checkout master
|
||||
git pull
|
||||
git submodule init
|
||||
git submodule update
|
||||
make release
|
||||
|
||||
cd $current_dir
|
||||
|
||||
cd ./root/root/reHDDPrinter/
|
||||
|
||||
@@ -13,3 +13,6 @@ alias l='ls $LS_OPTIONS -lA'
|
||||
|
||||
|
||||
PS1='\[\033[1;33m\]\u\[\033[1;37m\]@\[\033[1;32m\]\h\[\033[1;37m\] \[\033[1;31m\]\w \[\033[1;37m\]> \[\033[0m\]'
|
||||
|
||||
alias restartrehdd='systemctl restart getty@tty1.service'
|
||||
alias exportlogsrehdd='clear && /usr/bin/bash /root/export_reHDD_logs.sh'
|
||||
|
||||
@@ -0,0 +1,197 @@
|
||||
#!/usr/bin/env bash
|
||||
# export_reHDD_logs.sh
|
||||
# Exports reHDD logs to a selected drive with optional ext4 formatting.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# ─── Colors ───────────────────────────────────────────────────────────────────
|
||||
RED='\033[0;31m'
|
||||
YEL='\033[1;33m'
|
||||
GRN='\033[0;32m'
|
||||
CYN='\033[0;36m'
|
||||
BLD='\033[1m'
|
||||
RST='\033[0m'
|
||||
|
||||
# ─── Privilege check ──────────────────────────────────────────────────────────
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo -e "${RED}Error: This script must be run as root.${RST}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ─── Dependency check ─────────────────────────────────────────────────────────
|
||||
for cmd in lsblk mkfs.ext4 mount umount sync; do
|
||||
if ! command -v "$cmd" &>/dev/null; then
|
||||
echo -e "${RED}Error: Required command '${cmd}' not found.${RST}" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
SOURCE_LOG="/root/reHDD/reHDD.log"
|
||||
if [[ ! -f "$SOURCE_LOG" ]]; then
|
||||
echo -e "${RED}Error: Log file not found: ${SOURCE_LOG}${RST}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ─── 1. Discover drives ───────────────────────────────────────────────────────
|
||||
echo -e "\n${BLD}${CYN}=== reHDD Log Exporter ===${RST}\n"
|
||||
echo -e "${BLD}Scanning for block devices...${RST}\n"
|
||||
|
||||
# Collect drives (disk type, not partitions/loops/rom)
|
||||
# Temporarily disable errexit so an empty result doesn't kill the script
|
||||
DRIVES=()
|
||||
while IFS= read -r line; do
|
||||
[[ -n "$line" ]] && DRIVES+=("$line")
|
||||
done < <(lsblk -dpno NAME,TYPE 2>/dev/null | awk '$2=="disk"{print $1}' || true)
|
||||
|
||||
if [[ ${#DRIVES[@]} -eq 0 ]]; then
|
||||
echo -e "${RED}No drives found.${RST}" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Build display table
|
||||
declare -a DRIVE_PATHS DRIVE_SIZES DRIVE_FS
|
||||
|
||||
idx=0
|
||||
for drv in "${DRIVES[@]}"; do
|
||||
# NVMe uses /dev/nvme0n1p1, SATA/USB use /dev/sda1
|
||||
if [[ "$drv" =~ nvme ]]; then
|
||||
part="${drv}p1"
|
||||
else
|
||||
part="${drv}1"
|
||||
fi
|
||||
|
||||
# Human-readable size of the whole disk
|
||||
size=$(lsblk -dno SIZE "$drv" 2>/dev/null || echo "N/A")
|
||||
|
||||
# Filesystem on first partition (if it exists)
|
||||
if [[ -b "$part" ]]; then
|
||||
fs=$(lsblk -no FSTYPE "$part" 2>/dev/null | head -1 || true)
|
||||
fs=${fs:-"<unknown>"}
|
||||
else
|
||||
fs="<no partition>"
|
||||
fi
|
||||
|
||||
DRIVE_PATHS[$idx]="$drv"
|
||||
DRIVE_SIZES[$idx]="$size"
|
||||
DRIVE_FS[$idx]="$fs"
|
||||
(( idx++ )) || true
|
||||
done
|
||||
|
||||
# Print table
|
||||
printf " ${BLD}%-4s %-12s %-10s %-15s${RST}\n" "No." "Path" "Size" "FS (part1)"
|
||||
printf " %-4s %-12s %-10s %-15s\n" "----" "------------" "----------" "---------------"
|
||||
for i in "${!DRIVE_PATHS[@]}"; do
|
||||
printf " ${GRN}%-4s${RST} %-12s %-10s %-15s\n" \
|
||||
"$((i+1))" "${DRIVE_PATHS[$i]}" "${DRIVE_SIZES[$i]}" "${DRIVE_FS[$i]}"
|
||||
done
|
||||
echo ""
|
||||
|
||||
# ─── 2. Drive selection ───────────────────────────────────────────────────────
|
||||
while true; do
|
||||
read -rp "$(echo -e "${BLD}Select drive [1-${#DRIVE_PATHS[@]}]:${RST} ")" sel
|
||||
if [[ "$sel" =~ ^[0-9]+$ ]] && (( sel >= 1 && sel <= ${#DRIVE_PATHS[@]} )); then
|
||||
SELECTED_IDX=$((sel-1))
|
||||
break
|
||||
fi
|
||||
echo -e "${YEL}Invalid selection, try again.${RST}"
|
||||
done
|
||||
|
||||
DRIVE="${DRIVE_PATHS[$SELECTED_IDX]}"
|
||||
# NVMe partitions use 'p1' suffix, SATA/USB use '1'
|
||||
if [[ "$DRIVE" =~ nvme ]]; then
|
||||
PARTITION="${DRIVE}p1"
|
||||
else
|
||||
PARTITION="${DRIVE}1"
|
||||
fi
|
||||
CURRENT_FS="${DRIVE_FS[$SELECTED_IDX]}"
|
||||
|
||||
echo -e "\nSelected: ${BLD}${DRIVE}${RST} (${DRIVE_SIZES[$SELECTED_IDX]}, fs: ${CURRENT_FS})\n"
|
||||
|
||||
# ─── 3. Create ext4 if needed ─────────────────────────────────────────────────
|
||||
if [[ "$CURRENT_FS" != "ext4" ]]; then
|
||||
echo -e "${YEL}Warning:${RST} Partition ${PARTITION} does not have an ext4 filesystem."
|
||||
echo -e " Current: ${BLD}${CURRENT_FS}${RST}"
|
||||
echo -e "${RED} All existing data on ${PARTITION} will be DESTROYED.${RST}\n"
|
||||
|
||||
read -rp "$(echo -e "${BLD}Create ext4 filesystem on ${PARTITION}? [yes/NO]: ${RST}")" confirm
|
||||
if [[ "$confirm" != "yes" ]]; then
|
||||
echo -e "${YEL}Aborted by user.${RST}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo -e "\n${CYN}Creating ext4 filesystem on ${PARTITION}...${RST}"
|
||||
|
||||
# If there is no partition table / first partition, create one first
|
||||
if [[ ! -b "$PARTITION" ]]; then
|
||||
echo -e "${CYN}No first partition found – creating a single primary partition...${RST}"
|
||||
echo -e "o\nn\np\n1\n\n\nw" | fdisk "$DRIVE" >/dev/null 2>&1 || true
|
||||
partprobe "$DRIVE" 2>/dev/null || true
|
||||
sleep 1
|
||||
fi
|
||||
|
||||
mkfs.ext4 -F "$PARTITION"
|
||||
echo -e "${GRN}ext4 filesystem created successfully.${RST}\n"
|
||||
fi
|
||||
|
||||
# ─── 4. Mount partition ───────────────────────────────────────────────────────
|
||||
RAND_HEX=$(tr -dc 'a-f0-9' </dev/urandom | head -c 16 || true)
|
||||
MNT_DIR="/mnt/${RAND_HEX}_reHDD_Log_Exporter"
|
||||
|
||||
echo -e "${CYN}Mounting ${PARTITION} at ${MNT_DIR} ...${RST}"
|
||||
mkdir -p "$MNT_DIR"
|
||||
|
||||
# Ensure cleanup on unexpected exit
|
||||
cleanup() {
|
||||
local exit_code=$?
|
||||
if mountpoint -q "$MNT_DIR" 2>/dev/null; then
|
||||
umount "$MNT_DIR" 2>/dev/null || true
|
||||
fi
|
||||
if [[ -d "$MNT_DIR" ]]; then
|
||||
rmdir "$MNT_DIR" 2>/dev/null || true
|
||||
fi
|
||||
exit $exit_code
|
||||
}
|
||||
trap cleanup ERR INT TERM
|
||||
|
||||
mount "$PARTITION" "$MNT_DIR"
|
||||
echo -e "${GRN}Mounted successfully.${RST}\n"
|
||||
|
||||
# ─── 5. Prefix input ─────────────────────────────────────────────────────────
|
||||
while true; do
|
||||
read -rp "$(echo -e "${BLD}Enter a prefix (no spaces, e.g. shredderpc42): ${RST}")" PREFIX
|
||||
if [[ -z "$PREFIX" ]]; then
|
||||
echo -e "${YEL}Prefix must not be empty.${RST}"
|
||||
elif [[ "$PREFIX" =~ [[:space:]] ]]; then
|
||||
echo -e "${YEL}Prefix must not contain spaces.${RST}"
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# ─── 6. Copy log file ─────────────────────────────────────────────────────────
|
||||
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
||||
DEST_FILE="${MNT_DIR}/${PREFIX}_reHDD_${TIMESTAMP}.log"
|
||||
|
||||
echo -e "\n${CYN}Copying log to ${DEST_FILE} ...${RST}"
|
||||
cp "$SOURCE_LOG" "$DEST_FILE"
|
||||
echo -e "${GRN}Log copied successfully.${RST}\n"
|
||||
|
||||
# ─── 7. Sync ──────────────────────────────────────────────────────────────────
|
||||
echo -e "${CYN}Syncing buffers to disk...${RST}"
|
||||
sync
|
||||
echo -e "${GRN}Sync complete.${RST}\n"
|
||||
|
||||
# ─── 8. Unmount & cleanup ─────────────────────────────────────────────────────
|
||||
echo -e "${CYN}Unmounting ${MNT_DIR} ...${RST}"
|
||||
umount "$MNT_DIR"
|
||||
echo -e "${GRN}Unmounted.${RST}"
|
||||
|
||||
echo -e "${CYN}Removing mount directory...${RST}"
|
||||
rmdir "$MNT_DIR"
|
||||
echo -e "${GRN}Done.${RST}\n"
|
||||
|
||||
# Disable trap — clean exit
|
||||
trap - ERR INT TERM
|
||||
|
||||
echo -e "${BLD}${GRN}✓ Log exported successfully to ${DRIVE} as:${RST}"
|
||||
echo -e " ${BLD}${PREFIX}_reHDD_${TIMESTAMP}.log${RST}\n"
|
||||
+1
-1
Submodule root/root/reHDD updated: 6dd4c44688...1ceffa56f8
@@ -0,0 +1,41 @@
|
||||
#!/bin/bash
|
||||
|
||||
echo "##########################################################################################################"
|
||||
echo "##########################################################################################################"
|
||||
|
||||
echo " HHHHHHHHH HHHHHHHHHDDDDDDDDDDDDD DDDDDDDDDDDDD"
|
||||
echo " H:::::::H H:::::::HD::::::::::::DDD D::::::::::::DDD"
|
||||
echo " H:::::::H H:::::::HD:::::::::::::::DD D:::::::::::::::DD"
|
||||
echo " HH::::::H H::::::HHDDD:::::DDDDD:::::D DDD:::::DDDDD:::::D"
|
||||
echo "rrrrr rrrrrrrrr eeeeeeeeeeee H:::::H H:::::H D:::::D D:::::D D:::::D D:::::D"
|
||||
echo "r::::rrr:::::::::r ee::::::::::::ee H:::::H H:::::H D:::::D D:::::D D:::::D D:::::D"
|
||||
echo "r:::::::::::::::::r e::::::eeeee:::::ee H::::::HHHHH::::::H D:::::D D:::::D D:::::D D:::::D"
|
||||
echo "rr::::::rrrrr::::::re::::::e e:::::e H:::::::::::::::::H D:::::D D:::::D D:::::D D:::::D"
|
||||
echo " r:::::r r:::::re:::::::eeeee::::::e H:::::::::::::::::H D:::::D D:::::D D:::::D D:::::D"
|
||||
echo " r:::::r rrrrrrre:::::::::::::::::e H::::::HHHHH::::::H D:::::D D:::::D D:::::D D:::::D"
|
||||
echo " r:::::r e::::::eeeeeeeeeee H:::::H H:::::H D:::::D D:::::D D:::::D D:::::D"
|
||||
echo " r:::::r e:::::::e H:::::H H:::::H D:::::D D:::::D D:::::D D:::::D"
|
||||
echo " r:::::r e::::::::e HH::::::H H::::::HHDDD:::::DDDDD:::::D DDD:::::DDDDD:::::D"
|
||||
echo " r:::::r e::::::::eeeeeeee H:::::::H H:::::::HD:::::::::::::::DD D:::::::::::::::DD"
|
||||
echo " r:::::r ee:::::::::::::e H:::::::H H:::::::HD::::::::::::DDD D::::::::::::DDD"
|
||||
echo " rrrrrrr eeeeeeeeeeeeee HHHHHHHHH HHHHHHHHHDDDDDDDDDDDDD DDDDDDDDDDDDD"
|
||||
echo " "
|
||||
echo " reHDD - hard drive refurbishing tool"
|
||||
echo " Available under GPL 3.0"
|
||||
echo " https://git.mosad.xyz/localhorst/reHDD"
|
||||
echo " "
|
||||
echo "##########################################################################################################"
|
||||
echo "##########################################################################################################"
|
||||
|
||||
|
||||
cd /root/reHDD
|
||||
|
||||
make clean
|
||||
|
||||
make release
|
||||
|
||||
clear
|
||||
|
||||
./reHDD
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
Description=reHDD on tty1
|
||||
|
||||
[Service]
|
||||
WorkingDirectory=/root/reHDD/
|
||||
WorkingDirectory=/root/
|
||||
ExecStart=
|
||||
ExecStart=-/root/reHDD/reHDD
|
||||
ExecStart=-/usr/bin/bash /root/start_reHDD.bash
|
||||
StandardInput=tty
|
||||
StandardOutput=tty
|
||||
Restart=always
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
[Unit]
|
||||
Description=screenfetch on tty4
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
RemainAfterExit=yes
|
||||
ExecStart=
|
||||
ExecStart=/usr/bin/screenfetch
|
||||
Restart=on-failure
|
||||
Reference in New Issue
Block a user