diff --git a/utils/Containerfile b/utils/Containerfile new file mode 100644 index 0000000..072c20c --- /dev/null +++ b/utils/Containerfile @@ -0,0 +1,62 @@ +FROM perl:5.40.1 As base + +LABEL author="sgoti" \ + email="lyunpaw@gmail.com" \ + project="Hacker Public Radio" \ + forge="https://repo.anhonesthost.net/HPR" + +ARG unprivilegedUser="janitor" + +RUN apt update && apt upgrade --yes; + +RUN apt install --no-install-recommends sqlite3 git --yes \ + && rm --recursive --force /var/lib/apt/lists/*; + +RUN mkdir --verbose --parent /opt/hpr /tmp/hpr; + +RUN groupadd --system ${unprivilegedUser} \ + && useradd --system --no-log-init --gid ${unprivilegedUser} ${unprivilegedUser}; + +RUN chown --recursive ${unprivilegedUser}:${unprivilegedUser} /opt/hpr \ + && chown --recursive ${unprivilegedUser}:${unprivilegedUser} /tmp/hpr; + +#Bill of particulars. + +##Meta::CPAN (Comprehensive Perl Archive Network) +RUN cpanm Config::General \ + DBD::SQLite \ + DBI \ + Data::Dumper \ + Date::Calc \ + Date::Parse \ + DateTime \ + DateTime::Duration \ + DateTime::Format::Duration \ + DateTime::TimeZone \ + HTML::Entities \ + JSON \ + Template \ + Template::Filters; + +##Included perl core modules (standard library). +##Carp +##Cwd +##Getopt::Long +##Pod::Usage +##File::Copy + +USER ${unprivilegedUser} + +WORKDIR /opt/hpr + +RUN git clone https://repo.anhonesthost.net/HPR/hpr-tools.git \ + && git clone https://repo.anhonesthost.net/HPR/hpr_hub.git \ + && git clone https://repo.anhonesthost.net/HPR/hpr_generator.git \ + && git clone https://repo.anhonesthost.net/HPR/hpr_documentation.git; + +WORKDIR /opt/hpr/hpr-tools/Community_News/ +RUN ln --symbolic /opt/hpr/hpr_generator/utils/mysql2sqlite /opt/hpr/hpr-tools/Community_News/mysql2sqlite; +RUN ./collect_HPR_database; + +CMD bash; + diff --git a/utils/button_hpr_container.sh b/utils/button_hpr_container.sh new file mode 100755 index 0000000..4db0232 --- /dev/null +++ b/utils/button_hpr_container.sh @@ -0,0 +1,136 @@ +#!/usr/bin/env bash +#License: GPL v3 +#see . + +#Name: button_podman_make_shownotes.sh +#Purpose: build/run HPR Container. +#Version: beta 0.01 +#Author: SGOTI (Some Guy On The Internet) +#Email: Lyunpaw@gmail.com +#Date: 2025-04-19 + +#declaration: +declare bindir="/usr/bin/" +declare podman="${bindir}podman" +declare echo="builtin echo -e" +declare unprivilegedUser="janitor" +declare date="${bindir}date" +declare flags +declare OPTIND +declare -A containerBulidProperties + +declare currentMonth +declare nextMonth +declare currentYear + +#start: +currentMonth=$(${date} +%m) +currentYear=$(${date} +%Y) + +if [[ ${currentmonth} -gt 0 ]] && [[ ${currentmonth} -le 11 ]]; then + nextMonth="(($(${date} +%m)+01))" #Incomplete: Can return single-digit integer; must be a double-digit integer. +else + nextMonth="01" +fi + +containerBulidProperties=( +"containerFile" "/path/to/Containerfile" +"hostMountDir01" "path/to/project/directory" +"hostMountDir02" "/tmp/" +"containerMountDir01" "/opt/hpr/" +"containerMountDir02" "/tmp/hpr/" +"containerImageTag" "testing:0.1" +"pullNewImage" "podman pull docker.io/library/perl" +"recordingDate" "$(${date} -d "${currentYear}/${currentMonth}/01")" +"recordingTimeStart" "15:00" #TZ: UTC +"recordingTimeEnd" "17:00" #TZ: UTC +) + +function runHPRContainer () { + local makeEmail #Incomplete: + makeEmail="./make_email -month=${containerBulidProperties[recordingDate]} -start=15:00 -end=17:00 -out=/tmp/hpr/%semail.txt" + local makeShownotes #Incomplete: + makeShownotes="/opt/hpr/src/hpr-tools/Community_News/make_shownotes -from=${containerBulidProperties[recordingDate]} -full=/tmp/hpr/%sfull_shownotes.html -mail -comments" + + ${podman} run \ + --mount type=bind,src=${containerBulidProperties[hostMountDir02]},dst=${containerBulidProperties[containerMountDir02]},rw=true \ + --label="Project"="HPR" \ + --label="Forge"="https://repo.anhonesthost.net/HPR/" \ + --interactive \ + --tty \ + --rm=true \ + --privileged=false \ + --pull="never" \ + --cgroups=enabled \ + --cgroupns=private \ + --uts=private \ + --pid=private \ + --memory="32m" \ + --memory-reservation="16m" \ + --hostname="hpr" \ + --name="hpr_project" \ + --user="${unprivilegedUser}" \ + ${containerBulidProperties[containerImageTag]} bash; + unset currentMonth + unset currentYear + return; +} + +function buildNewContainerImage () { + local containerNameAndVersionNumber="hpr_image:5.40.1" + if [[ -f "${containerBulidProperties[containerFile]}" ]]; then + ${echo} "Building new container image...\nThis may take several minutes.\ + \nThis is a non interactive build process, so you can return when \ + it's completed."; + ${podman} build --file="${containerBulidProperties[containerFile]}" --tag="${containerBulidProperties[containerImageTag]}"; + else + ${echo} 'Dont forget to assign the ${containerBulidProperties[containerFile]} ;). The Containerfile is needed to build the container image.' + fi + return; +} + +function help () { + ${echo} "$0 [-hbpq]\n\t[-h] help\n\t[-b] build new container\n\t[-p] pull new perl image\n\t[-q] quit"; + return; +} + +while getopts 'hbpq' flags; do + case "${flags}" in + h) help; exit 0; + ;; + + i) ${echo} "Work in progress... :D"; break; + ;; + + b) buildNewContainerImage; + ;; + + p) ${containerBulidProperties[pullNewImage]}; exit 0; + ;; + + e) ${echo} "Work in progress... :D"; break; + ;; + + s) ${echo} "Work in progress... :D"; break; + ;; + + q) + ${echo} "Quitting script."; break; + ;; + + *) + ${echo} "Good Heavens! Wrong input."; help; exit 1 + ;; + esac +done +shift $((OPTIND-1)) + +if [[ -z ${1} ]]; then help; runHPRContainer; fi; + +unset echo +unset flags +unset podman +unset OPTIND +unset containerBulidProperties +exit 0 +