Compare commits

...

8 Commits

  1. 5
      .install/bin/pdm-build
  2. 2
      debian/Containerfile
  3. 5
      debian/assets/bash/bash.aliases
  4. 3
      debian/assets/bash/bash.bashrc
  5. 2
      debian/assets/bin/dir
  6. 2
      debian/assets/bin/rsyn
  7. 350
      debian/assets/nanorc
  8. 81
      nextcloud/Containerfile
  9. 2
      nextcloud/Systemdfile
  10. 1
      nextcloud/assets/bin/db-make
  11. 2
      nextcloud/assets/bugfix/cronfix
  12. 1
      nextcloud/assets/config/misc.config.php
  13. 11
      nextcloud/assets/crontab
  14. 14
      nextcloud/assets/db-updown.service
  15. 0
      nextcloud/assets/nextcloud/.versions
  16. 4
      nextcloud/assets/php/php.ini
  17. 9
      nextcloud/assets/systemd/nextcloud-cron.service
  18. 9
      nextcloud/assets/systemd/nextcloud-cron.timer
  19. 12
      nextcloud/assets/systemd/nextcloud-db-dump.service
  20. 8
      nextcloud/assets/systemd/nextcloud-db-dump.timer
  21. 16
      nextcloud/assets/systemd/nextcloud-db-reload.service
  22. 12
      nextcloud/assets/systemd/nextcloud-scan.service
  23. 10
      nextcloud/assets/systemd/nextcloud-scan.timer

5
.install/bin/pdm-build

@ -88,6 +88,11 @@ if [[ $opt_squash -eq 1 ]]; then
fi
if [[ $opt_redo -eq 1 ]]; then
buildopts="$buildopts --no-cache"
registry=$(grep -m 1 "^FROM " Containerfile | sed -E 's/FROM ([a-zA-Z0-9.]*)(\/.*)?/\1/')
if [[ "$registry" != 'localhost' ]]; then
buildopts="$buildopts --pull"
fi
fi
# tell buildah to build images in docker format instead of the default OCI format

2
debian/Containerfile

@ -31,7 +31,7 @@ RUN apt update -y && \
# Set configuration
COPY assets/nanorc /etc/nanorc
COPY assets/bash.bashrc /etc/bash.bashrc
COPY assets/bash/ /etc/
# copy custom scripts
COPY assets/bin/ /usr/local/bin/

5
debian/assets/bash/bash.aliases

@ -0,0 +1,5 @@
alias ls='ls --color=auto'
alias dir='ls -lhAF --color=auto'
alias rsyn='rsync -vaSHh'
alias less='less -FX'
alias diff='diff -d --color=auto'

3
debian/assets/bash.bashrc → debian/assets/bash/bash.bashrc

@ -84,4 +84,5 @@ if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/command-no
}
fi
alias ls='ls --color=auto'
# Source aliases
. /etc/bash.aliases

2
debian/assets/bin/dir

@ -1,2 +0,0 @@
#!/bin/bash
ls -lhAF --color=auto "$@"

2
debian/assets/bin/rsyn

@ -1,2 +0,0 @@
#!/bin/bash
rsync -vaSH "$@"

350
debian/assets/nanorc

@ -1,37 +1,331 @@
## Include all existing syntax definitions
include "/usr/share/nano/*.nanorc"
## Sample initialization file for GNU nano.
##
## For the options that take parameters, the default value is shown.
## Other options are unset by default. To make sure that an option
## is disabled, you can use "unset <option>".
##
## Characters that are special in a shell should not be escaped here.
## Inside string parameters, quotes should not be escaped -- the last
## double quote on the line will be seen as the closing quote.
## Make 'nextword' (Ctrl+Right) and 'chopwordright' (Ctrl+Delete)
## stop at word ends instead of at beginnings.
# set afterends
## When soft line wrapping is enabled, make it wrap lines at blanks
## (tabs and spaces) instead of always at the edge of the screen.
# set atblanks
## Automatically indent a newly created line to the same number of
## tabs and/or spaces as the preceding line -- or as the next line
## if the preceding line is the beginning of a paragraph.
# set autoindent
## Back up files to the current filename plus a tilde.
# set backup
## The directory to put unique backup files in.
# set backupdir ""
## Use bold text instead of reverse video text.
set boldtext
## Treat any line with leading whitespace as the beginning of a paragraph.
# set bookstyle
## The characters treated as closing brackets when justifying paragraphs.
## This may not include any blank characters. Only closing punctuation,
## optionally followed by these closing brackets, can end sentences.
# set brackets ""')>]}"
## Automatically hard-wrap the current line when it becomes overlong.
# set breaklonglines
## Do case-sensitive searches by default.
# set casesensitive
## Constantly display the cursor position in the status bar or minibar.
# set constantshow
## Use cut-from-cursor-to-end-of-line by default.
set cutfromcursor
## Display line numbers to the left of the text.
## Do not use the line below the title bar, leaving it entirely blank.
# set emptyline
## Set the target width for automatic hard-wrapping and for justifying
## paragraphs. If the specified value is 0 or less, the wrapping point
## will be the terminal's width minus this number.
# set fill -8
## Draw a vertical stripe at the given column, to help judge text width.
## (This option does not have a default value.)
# set guidestripe 75
## Remember the used search/replace strings for the next session.
set historylog
## Display a "scrollbar" on the righthand side of the edit window.
# set indicator
## Scroll the buffer contents per half-screen instead of per line.
# set jumpyscrolling
## Display line numbers to the left (and any anchors in the margin).
set linenumbers
## Enable vim-style lock-files.
## Enable vim-style lock-files. This is just to let a vim user know you
## are editing a file [s]he is trying to edit and vice versa. There are
## no plans to implement vim-style undo state in these files.
set locking
## Enable soft line wrapping (AKA full-line display).
set softwrap
## Make the Home key smarter.
## Fall back to slow libmagic to try and determine an applicable syntax.
# set magic
## The opening and closing brackets that are found by a matching-bracket
## search. This may not contain blank characters. The opening brackets
## must come before the closing ones, and they must be in the same order.
# set matchbrackets "(<[{)>]}"
## Suppress the title bar and show the filename plus a cursor-position
## percentage in the space of the status bar.
set minibar
## Enable mouse support, if available for your system. When enabled,
## mouse clicks can be used to place the cursor, set the mark (with a
## double click), and execute shortcuts. The mouse will work in the
## X Window System, and on the console when gpm is running.
set mouse
## Switch on multiple file buffers (inserting a file will put it into
## a separate buffer).
# set multibuffer
## Don't convert files from DOS/Mac format.
# set noconvert
## Don't display the helpful shortcut lists at the bottom of the screen.
# set nohelp
## Don't automatically add a newline when a file does not end with one.
# set nonewlines
## Set operating directory. nano will not read or write files outside
## this directory and its subdirectories. Also, the current directory
## is changed to here, so any files are inserted from this dir. A blank
## string means the operating-directory feature is turned off.
# set operatingdir ""
## Remember the cursor position in each file for the next editing session.
# set positionlog
## Preserve the XON and XOFF keys (^Q and ^S).
# set preserve
## The characters treated as closing punctuation when justifying paragraphs.
## This may not contain blank characters. Only these closing punctuations,
## optionally followed by closing brackets, can end sentences.
# set punct "!.?"
## Make status-bar messages disappear after 1 keystroke instead of after 20.
# set quickblank
## The regular expression that matches quoting characters in email
## or line-comment introducers in source code. The default is:
# set quotestr "^([ ]*([!#%:;>|}]|//))+"
## Try to work around a mismatching terminfo terminal description.
# set rawsequences
## Fix Backspace/Delete confusion problem.
# set rebinddelete
## Do regular-expression searches by default.
## Regular expressions are of the extended type (ERE).
# set regexp
## Save a changed buffer automatically on exit; don't prompt.
# set saveonexit
## Put the cursor on the highlighted item in the file browser, and
## show the cursor in the help viewer; useful for people who use a
## braille display and people with poor vision.
# set showcursor
## Make the Home key smarter: when Home is pressed anywhere but at the
## very beginning of non-whitespace characters on a line, the cursor
## will jump to that beginning (either forwards or backwards). If the
## cursor is already at that position, it will jump to the true start
## of the line (the left edge).
set smarthome
## Enable soft line wrapping (AKA full-line display).
## Spread overlong lines over multiple screen lines.
set softwrap
## Allow nano to be suspended.
set suspendable
## Convert typed tabs to spaces.
## Use this spelling checker instead of the internal one. This option
## does not have a default value.
# set speller "aspell -x -c"
## Use the end of the title bar for some state flags: I = auto-indenting,
## M = mark, L = hard-wrapping long lines, R = recording, S = soft-wrapping.
set stateflags
## Use this tab size instead of the default; it must be greater than 0.
set tabsize 4
## Convert each typed tab to the fitting number of spaces.
set tabstospaces
## Give nano more "emacs-like" keybindings
unbind ^G all
unbind ^C all
unbind ^Y main
unbind ^_ main
unbind M-% main
unbind ^X main
unbind ^L main
unbind ^Q main
bind ^G cancel all
bind ^C exit all
bind ^Y paste main
bind ^_ undo main
bind M-% replace main
bind ^X refresh main
bind ^L help main
bind ^Q verbatim main
## Snip whitespace at the end of lines when justifying or hard-wrapping.
# set trimblanks
## Save files by default in Unix format (also when they were DOS or Mac).
set unix
## The two single-column characters used to display the first characters
## of tabs and spaces. 187 in ISO 8859-1 (0000BB in Unicode) and 183 in
## ISO-8859-1 (0000B7 in Unicode) seem to be good values for these.
## The default when in a UTF-8 locale:
# set whitespace "»·"
## The default otherwise:
# set whitespace ">."
## Detect word boundaries differently by treating punctuation
## characters as parts of words.
# set wordbounds
## The characters (besides alphanumeric ones) that should be considered
## as parts of words. This option does not have a default value. When
## set, it overrides option 'set wordbounds'.
# set wordchars "<_>."
## Let an unmodified Backspace or Delete erase the marked region (instead
## of a single character, and without affecting the cutbuffer).
# set zap
## Hide the bars plus help lines and use the whole terminal as edit area.
# set zero
## Paint the interface elements of nano. These are examples; there are
## no colors by default, except for errorcolor and spotlightcolor.
# set titlecolor bold,white,blue
# set promptcolor lightwhite,grey
# set statuscolor bold,white,green
# set errorcolor bold,white,red
# set spotlightcolor black,lightyellow
# set selectedcolor lightwhite,magenta
# set stripecolor ,yellow
# set scrollercolor cyan
# set numbercolor cyan
# set keycolor cyan
# set functioncolor green
## In root's .nanorc you might want to use:
# set titlecolor bold,white,magenta
# set promptcolor black,yellow
# set statuscolor bold,white,magenta
# set errorcolor bold,white,red
# set spotlightcolor black,orange
# set selectedcolor lightwhite,cyan
# set stripecolor ,yellow
# set scrollercolor magenta
# set numbercolor magenta
# set keycolor lightmagenta
# set functioncolor magenta
## === Syntax coloring ===
## For all details, see 'man nanorc', section SYNTAX HIGHLIGHTING.
## To include most of the existing syntax definitions, you can do:
include "/usr/share/nano/*.nanorc"
## Or you can select just the ones you need. For example:
# include "/usr/share/nano/html.nanorc"
# include "/usr/share/nano/python.nanorc"
# include "/usr/share/nano/sh.nanorc"
## In /usr/share/nano/extra/ you can find some syntaxes that are
## specific for certain distros or for some less common languages.
## If <Tab> should always produce four spaces when editing a Python file,
## independent of the settings of 'tabsize' and 'tabstospaces':
# extendsyntax python tabgives " "
## If <Tab> should always produce an actual TAB when editing a Makefile:
# extendsyntax makefile tabgives " "
## === Key bindings ===
## For all details, see 'man nanorc', section REBINDING KEYS.
## If you want to suspend nano with one keystroke (instead of with ^T^Z):
# bind ^Z suspend main
## The <Ctrl+Delete> keystroke deletes the word to the right of the cursor.
## On some terminals the <Ctrl+Backspace> keystroke produces ^H, which is
## the ASCII character for backspace, so it is bound by default to the
## backspace function. The <Backspace> key itself produces a different
## keycode, which is hard-bound to the backspace function. So, if you
## normally use <Backspace> for backspacing and not ^H, you can make
## <Ctrl+Backspace> delete the word to the left of the cursor with:
# bind ^H chopwordleft main
## For a more mnemonic Comment keystroke (overriding Cut-from-cursor):
# bind M-K comment main
## If you want ^L to just refresh the screen and not center the cursor:
# bind ^L refresh main
## When you sometimes type M-J instead of M-K, or M-T instead of M-R:
# unbind M-J main
# unbind M-T main
## (Those functions are still accessible through ^T^J and ^T^V.)
## For quickly uppercasing or lowercasing the word under or after the cursor.
## (These effectively select a word and pipe it through a sed command.)
#bind Sh-M-U "{nextword}{mark}{prevword}{execute}|sed 's/.*/\U&/'{enter}" main
#bind Sh-M-L "{nextword}{mark}{prevword}{execute}|sed 's/.*/\L&/'{enter}" main
## For copying a marked region to the system clipboard:
# bind Sh-M-T "{execute}|xsel -ib{enter}{undo}" main
## For snipping trailing blanks when you save a file:
# bind ^S "{execute}| sed 's/\s\+$//' {enter}{savefile}" main
## If you would like nano to have keybindings that are more "usual",
## such as ^O for Open, ^F for Find, ^H for Help, and ^Q for Quit,
## then uncomment these:
#bind ^X cut main
#bind ^C copy main
#bind ^V paste all
#bind ^Q exit all
#bind ^S savefile main
#bind ^W writeout main
#bind ^O insert main
#set multibuffer
#bind ^H help all
#bind ^H exit help
#bind ^F whereis all
#bind ^G findnext all
#bind ^B wherewas all
#bind ^D findprevious all
#bind ^R replace main
#unbind ^U all
#unbind ^N main
#unbind ^Y all
#unbind M-J main
#unbind M-T main
#bind ^A mark main
#bind ^P location main
#bind ^T gotoline main
#bind ^T gotodir browser
#bind ^T cutrestoffile execute
#bind ^L linter execute
#bind ^E execute main
#bind ^K "{mark}{end}{zap}" main
#bind ^U "{mark}{home}{zap}" main
#bind ^Z undo main
#bind ^Y redo main

81
nextcloud/Containerfile

@ -7,8 +7,8 @@ FROM localhost/debian
# -p (port) and -v (volume) both go host:container
LABEL config_default="\
-p 9080:80 \
-v $HOME/vol/nextcloud/files:/vol/files \
-v $HOME/vol/nextcloud/data:/vol/data \
-v /srv/vol/nextcloud/files:/vol/files \
-v /srv/vol/nextcloud/data:/vol/data \
--shm-size=1g"
# Build Variables
@ -25,8 +25,7 @@ ENV DBNAME=nextcloud
# install packages we want
RUN apt update -y && apt install -y apache2 php-fpm php-gd php-zip php-pgsql \
php-curl php-mbstring php-intl php-imagick php-xml php-gmp php-json \
redis php-redis postgresql postgresql-doc php-ldap php-bcmath cron
redis php-redis postgresql postgresql-doc php-ldap php-bcmath
# put database variables in /etc/environment so anyone can access them
# also autodetect versions of php and postgres and put them in /etc/environment as well
@ -48,6 +47,29 @@ RUN mkdir -p /vol/data /vol/files
COPY --chown=www-data:www-data data/ /vol/data/
###
### Nextcloud
###
# download nextcloud
RUN cd /var/www/html && \
wget --progress=dot:giga https://download.nextcloud.com/server/releases/latest.zip && \
echo "Unzipping..." && \
unzip -q latest.zip && \
chown -R www-data:www-data nextcloud && \
rm latest.zip
# create data dir for nextcloud
RUN mkdir -p /vol/files && \
chown -R www-data:www-data /vol/files
# copy nextcloud config
COPY --chown=www-data:www-data assets/config/ nextcloud/config/
# make link to host config & secret config
RUN cd nextcloud/config && \
ln -s /vol/data/host.config.php && \
ln -s /vol/data/secret.config.php
###
### PHP
###
@ -73,7 +95,6 @@ RUN mv postgresql/pg_hba.conf /etc/postgresql/${PSQLV:?}/main/ && \
cat postgresql/postgresql.conf >> /etc/postgresql/${PSQLV:?}/main/postgresql.conf && \
rm -rf postgresql
###
### Apache
###
@ -97,48 +118,18 @@ COPY --chown=redis:redis assets/redis.conf /etc/redis/redis.conf
RUN usermod -a -G redis www-data
###
### Nextcloud
###
# download nextcloud
COPY assets/nextcloud/ ./
RUN test -f latest.zip || \
wget --progress=dot:giga https://download.nextcloud.com/server/releases/latest.zip
WORKDIR /var/www/html
RUN echo "Unzipping ..." && \
unzip -q $HOME/latest.zip && \
chown -R www-data:www-data nextcloud && \
rm $HOME/latest.zip
# create data dir for nextcloud
RUN mkdir -p /vol/files && \
chown -R www-data:www-data /vol/files
# copy nextcloud config
COPY --chown=www-data:www-data assets/config/ nextcloud/config/
# make link to host config & secret config
RUN cd nextcloud/config && \
ln -s /vol/data/host.config.php && \
ln -s /vol/data/secret.config.php
###
### DB Auto Load/Dump
### Timers/Services
###
# copy service
COPY assets/db-updown.service /etc/systemd/system/
# copy services
COPY assets/systemd/ /etc/systemd/system/
# enable service
RUN systemctl enable db-updown.service
###
### Crontab
###
COPY assets/crontab /root/
# crontab for www-data
RUN crontab -u www-data /root/crontab
RUN systemctl enable \
nextcloud-cron.service nextcloud-cron.timer \
nextcloud-db-dump.service nextcloud-db-dump.timer \
nextcloud-db-reload.service \
nextcloud-scan.service nextcloud-scan.timer
###
### Bugfix
@ -149,10 +140,6 @@ COPY assets/bugfix/redis-server.service /etc/systemd/system/redis-server.service
COPY assets/bugfix/apache2.override /etc/systemd/system/apache2.service.d/override.conf
# bugfix for cron
COPY assets/bugfix/cronfix /root/
RUN chmod +x /root/cronfix && /root/cronfix
###
### Workdir
###

2
nextcloud/Systemdfile

@ -26,7 +26,7 @@ nc-occ app:install bookmarks
nc-occ app:install mail
# disable apps we don't want
nc-occ app:disable comments dashboard federation files_trashbin firstrunwizard recommendations support survey_client systemtags
nc-occ app:disable comments dashboard federation files_trashbin firstrunwizard recommendations support survey_client systemtags weather_status
# configure apps
# set calendar to refresh subscriptions once a day (to set to one hour use 'PT1H' instead)

1
nextcloud/assets/bin/db-make

@ -10,4 +10,3 @@ cmd "DROP USER IF EXISTS ${DBUSER:?};"
cmd "CREATE USER ${DBUSER:?};"
cmd "CREATE DATABASE ${DBNAME:?};"
cmd "ALTER DATABASE ${DBNAME:?} OWNER TO ${DBUSER:?};"
cmd "GRANT ALL PRIVILEGES ON DATABASE ${DBNAME:?} TO ${DBUSER:?};"

2
nextcloud/assets/bugfix/cronfix

@ -1,2 +0,0 @@
#!/bin/sh
sed -i '/session required pam_loginuid.so/c\#session required pam_loginuid.so' /etc/pam.d/cron

1
nextcloud/assets/config/misc.config.php

@ -1,4 +1,5 @@
<?php
$CONFIG = array(
'htaccess.RewriteBase' => '/',
'maintenance_window_start' => 1,
);

11
nextcloud/assets/crontab

@ -1,11 +0,0 @@
PATH=/usr/local/bin:/bin:/usr/bin
# m h dom mon dow command
# Run Nextcloud cron tasks every 5 minutes
*/5 * * * * php -f /var/www/html/nextcloud/cron.php
# Scan for new files every 15 minutes
*/15 * * * * php /var/www/html/nextcloud/occ files:scan --all
# Dump database every hour
23 * * * * maint 01 01

14
nextcloud/assets/db-updown.service

@ -1,14 +0,0 @@
[Unit]
Description=Load/Dump database on start/stop
After=postgresql.service
Requires=postgresql.service
[Service]
Type=oneshot
RemainAfterExit=yes
EnvironmentFile=/etc/environment
ExecStart=/bin/bash -c "if [[ $(ls -t /vol/data/sql/ | head -1) == $DBNAME-updown.sql ]]; then db-load /vol/data/sql/$DBNAME-updown.sql; else echo 'updown.sql is not most recent file in database dir, skipping db-load'; fi"
ExecStop=/bin/bash -c "db-dump /vol/data/sql/$DBNAME-updown.sql"
[Install]
WantedBy=multi-user.target

0
nextcloud/assets/nextcloud/.versions

4
nextcloud/assets/php/php.ini

@ -1785,10 +1785,10 @@ opcache.enable=1
;opcache.enable_cli=0
; The OPcache shared memory storage size.
opcache.memory_consumption=128
opcache.memory_consumption=256
; The amount of memory for interned strings in Mbytes.
opcache.interned_strings_buffer=8
opcache.interned_strings_buffer=16
; The maximum number of keys (scripts) in the OPcache hash table.
; Only numbers between 200 and 1000000 are allowed.

9
nextcloud/assets/systemd/nextcloud-cron.service

@ -0,0 +1,9 @@
[Unit]
Description=Nextcloud cron.php job
[Service]
User=www-data
# Only run if Nextcloud is running
ExecCondition=/usr/bin/php -f /var/www/nextcloud/occ status -e
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php
KillMode=process

9
nextcloud/assets/systemd/nextcloud-cron.timer

@ -0,0 +1,9 @@
[Unit]
Description=Run Nextcloud cron.php every 5 minutes
[Timer]
OnStartupSec=5min
OnUnitActiveSec=5min
[Install]
WantedBy=timers.target

12
nextcloud/assets/systemd/nextcloud-db-dump.service

@ -0,0 +1,12 @@
[Unit]
Description=Dump database for backup
After=postgresql.service
Requires=postgresql.service
[Service]
# Only run if Nextcloud is running
ExecCondition=/usr/local/bin/nc-occ status -e
ExecStart=/usr/local/bin/maint
StandardOutput=journal
StandardError=journal
Type=oneshot

8
nextcloud/assets/systemd/nextcloud-db-dump.timer

@ -0,0 +1,8 @@
[Unit]
Description=Backup database every hour
[Timer]
OnCalendar=0/1:00:00
[Install]
WantedBy=timers.target

16
nextcloud/assets/systemd/nextcloud-db-reload.service

@ -0,0 +1,16 @@
[Unit]
Description=Load/Dump database on start/stop
After=postgresql.service
Requires=postgresql.service
[Service]
Type=oneshot
StandardOutput=journal
StandardError=journal
RemainAfterExit=yes
EnvironmentFile=/etc/environment
ExecStart=/bin/bash -c "if [[ $(ls -t /vol/data/sql/ | head -1) == $DBNAME-on-shutdown.sql ]]; then db-load /vol/data/sql/$DBNAM-on-shutdown.sql; else echo \"$DBNAME-on-shutdown.sql is not most recent file in database dir, skipping db-load\"; fi"
ExecStop=/bin/bash -c "db-dump /vol/data/sql/$DBNAME-on-shutdown.sql"
[Install]
WantedBy=multi-user.target

12
nextcloud/assets/systemd/nextcloud-scan.service

@ -0,0 +1,12 @@
[Unit]
Description=Scan for new files
After=postgresql.service
Requires=postgresql.service
[Service]
# Only run if Nextcloud is running
ExecCondition=/usr/local/bin/nc-occ status -e
ExecStart=/usr/local/bin/nc-occ files:scan --all --home-only
StandardOutput=journal
StandardError=journal
Type=oneshot

10
nextcloud/assets/systemd/nextcloud-scan.timer

@ -0,0 +1,10 @@
[Unit]
Description=Periodically scan for new files
[Timer]
OnStartupSec=15min
OnUnitActiveSec=15min
RandomizedDelaySec=60
[Install]
WantedBy=timers.target
Loading…
Cancel
Save