forked from meyerast/DECSEraser
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
455e961b9c |
@@ -38,4 +38,3 @@ Erasure Environment|Setup Alpine Linux Environment with SquashFS/No Persistence|
|
|||||||
|User Authentication|Implement user authentication|For Auditing, Logging, connection to network shares, etc.|Yes|Probably kerb auth via krb5
|
|User Authentication|Implement user authentication|For Auditing, Logging, connection to network shares, etc.|Yes|Probably kerb auth via krb5
|
||||||
|Logging|Implement logging|For auditing purposes|Yes|Record user, drive serial, grab user list (if windows/unix drive), grab hostname, record script inputs|
|
|Logging|Implement logging|For auditing purposes|Yes|Record user, drive serial, grab user list (if windows/unix drive), grab hostname, record script inputs|
|
||||||
|Ticket Notes|Add ticket note through script|To keep keyword searchable records associated with a ticket|No|Send email to Otobo with small details such as level, hostname, serial, etc<br>Might involve policy changes for when a ticket should be created.|
|
|Ticket Notes|Add ticket note through script|To keep keyword searchable records associated with a ticket|No|Send email to Otobo with small details such as level, hostname, serial, etc<br>Might involve policy changes for when a ticket should be created.|
|
||||||
|Back Up Linux Machines|Create a script to back up Linux filesystems|To simplify backing up Linux machines and align Linux backup simplicity with Windows backup simplicity|Yes||
|
|
||||||
-277
@@ -1,277 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
start_time="$(date '+%Y-%m-%d_%H.%M.%S')"
|
|
||||||
logdir=/tmp
|
|
||||||
log="$logdir"/log_"$start_time".log
|
|
||||||
log_x="$logdir"/log_x_"$start_time".log
|
|
||||||
exec 3>&1 1>>"$log_x" 2>&1
|
|
||||||
set -x
|
|
||||||
|
|
||||||
loginput() {
|
|
||||||
echo "$*" >&3;
|
|
||||||
echo "[INPUT] $(date '+%H:%M:%S') $*" >> "$log";
|
|
||||||
}
|
|
||||||
|
|
||||||
logresponse() {
|
|
||||||
echo "[RESPONSE] $(date '+%H:%M:%S') $*" >> "$log";
|
|
||||||
}
|
|
||||||
|
|
||||||
loginfo() {
|
|
||||||
echo "$*" >&3;
|
|
||||||
echo "[INFO] $(date '+%H:%M:%S') $*" >> "$log";
|
|
||||||
}
|
|
||||||
|
|
||||||
logwarn() {
|
|
||||||
echo "$*" >&3;
|
|
||||||
echo "[WARNING] $(date '+%H:%M:%S') $*" >> "$log";
|
|
||||||
}
|
|
||||||
|
|
||||||
logerror() {
|
|
||||||
echo "$*" >&3;
|
|
||||||
echo "[ERROR] $(date '+%H:%M:%S') $*" >> "$log";
|
|
||||||
}
|
|
||||||
|
|
||||||
confirm_message () {
|
|
||||||
local typed=
|
|
||||||
while [[ ! $typed = "$2" ]];
|
|
||||||
do
|
|
||||||
loginput "$1"
|
|
||||||
read -r typed
|
|
||||||
logresponse "$typed"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# shellcheck disable=SC2329
|
|
||||||
catch_sigint () {
|
|
||||||
logwarn "Signal Interrupt initiated. Stopping script."
|
|
||||||
cleanup
|
|
||||||
kill -INT "$$"
|
|
||||||
}
|
|
||||||
|
|
||||||
# shellcheck disable=SC2329
|
|
||||||
catch_exit () {
|
|
||||||
cleanup
|
|
||||||
kill -INT "$$"
|
|
||||||
}
|
|
||||||
|
|
||||||
# shellcheck disable=SC2329
|
|
||||||
cleanup () {
|
|
||||||
loginfo "Cleaning up."
|
|
||||||
pcie_disable
|
|
||||||
loginfo "Unmounting drives."
|
|
||||||
exec 1>/dev/null 2>&1
|
|
||||||
umount /mnt/"$ticket_number"
|
|
||||||
umount "/mnt/dest"
|
|
||||||
trap - EXIT
|
|
||||||
trap - INT
|
|
||||||
}
|
|
||||||
|
|
||||||
trap catch_sigint SIGINT
|
|
||||||
trap catch_exit EXIT
|
|
||||||
|
|
||||||
get_netid () {
|
|
||||||
netid=
|
|
||||||
while [[ $netid =~ ^\s*$ ]];
|
|
||||||
do
|
|
||||||
loginput "Please enter your r-account netid: "
|
|
||||||
read -r netid
|
|
||||||
logresponse "$netid"
|
|
||||||
if [[ $netid =~ ^\s*$ ]];
|
|
||||||
then
|
|
||||||
logwarn "Your netid cannot be blank."
|
|
||||||
else
|
|
||||||
local ret_value=$(kinit "$netid"@EGR.MSU.EDU >&3; echo $?)
|
|
||||||
if [[ ! $ret_value = "0" ]]
|
|
||||||
then
|
|
||||||
kdestroy
|
|
||||||
netid=
|
|
||||||
logwarn "Error when authenticating netid $netid."
|
|
||||||
else
|
|
||||||
clear
|
|
||||||
loginfo "Authenticated as user $netid."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
get_ticket () {
|
|
||||||
ticket_number=
|
|
||||||
|
|
||||||
loginfo "Please enter the ticket number that corresponds to this backup."
|
|
||||||
loginfo "Allowed characters: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -, _"
|
|
||||||
loginfo "Examples: 12345, 12345-1, 12345_2"
|
|
||||||
|
|
||||||
loginput "Ticket number: "
|
|
||||||
read -r ticket_number
|
|
||||||
logresponse "$ticket_number"
|
|
||||||
if [[ $ticket_number =~ ^\s*$ ]];
|
|
||||||
then
|
|
||||||
ticket_number="UNKNWN"
|
|
||||||
logwarn "Starting with no ticket number specified."
|
|
||||||
logwarn "Backup will be stored under $ticket_number."
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
mount_remote () {
|
|
||||||
mkdir -p /mnt/dest
|
|
||||||
if mount -t cifs -o user="$netid",sec=krb5i "//reinstallbackups/reinstallbackups" /mnt/dest
|
|
||||||
then
|
|
||||||
while [ -d /mnt/dest/"$ticket_number" ];
|
|
||||||
do
|
|
||||||
logwarn "Backup directory /mnt/dest/$ticket_number already exists."
|
|
||||||
loginput "Enter another ticket number: "
|
|
||||||
read -r ticket_number
|
|
||||||
logresponse "$ticket_number"
|
|
||||||
if [[ $ticket_number =~ ^\s*$ ]];
|
|
||||||
then
|
|
||||||
ticket_number="UNKNWN"
|
|
||||||
logwarn "Starting with no ticket number specified."
|
|
||||||
logwarn "Backup will be stored under $ticket_number."
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if ! mkdir -p /mnt/dest/"$ticket_number"; then
|
|
||||||
logerror "Insufficient permissions to write in //reinstallbackups/reinstallbackups"
|
|
||||||
exit
|
|
||||||
else
|
|
||||||
logdir=/mnt/dest/"$ticket_number"
|
|
||||||
cp "$log" "$logdir"/log_"$ticket_number"_"$start_time".log
|
|
||||||
cp "$log_x" "$logdir"/log_x_"$ticket_number"_"$start_time".log
|
|
||||||
log="$logdir"/log_"$ticket_number"_"$start_time".log
|
|
||||||
log_x="$logdir"/log_x_"$ticket_number"_"$start_time".log
|
|
||||||
exec 1>>"$log_x" 2>&1
|
|
||||||
set -x
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
logerror "Failed to mount remote DECS drive. Stopping"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
get_partition () {
|
|
||||||
partition=
|
|
||||||
echo "- - -" | sudo tee /sys/class/scsi_host/host*/scan >/dev/null
|
|
||||||
echo 1 | sudo tee /sys/class/block/sd?/device/rescan >/dev/null
|
|
||||||
pcie_enable
|
|
||||||
echo 1 | sudo tee /sys/class/block/nvme?/device/rescan >/dev/null
|
|
||||||
|
|
||||||
loginfo "Listing current attached devices and partitions..."
|
|
||||||
loginfo ""
|
|
||||||
loginfo "$(lsblk -o NAME,SIZE,FSTYPE,LABEL,MODEL,VENDOR | grep -E '^NAME|sd[a-z]|nvme[0-9]')"
|
|
||||||
loginfo ""
|
|
||||||
loginput "Which partition would you like to back up? (Type 'help' for help.)"
|
|
||||||
|
|
||||||
while [[ $partition =~ ^\s*$ ]];
|
|
||||||
do
|
|
||||||
read -r partition
|
|
||||||
logresponse "$partition"
|
|
||||||
while [[ ! $partition =~ ^sd[a-z][0-9]+$ ]] && [[ ! $partition =~ ^nvme[0-9]n[0-9]p[0-9]+$ ]];
|
|
||||||
do
|
|
||||||
if [[ $partition = "help" ]];
|
|
||||||
then
|
|
||||||
loginfo "The UNIX filesystem thinks of storage devices as directories, which are under /dev/"
|
|
||||||
loginfo "Partitions are numbered entries beneath a device."
|
|
||||||
loginfo "If you have a SATA connection, you will be looking for sd{a-z}{1-9}. (i.e. sda1)"
|
|
||||||
loginfo "If you have a NVME connection, you will be looking for nvme0n1p{1-9}. (i.e. nvme0n1p2)"
|
|
||||||
else
|
|
||||||
logwarn "Invalid format, partition should follow naming conventions. (i.e. sd{a-z}{1-9}, nvme0n1p{1-9})"
|
|
||||||
fi
|
|
||||||
read -r partition
|
|
||||||
logresponse "$partition"
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -e /dev/"$partition" ];
|
|
||||||
then
|
|
||||||
loginfo "Picking partition /dev/$partition."
|
|
||||||
else
|
|
||||||
logwarn "/dev/$partition does not exist, please ensure you are typing the partition name correctly."
|
|
||||||
partition=
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
backup_partition () {
|
|
||||||
loginfo "Mounting /dev/$partition read-only."
|
|
||||||
mkdir -p /mnt/"$ticket_number"
|
|
||||||
if ! mount -o ro /dev/"$partition" /mnt/"$ticket_number"
|
|
||||||
then
|
|
||||||
logerror "Failed to mount /dev/$partition. Stopping"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
local destination=/mnt/dest/"$ticket_number"/"$partition"
|
|
||||||
if ! mkdir -p "$destination"; then
|
|
||||||
logerror "Insufficient permissions to write in $destination"
|
|
||||||
umount /mnt/"$ticket_number"
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
loginfo "Backing up /dev/$partition to $destination."
|
|
||||||
loginfo "This may take a while!"
|
|
||||||
|
|
||||||
local ret_value=$(rsync -avxzSHPL --progress /mnt/"$ticket_number"/ "$destination"/ >&3; echo $?)
|
|
||||||
if [[ ! $ret_value = "0" ]]
|
|
||||||
then
|
|
||||||
case $ret_value in
|
|
||||||
"23")
|
|
||||||
logwarn "Rsync finished but some files could not be transferred. Check the log for details."
|
|
||||||
;;
|
|
||||||
|
|
||||||
"24")
|
|
||||||
logwarn "Rsync finished but some files vanished during transfer. Check the log for details."
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
logerror "Rsync failed with exit code $ret_value. Please contact your supervisor."
|
|
||||||
umount /mnt/"$ticket_number"
|
|
||||||
exit
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
else
|
|
||||||
loginfo "Finished backing up /dev/$partition to $destination."
|
|
||||||
fi
|
|
||||||
|
|
||||||
umount /mnt/"$ticket_number"
|
|
||||||
}
|
|
||||||
|
|
||||||
#Rescan for PCIe devices
|
|
||||||
pcie_enable (){
|
|
||||||
echo 1 > /sys/bus/pci/rescan
|
|
||||||
loginfo "Enabled PCIe card, sleeping for 5 seconds."
|
|
||||||
sleep 5
|
|
||||||
}
|
|
||||||
|
|
||||||
#Remove the PCIe NVMe readrer
|
|
||||||
# shellcheck disable=SC2329
|
|
||||||
pcie_disable (){
|
|
||||||
echo 1 > /sys/bus/pci/devices/0000:02:00.0/remove
|
|
||||||
echo 1 > /sys/bus/pci/devices/0000:03:00.0/remove
|
|
||||||
loginfo "Disabled PCIe card."
|
|
||||||
}
|
|
||||||
|
|
||||||
main (){
|
|
||||||
get_netid
|
|
||||||
loginfo ""
|
|
||||||
|
|
||||||
get_ticket
|
|
||||||
loginfo ""
|
|
||||||
|
|
||||||
mount_remote
|
|
||||||
loginfo ""
|
|
||||||
|
|
||||||
get_partition #sets $partition to one of the /dev/xyz partitions.
|
|
||||||
loginfo ""
|
|
||||||
|
|
||||||
loginfo "Starting process for backing up $partition to /mnt/dest/$ticket_number."
|
|
||||||
confirm_message "Please type 'confirm' to begin." "confirm"
|
|
||||||
loginfo ""
|
|
||||||
|
|
||||||
backup_partition
|
|
||||||
loginfo ""
|
|
||||||
loginfo "Finished backing up $partition to /mnt/dest/$ticket_number."
|
|
||||||
loginfo ""
|
|
||||||
|
|
||||||
cleanup
|
|
||||||
}
|
|
||||||
|
|
||||||
main
|
|
||||||
+4
-4
@@ -246,22 +246,22 @@ get_device () {
|
|||||||
do
|
do
|
||||||
read -r device
|
read -r device
|
||||||
logresponse "$device"
|
logresponse "$device"
|
||||||
while [[ ! $device =~ ^sd[a-z]$ ]] && [[ ! $device =~ ^nvme0n[0-9]$ ]];
|
while [[ ! $device =~ ^sd[a-z]$ ]] && [[ ! $device =~ ^nvme[0-9]n[0-9]$ ]];
|
||||||
do
|
do
|
||||||
if [[ $device = "help" ]];
|
if [[ $device = "help" ]];
|
||||||
then
|
then
|
||||||
loginfo "The UNIX filesystem thinks of storage devices as directories, which are under /dev/"
|
loginfo "The UNIX filesystem thinks of storage devices as directories, which are under /dev/"
|
||||||
loginfo "If you have a SATA connection, you will be looking for sd{a-z}."
|
loginfo "If you have a SATA connection, you will be looking for sd{a-z}."
|
||||||
loginfo "If you have a NVME connection, you will be looking for nvme0n{0-9}."
|
loginfo "If you have a NVME connection, you will be looking for nvme{0-9}n{0-9}."
|
||||||
else
|
else
|
||||||
logwarn "Invalid format, device should follow naming conventions. (i.e. sd{a-z}, nvme0n{0-9})"
|
logwarn "Invalid format, device should follow naming conventions. (i.e. sd{a-z}, nvme{0-9}n{0-9})"
|
||||||
fi
|
fi
|
||||||
read -r device
|
read -r device
|
||||||
logresponse "$device"
|
logresponse "$device"
|
||||||
done
|
done
|
||||||
if [[ $devicetype = "HDD_SATA" ]] || [[ $devicetype = "SSD_SATA" ]];
|
if [[ $devicetype = "HDD_SATA" ]] || [[ $devicetype = "SSD_SATA" ]];
|
||||||
then
|
then
|
||||||
if [[ $device =~ ^nvme0n[0-9]$ ]];
|
if [[ $device =~ ^nvme[0-9]n[0-9]$ ]];
|
||||||
then
|
then
|
||||||
logwarn "Device was specified to be a SATA HDD or SSD, but a NVME device was chosen."
|
logwarn "Device was specified to be a SATA HDD or SSD, but a NVME device was chosen."
|
||||||
device=
|
device=
|
||||||
|
|||||||
+4
-4
@@ -183,22 +183,22 @@ get_device () {
|
|||||||
do
|
do
|
||||||
read -r device
|
read -r device
|
||||||
logresponse "$device"
|
logresponse "$device"
|
||||||
while [[ ! $device =~ ^sd[a-z]$ ]] && [[ ! $device =~ ^nvme0n[0-9]$ ]];
|
while [[ ! $device =~ ^sd[a-z]$ ]] && [[ ! $device =~ ^nvme[0-9]n[0-9]$ ]];
|
||||||
do
|
do
|
||||||
if [[ $device = "help" ]];
|
if [[ $device = "help" ]];
|
||||||
then
|
then
|
||||||
loginfo "The UNIX filesystem thinks of storage devices as directories, which are under /dev/"
|
loginfo "The UNIX filesystem thinks of storage devices as directories, which are under /dev/"
|
||||||
loginfo "If you have a SATA connection, you will be looking for sd{a-z}."
|
loginfo "If you have a SATA connection, you will be looking for sd{a-z}."
|
||||||
loginfo "If you have a NVME connection, you will be looking for nvme0n{0-9}."
|
loginfo "If you have a NVME connection, you will be looking for nvme{0-9}n{0-9}."
|
||||||
else
|
else
|
||||||
logwarn "Invalid format, device should follow naming conventions. (i.e. sd{a-z}, nvme0n{0-9})"
|
logwarn "Invalid format, device should follow naming conventions. (i.e. sd{a-z}, nvme{0-9}n{0-9})"
|
||||||
fi
|
fi
|
||||||
read -r device
|
read -r device
|
||||||
logresponse "$device"
|
logresponse "$device"
|
||||||
done
|
done
|
||||||
if [[ $devicetype = "HDD_SATA" ]] || [[ $devicetype = "SSD_SATA" ]];
|
if [[ $devicetype = "HDD_SATA" ]] || [[ $devicetype = "SSD_SATA" ]];
|
||||||
then
|
then
|
||||||
if [[ $device =~ ^nvme0n[0-9]$ ]];
|
if [[ $device =~ ^nvme[0-9]n[0-9]$ ]];
|
||||||
then
|
then
|
||||||
logwarn "Device was specified to be a SATA HDD or SSD, but a NVME device was chosen."
|
logwarn "Device was specified to be a SATA HDD or SSD, but a NVME device was chosen."
|
||||||
device=
|
device=
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
[.ShellClassInfo]
|
||||||
|
CLSID={645FF040-5081-101B-9F08-00AA002F954E}
|
||||||
|
LocalizedResourceName=@%SystemRoot%\system32\shell32.dll,-8964
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
netid=
|
||||||
|
echo "Enter netid: "
|
||||||
|
read -r netid
|
||||||
|
while [[ $netid =~ ^\s*$ ]];
|
||||||
|
do
|
||||||
|
echo "Your netid cannot be blank."
|
||||||
|
echo "Enter netid: "
|
||||||
|
|
||||||
|
done
|
||||||
|
if ! kinit "$netid"@EGR.MSU.MSU
|
||||||
|
then
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
mkdir /mnt/decs
|
||||||
|
mount -t cifs -o user="$netid",sec=krb5i "//decs/decs/support/dban_logs" /mnt/decs
|
||||||
|
echo "test" > "/mnt/decs/test.txt"
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
[Trash Info]
|
||||||
|
Path=test_network_drive.sh
|
||||||
|
DeletionDate=2026-04-23T11:20:12
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
alpine-extended-3.23.3 260127
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user