-
Notifications
You must be signed in to change notification settings - Fork 0
/
setup.sh
181 lines (167 loc) · 6.42 KB
/
setup.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
#!/bin/bash
# Script Made By Dachi Wolf
# https://github.com/SexyWerewolf
# Color definitions for better appearance
COLOR_RESET="\033[0m"
COLOR_BOLD="\033[1m"
COLOR_GREEN="\033[32m"
COLOR_YELLOW="\033[33m"
COLOR_RED="\033[31m"
COLOR_CYAN="\033[36m"
# Ensure the script is run with root privileges
if [ "$(id -u)" -ne "0" ]; then
echo -e "${COLOR_RED}This script must be run as root.${COLOR_RESET}"
exit 1
fi
# Get the actual user running the script
if [ -z "$SUDO_USER" ]; then
echo -e "${COLOR_RED}This script must be run with sudo.${COLOR_RESET}"
exit 1
fi
USER_HOME=$(eval echo ~${SUDO_USER})
# Define paths
USER_BIN_DIR="$USER_HOME/bin"
BOXADD_PATH="/usr/local/bin/boxadd"
AUTO_ARCHIVE_LINKS_DIR="$USER_HOME/archivebox/auto_archive_links"
LINKS_FILE="$AUTO_ARCHIVE_LINKS_DIR/links.sh"
LOGS_FILE="$AUTO_ARCHIVE_LINKS_DIR/logs.log"
RUN_SCRIPT_PATH="$AUTO_ARCHIVE_LINKS_DIR/run-script.sh"
# Function to create the boxadd script
create_boxadd_script() {
echo -e "${COLOR_GREEN}Creating boxadd script...${COLOR_RESET}"
echo "#!/bin/bash
# Check if URL argument is provided
if [ -z \"\$1\" ]; then
echo \"Usage: boxadd <URL>\"
exit 1
fi
URL=\"\$1\"
DOMAIN=\$(echo \"\$URL\" | awk -F[/:] '{print \$4}')
# Define paths
LINKS_FILE=\"$AUTO_ARCHIVE_LINKS_DIR/links.sh\"
LOG_FILE=\"$AUTO_ARCHIVE_LINKS_DIR/logs.log\"
# Function to add URL to the links.sh file
add_url() {
local url=\"\$1\"
# Append the URL
echo \"docker exec --user=archivebox archivebox-archivebox-1 archivebox add '\$url'\" >> \"\$LINKS_FILE\"
}
# Add URL to links.sh
add_url \"\$URL\"
# Log URL addition
echo \"Added URL: \$URL\" >> \"\$LOG_FILE\"
" | tee "$BOXADD_PATH" > /dev/null
chmod +x "$BOXADD_PATH"
chown "$SUDO_USER:$SUDO_USER" "$BOXADD_PATH"
echo -e "${COLOR_GREEN}Created boxadd script at $BOXADD_PATH${COLOR_RESET}"
}
# Function to create directories and files
create_directories_and_files() {
echo -e "${COLOR_GREEN}Setting up directories and files...${COLOR_RESET}"
if [ -d "$AUTO_ARCHIVE_LINKS_DIR" ]; then
echo -e "${COLOR_YELLOW}Directory $AUTO_ARCHIVE_LINKS_DIR already exists.${COLOR_RESET}"
# Prompt for reset
read -p "Do you want to reset the data in links.sh and logs.log? (y/n): " RESET
if [ "$RESET" == "y" ]; then
echo -e "\n${COLOR_YELLOW}Resetting links.sh and logs.log...${COLOR_RESET}"
echo -n "" > "$LINKS_FILE" # Clear links.sh
echo -n "" > "$LOGS_FILE" # Clear logs.log
fi
else
echo -e "${COLOR_GREEN}Creating directory $AUTO_ARCHIVE_LINKS_DIR...${COLOR_RESET}"
mkdir -p "$AUTO_ARCHIVE_LINKS_DIR"
chown "$SUDO_USER:$SUDO_USER" "$AUTO_ARCHIVE_LINKS_DIR"
echo -e "${COLOR_GREEN}Creating $LINKS_FILE...${COLOR_RESET}"
touch "$LINKS_FILE"
chown "$SUDO_USER:$SUDO_USER" "$LINKS_FILE"
echo -e "${COLOR_GREEN}Creating $LOGS_FILE...${COLOR_RESET}"
touch "$LOGS_FILE"
chown "$SUDO_USER:$SUDO_USER" "$LOGS_FILE"
fi
echo -e "${COLOR_GREEN}Creating run-script.sh...${COLOR_RESET}"
echo "#!/bin/bash
# Define paths
LINKS_FILE=\"$LINKS_FILE\"
LOG_FILE=\"$LOGS_FILE\"
# Write logs
echo \"Running archive job at \$(date)\" >> \"\$LOG_FILE\"
# Read and execute each line in the script file
while IFS= read -r line; do
if [[ \$line == docker* ]]; then
url=\$(echo \"\$line\" | awk -F\"'\" '{print \$2}')
echo \"Adding URL: \$url\" >> \"\$LOG_FILE\"
eval \"\$line\"
if [ \$? -eq 0 ]; then
echo \"Successfully archived: \$url\" >> \"\$LOG_FILE\"
else
echo \"Failed to archive: \$url\" >> \"\$LOG_FILE\"
fi
else
echo \"\$line\"
fi
done < \"$LINKS_FILE\"
# Log completion
echo \"Archive job completed at \$(date)\" >> \"\$LOG_FILE\"
" > "$RUN_SCRIPT_PATH"
chmod +x "$RUN_SCRIPT_PATH"
chown "$SUDO_USER:$SUDO_USER" "$RUN_SCRIPT_PATH"
echo -e "${COLOR_GREEN}Created run-script.sh at $RUN_SCRIPT_PATH${COLOR_RESET}"
}
# Function to setup the cron job
setup_cron() {
while true; do
echo -e "${COLOR_GREEN}Enter the hours (24-hour format) for the cron job, separated by periods (e.g., 18 for 6 PM):${COLOR_RESET}"
read -p "Enter the hours: " HOURS
# Prepare cron jobs
CRON_JOBS=""
IFS='.' read -r -a TIME_ARRAY <<< "$HOURS"
valid_hours=true
for TIME in "${TIME_ARRAY[@]}"; do
# Validate the hour
if [[ "$TIME" =~ ^[0-9]+$ ]] && [ "$TIME" -ge 0 ] && [ "$TIME" -le 23 ]; then
# Use hours only, default minutes to 0
HOUR=${TIME}
# Add to cron jobs only if not already present
if [[ ! "$CRON_JOBS" =~ "0 $HOUR * * *" ]]; then
CRON_JOBS+="0 $HOUR * * * $RUN_SCRIPT_PATH "
fi
else
echo -e "${COLOR_RED}Invalid hour: $TIME. Please enter hours between 0 and 23.${COLOR_RESET}"
valid_hours=false
break
fi
done
if [ "$valid_hours" == true ]; then
break
fi
done
# Remove trailing space
CRON_JOBS=$(echo "$CRON_JOBS" | sed 's/ $//')
# Clear existing cron jobs related to this script
crontab -u "$SUDO_USER" -l | grep -v "$RUN_SCRIPT_PATH" | crontab -u "$SUDO_USER" -
# Add the new cron jobs
if [ -n "$CRON_JOBS" ]; then
(crontab -u "$SUDO_USER" -l 2>/dev/null; echo "$CRON_JOBS") | crontab -u "$SUDO_USER" -
echo -e "${COLOR_GREEN}Cron job(s) added: $CRON_JOBS${COLOR_RESET}"
else
echo -e "${COLOR_YELLOW}No valid hours provided. No cron jobs added.${COLOR_RESET}"
fi
}
# Main script logic
echo -e "${COLOR_BOLD}Starting setup...${COLOR_RESET}"
create_boxadd_script
create_directories_and_files
# Prompt to enable cron job
read -p "Do you want to enable the cron job? (y/n): " ENABLE_CRON
if [ "$ENABLE_CRON" == "y" ]; then
setup_cron
else
echo -e "${COLOR_YELLOW}Cron job not enabled. No cron job will be set up.${COLOR_RESET}"
fi
# Final message showing the main location of the script
echo
echo -e "${COLOR_BOLD}Setup complete.${COLOR_RESET}"
echo
echo -e "\n${COLOR_CYAN}${COLOR_BOLD}=====================================================${COLOR_RESET}"
echo -e "${COLOR_CYAN}${COLOR_BOLD}Main location of the script:${COLOR_GREEN} $AUTO_ARCHIVE_LINKS_DIR${COLOR_RESET}"
echo -e "${COLOR_CYAN}${COLOR_BOLD}=====================================================${COLOR_RESET}"