From 0f0e8c6a5123def82c8e3d26de4fabd3e30d67d8 Mon Sep 17 00:00:00 2001 From: terminaldweller Date: Thu, 26 Jan 2023 23:09:03 +0330 Subject: update --- .mutt/account.self | 2 +- .secrets.baseline | 4 +- .tunneltop.toml | 18 ++ .vimrc | 5 + .zshrc | 19 +- bin/tunneltop | 250 ++++++++++++++--------- etc/docker/daemon.json | 1 + irssi/config | 26 ++- irssi/solarized-powerline.theme | 2 +- postit | 2 + sshfs/mount.sh | 16 ++ terminaldweller.com/cgit/authorized_keys | 1 + terminaldweller.com/cgit/bootstrap/Dockerfile | 2 +- terminaldweller.com/cgit/cgit/Dockerfile | 1 + terminaldweller.com/cgit/cgit/cgitrc | 5 +- terminaldweller.com/cgit/docker-compose.yaml | 16 +- terminaldweller.com/ejabberd/docker-compose.yaml | 2 +- terminaldweller.com/ejabberd/ejabberd.yml | 8 + 18 files changed, 260 insertions(+), 120 deletions(-) create mode 100755 sshfs/mount.sh create mode 100644 terminaldweller.com/cgit/authorized_keys diff --git a/.mutt/account.self b/.mutt/account.self index 7588110..4c6c0df 100644 --- a/.mutt/account.self +++ b/.mutt/account.self @@ -15,4 +15,4 @@ set header_cache = ~/.mutt/self/cache/headers set message_cachedir = ~/.mutt/self/cache/bodies set certificate_file = ~/.mutt/self/certificates # mailboxes "+INBOX" "+Drafts" "+Sent" "+Trash" -mailboxes "+INBOX" "+INBOX/Github" "+INBOX/Linkedin" +mailboxes "+INBOX" "+INBOX/Github" "+INBOX/Linkedin" "+INBOX/Launchpad" "+INBOX/Opennic" diff --git a/.secrets.baseline b/.secrets.baseline index f87eb56..33b5cc4 100644 --- a/.secrets.baseline +++ b/.secrets.baseline @@ -270,7 +270,7 @@ "filename": "irssi/config", "hashed_secret": "825e522c6f25f4d5e79c97adb96bf4d84f8606c2", "is_verified": false, - "line_number": 495 + "line_number": 501 } ], "kubernetes/mongodb/add-user.yaml": [ @@ -365,5 +365,5 @@ } ] }, - "generated_at": "2022-12-31T19:46:58Z" + "generated_at": "2023-01-26T19:38:27Z" } diff --git a/.tunneltop.toml b/.tunneltop.toml index f7d5c58..9e62be6 100644 --- a/.tunneltop.toml +++ b/.tunneltop.toml @@ -68,6 +68,24 @@ test_command_result = "200" test_interval = 300 test_timeout = 30 +[i2pmapped6irssilitia] +address = "127.0.0.1" +port = 9068 +command = "autossh -M 0 -N -L 0.0.0.0:9068:127.0.0.1:6668 -o ServerAliveInterval=180 -o ServerAliveCountMax=3 -o ExitOnForwardFailure=yes -l ubuntu -p 3333 185.130.45.46" +test_command = "" +test_command_result = "200" +test_interval = 300 +test_timeout = 30 + +[i2pmapped6irssipostman] +address = "127.0.0.1" +port = 9069 +command = "autossh -M 0 -N -L 0.0.0.0:9069:127.0.0.1:6669 -o ServerAliveInterval=180 -o ServerAliveCountMax=3 -o ExitOnForwardFailure=yes -l ubuntu -p 3333 185.130.45.46" +test_command = "" +test_command_result = "200" +test_interval = 300 +test_timeout = 30 + [i2pmapped8http] address = "127.0.0.1" port = 9164 diff --git a/.vimrc b/.vimrc index ae4b236..2acfaef 100644 --- a/.vimrc +++ b/.vimrc @@ -1507,6 +1507,11 @@ augroup ALEDOCKER autocmd! autocmd FileType Dockerfile let b:ale_linters = {'Dockerfile': ['hadolint']} augroup END +let b:ale_powershell_powershell_executable = "/home/devi/bin/pwsh" +augroup ALEPWSH + autocmd! + autocmd FileType ps1 let b:ale_linters = {'ps1': ['powershell']} +augroup END " let b:ale_sh_shfmt_options = '-w -p -i=2 -bn -ci -sr -kp' let b:ale_sh_shfmt_options = "-w -" let b:ale_sh_shellcheck_options = '-x' diff --git a/.zshrc b/.zshrc index 19dc317..6ab0bdc 100644 --- a/.zshrc +++ b/.zshrc @@ -138,7 +138,8 @@ alias iredisrc="vim ~/scripts/.iredisrc" alias fixiredisrc="cp ~/scripts/.iredisrc ~/.iredisrc" # alias irssi="TERM=screen-256color docker run --runtime=runsc -it -e TERM -u $(id -u):$(id -g) --log-driver=none -e DBUS_SESSION_BUS_ADDRESS="$DBUS_SESSION_BUS_ADDRESS" -v $HOME/.irssi:/home/user/.irssi:ro -v /etc/localtime:/etc/localtime:ro devi_irssi" alias irssi="TERM=screen-256color docker run --runtime=runsc -it -e TERM -u $(id -u):$(id -g) --log-driver=none -v $HOME/.irssi:/home/user/.irssi:ro -v /etc/localtime:/etc/localtime:ro devi_irssi" -alias tor_irssi="TERM=screen-256color docker run --runtime=runsc -it -e TERM -u 1001:1001 --log-driver=none -v tor_irssi_mount:/home/user/.irssi tor_irssi" +alias tor_irssi="TERM=screen-256color docker run --runtime=runsc -it -e TERM -u 1001:1001 --log-driver=none -v tor_irssi_mount:/home/user/.irssi -v ~/devi/abbatoir/hole16:/home/user/.irssi/certs tor_irssi" +alias i2p_irssi="TERM=screen-256color docker run --runtime=runsc -it -e TERM -u $(id -u):$(id -g) --log-driver=none -v i2p_irssi_mount:/home/user/.irssi irssi:1.2.3" alias openbb="TERM=screen-256color \ docker \ run \ @@ -176,7 +177,6 @@ alias lsdrc="vim ~/scripts/.config/lsd/config.yaml" alias fixlsdrc="cp ~/scripts/.config/lsd/config.yaml ~/.config/lsd/config.yaml" alias cygwin="/mnt/d/home/apps/cygwin/bin/bash.exe -l -i" alias farmanager="/mnt/c/Program\ Files/Far\ Manager/Far.exe" -alias pwsh="/mnt/c/Program\ Files/PowerShell/7/pwsh.exe" alias wincmd="/mnt/c/Windows/System32/runas.exe /profile /user:administrator cmd.exe" alias xonshrc="vim ~/scripts/.xonshrc" alias fixxonshrc="cp ~/scripts/.xonshrc ~/.xonshrc" @@ -222,8 +222,8 @@ alias inputrc="vim ~/scripts/.inputrc" alias fixinputrc="cp ~/scripts/.inputrc ~/.inputrc" alias gdbinit="vim ~/scripts/.gdbinit" alias fixgdbinit="cp ~/scripts/.gdbinit ~/.gdbinit" -alias d="ALL_PROXY=socks5://127.0.0.1:9995 grc docker" -alias dc="ALL_PROXY=socks5://127.0.0.1:9995 grc docker-compose" +alias d="ALL_PROXY=socks5h://127.0.0.1:9995 grc docker" +alias dc="ALL_PROXY=socks5h://127.0.0.1:9995 grc docker-compose" alias zh_freebsd="zssh dev@192.168.90.15" alias zh_linux="zssh dev@192.168.90.17" alias zh_router_root="zssh root@192.168.90.71" @@ -338,14 +338,19 @@ alias picocom="picocom --escape b" alias turn_green='echo -e "\033]10;#005f5f\007" ' alias turn_blue='echo -e "\033]10;#005f87\007" ' alias turn_white='echo -e "\033]10;#c0c0c0\007" ' -alias bandwhich="turn_green && bandwhich" -alias powertop="turn_green && powertop" -alias mdcat="turn_green && mdcat --local --fail --paginate" +alias bandwhich="bandwhich" +alias powertop="powertop" +alias mdcat="mdcat --local --fail --paginate" alias mariadb="mariadb --safe-updates" alias tunneltoprc="vim ~/scripts/.tunneltop.toml" alias fixtunneltoprc="cp ~/scripts/.tunneltop.toml ~/.tunneltop.toml" alias tokei="tokei --hidden --num-format underscores -s lines" +function ccgrep() { + EXTRA_ARG_BEFORE=$(llvm-config --libdir)/clang/$(llvm-config --version)/include + cgrep --extra-arg-before="-I${EXTRA_ARG_BEFORE}" "$@" +} + # change the 4th terminal color to #0000ff # echo -e '\e]P40000ff' # reset all diff --git a/bin/tunneltop b/bin/tunneltop index 7bf1878..7c32e17 100755 --- a/bin/tunneltop +++ b/bin/tunneltop @@ -1,6 +1,6 @@ #!/usr/bin/env python """A top-like program for monitoring ssh tunnels""" - +# TODO- task cancellation is very slow as should be with tasks import argparse import asyncio import copy @@ -134,18 +134,52 @@ def ffs( return lines -def render(lines: typing.List[str], stdscr, sel: int): +def render( + data_cols: typing.Dict[str, typing.Dict[str, str]], + tasks: typing.List[asyncio.Task], + stdscr, + sel: int, +): """Render the text""" + lines = ffs( + 2, + ["NAME", "ADDRESS", "PORT", "STATUS", "STDOUT", "STDERR"], + False, + True, + [v["name"] for _, v in data_cols.items()], + [v["address"] for _, v in data_cols.items()], + [repr(v["port"]) for _, v in data_cols.items()], + [v["status"] for _, v in data_cols.items()], + [v["stdout"] for _, v in data_cols.items()], + [v["stderr"] for _, v in data_cols.items()], + ) iterator = iter(lines) stdscr.addstr(1, 1, lines[0], curses.color_pair(3)) next(iterator) for i, line in enumerate(iterator): + try: + line_content = stdscr.instr(sel + 2, 1).decode("utf-8") + name: str = line_content[: line_content.find(" ")] + finally: + name = "" if i == sel: stdscr.addstr( - (2 + i) % (len(lines) + 1), 1, line, curses.color_pair(2) + (2 + i) % (len(lines) + 1), + 1, + line, + curses.color_pair(2) + if name not in tasks + else curses.color_pair(5), ) else: - stdscr.addstr(2 + i, 1, line, curses.color_pair(1)) + stdscr.addstr( + 2 + i, + 1, + line, + curses.color_pair(1) + if name not in tasks + else curses.color_pair(4), + ) stdscr.addstr("\n") stdscr.box() @@ -164,18 +198,43 @@ def curses_init(): curses.init_pair(2, curses.COLOR_BLACK, curses.COLOR_GREEN) curses.init_pair(3, curses.COLOR_BLUE, curses.COLOR_BLACK) curses.init_pair(4, curses.COLOR_CYAN, curses.COLOR_BLACK) + curses.init_pair(5, curses.COLOR_BLACK, curses.COLOR_CYAN) return stdscr -class TunnelTop: +class TunnelManager: """The tunnel top class""" def __init__(self): self.argparser = Argparser() - self.data_cols: typing.Dict[str, typing.Dict[str, str]] = {} + self.data_cols: typing.Dict[ + str, typing.Dict[str, str] + ] = self.read_conf() self.tunnel_tasks: typing.List[asyncio.Task] = [] self.tunnel_test_tasks: typing.List[asyncio.Task] = [] + self.scheduler_task: asyncio.Task + self.scheduler_table: typing.Dict[ + str, int + ] = self.init_scheduler_table() + # we use this when its time to quit. this will prevent any + # new tasks from being scheduled + self.are_we_dying: bool = False + + loop = asyncio.get_event_loop() + loop.add_signal_handler( + signal.SIGHUP, + lambda: asyncio.create_task(self.sighup_handler()), + ) + + def init_scheduler_table(self) -> typing.Dict[str, int]: + """initialize the scheduler table""" + result: typing.Dict[str, int] = {} + for key, value in self.data_cols.items(): + if "test_interval" in value and value["test_command"] != "": + result[key] = 0 + + return result def read_conf(self) -> typing.Dict[str, typing.Dict[str, str]]: """Read the config file""" @@ -200,58 +259,36 @@ class TunnelTop: } return data_cols - async def run_subshell(self, cmd: str) -> typing.Tuple[bytes, bytes]: - """Run a command in a subshell""" - proc = await asyncio.create_subprocess_shell( - cmd, stdout=asyncio.subprocess.PIPE, stderr=asyncio.subprocess.PIPE + async def run_subprocess(self, cmd: str) -> typing.Tuple[bytes, bytes]: + """Run a command""" + proc = await asyncio.create_subprocess_exec( + *cmd.split(" "), + stdout=asyncio.subprocess.PIPE, + stderr=asyncio.subprocess.PIPE, ) - try: - return await proc.communicate() - except asyncio.CancelledError: - self.write_log("fucking fuck") - return (bytes(), bytes()) + return await proc.communicate() - def tunnel_test_callback(self, task: asyncio.Task) -> None: - """Tunnel test callback function.""" + async def run_test_coro( + self, cmd: str, task_name: str + ) -> typing.Tuple[bytes, bytes]: + """Run a test command""" try: - task_name = task.get_name() - self.data_cols[task_name]["stdout"] = ( - task.result()[0].decode("utf-8").strip("\n") - ) - self.data_cols[task_name]["stderr"] = ( - task.result()[1].decode("utf-8").strip("\n") - ) - if ( - task.result()[0].decode("utf-8").strip("\n") - == self.data_cols[task_name]["test_command_result"] - ): + stdout, stderr = await self.run_subprocess(cmd) + stdout_str: str = stdout.decode("utf-8").strip("\n").strip('"') + stderr_str: str = stderr.decode("utf-8").strip("\n").strip('"') + + self.data_cols[task_name]["stdout"] = stdout_str + self.data_cols[task_name]["stderr"] = stderr_str + if stdout_str == self.data_cols[task_name]["test_command_result"]: self.data_cols[task_name]["status"] = "UP" else: self.data_cols[task_name]["status"] = "DOWN" + + return stdout, stderr except asyncio.TimeoutError: self.data_cols[task_name]["status"] = "TMOUT" - except asyncio.CancelledError: - self.data_cols[task_name]["status"] = "CANCELLED" - - async def tunnel_test_procs(self) -> typing.List[asyncio.Task]: - """run all the tunnel tests in the background as separate tasks""" - tasks: typing.List[asyncio.Task] = [] - for _, value in self.data_cols.items(): - if value["test_command"] != "": - tasks.append( - asyncio.create_task( - asyncio.wait_for( - self.run_subshell(value["test_command"]), - timeout=float(value["test_timeout"]), - ), - name=value["name"], - ) - ) - tasks[-1].add_done_callback(self.tunnel_test_callback) - await asyncio.sleep(0) - - return tasks + raise async def tunnel_procs( self, @@ -261,7 +298,7 @@ class TunnelTop: for _, value in self.data_cols.items(): tasks.append( asyncio.create_task( - self.run_subshell(value["command"]), name=value["name"] + self.run_subprocess(value["command"]), name=value["name"] ), ) await asyncio.sleep(0) @@ -274,10 +311,13 @@ class TunnelTop: if k not in self.data_cols: self.tunnel_tasks.append( asyncio.create_task( - self.run_subshell(value["command"]), name=k + self.run_subprocess(value["command"]), name=k ) ) await asyncio.sleep(0) + self.data_cols[k] = copy.deepcopy(value) + if k in self.scheduler_table: + self.scheduler_table[k] = 0 else: if ( self.data_cols[k]["command"] != data_cols_new[k]["command"] @@ -291,9 +331,11 @@ class TunnelTop: self.data_cols[k] = copy.deepcopy(data_cols_new[k]) self.tunnel_tasks.append( asyncio.create_task( - self.run_subshell(value["command"]), name=k + self.run_subprocess(value["command"]), name=k ) ) + if k in self.scheduler_table: + self.scheduler_table[k] = 0 await asyncio.sleep(0) for k, _ in self.data_cols.items(): @@ -302,6 +344,8 @@ class TunnelTop: if task.get_name() == k: task.cancel() del self.data_cols[k] + if k in self.scheduler_table: + del self.scheduler_table[k] async def sighup_handler(self) -> None: """SIGHUP handler. we want to reload the config.""" @@ -314,7 +358,7 @@ class TunnelTop: """A simple logger""" with open( "/home/devi/devi/abbatoir/hole15/log", - "w", + "a", encoding="utf-8", ) as logfile: logfile.write(log) @@ -328,15 +372,15 @@ class TunnelTop: was_cancelled = task.cancel() self.write_log(f"was_cancelled: {was_cancelled}") await task - for _, value in self.data_cols.items(): - if value["name"] == name: - self.tunnel_tasks.append( - asyncio.create_task( - self.run_subshell(value["command"]), - name=value["name"], - ) - ) - await asyncio.sleep(0) + for _, value in self.data_cols.items(): + if value["name"] == name and task.cancelled(): + self.tunnel_tasks.append( + asyncio.create_task( + self.run_subprocess(value["command"]), + name=value["name"], + ) + ) + await asyncio.sleep(0) async def flip_task(self, line_content: str) -> None: """flip a task""" @@ -357,53 +401,76 @@ class TunnelTop: if value["name"] == name: self.tunnel_tasks.append( asyncio.create_task( - self.run_subshell(value["command"]), + self.run_subprocess(value["command"]), name=value["name"], ) ) await asyncio.sleep(0) - break async def quit(self) -> None: """Cleanly quit the applicaiton""" + # scheduler checks for this so stop making new tasks + # when we want to quit + self.are_we_dying = True + # alternatively we could ask asyncio to cancel all tasks for tunnel_test_task in self.tunnel_test_tasks: tunnel_test_task.cancel() for tunnel_task in self.tunnel_tasks: tunnel_task.cancel() + try: + await asyncio.gather(*self.tunnel_test_tasks) + await asyncio.gather(*self.tunnel_tasks) + except asyncio.TimeoutError: + pass + finally: + sys.exit(0) + + async def scheduler(self) -> None: + """schedulaer manages running the tests and reviving dead tunnels""" + while True: + if self.are_we_dying: + return + for key, value in self.scheduler_table.items(): + if value == 0 and key not in self.tunnel_test_tasks: + tunnel_entry = self.data_cols[key] + test_task = asyncio.create_task( + asyncio.wait_for( + self.run_test_coro( + tunnel_entry["test_command"], + tunnel_entry["name"], + ), + timeout=float(tunnel_entry["test_timeout"]), + ), + name=key, + ) + # test_task.add_done_callback(self.tunnel_test_callback) + self.tunnel_test_tasks.append(test_task) + self.scheduler_table[key] = int( + tunnel_entry["test_interval"] + ) + await asyncio.sleep(0) + else: + self.scheduler_table[key] = self.scheduler_table[key] - 1 + + # we are using a 1 second ticker. basically the scheduler + # runs every second instead of as fast as it can + await asyncio.sleep(1) - async def main(self) -> None: + async def tui_loop(self) -> None: """entrypoint""" sel: int = 0 try: stdscr = curses_init() - - self.data_cols = self.read_conf() - - loop = asyncio.get_event_loop() - loop.add_signal_handler( - signal.SIGHUP, - lambda: asyncio.create_task(self.sighup_handler()), - ) + # we spawn the tunnels and the test scheduler put them + # in the background and then run the TUI loop self.tunnel_tasks = await self.tunnel_procs() + self.scheduler_task = asyncio.create_task( + self.scheduler(), name="scheduler" + ) while True: - # self.tunnel_test_tasks = await self.tunnel_test_procs() - lines = ffs( - 2, - ["NAME", "ADDRESS", "PORT", "STATUS", "STDOUT", "STDERR"] - if not self.argparser.args.noheader - else None, - False, - True, - [v["name"] for _, v in self.data_cols.items()], - [v["address"] for _, v in self.data_cols.items()], - [repr(v["port"]) for _, v in self.data_cols.items()], - [v["status"] for _, v in self.data_cols.items()], - [v["stdout"] for _, v in self.data_cols.items()], - [v["stderr"] for _, v in self.data_cols.items()], - ) stdscr.clear() - render(lines, stdscr, sel) + render(self.data_cols, self.tunnel_tasks, stdscr, sel) char = stdscr.getch() if char == ord("j") or char == curses.KEY_DOWN: @@ -415,7 +482,6 @@ class TunnelTop: await self.restart_task(line_content.decode("utf-8")) elif char == ord("q"): await self.quit() - # elif char == curses.KEY_ENTER: elif char == ord("s"): line_content = stdscr.instr(sel + 2, 1) await self.flip_task(line_content.decode("utf-8")) @@ -433,5 +499,5 @@ class TunnelTop: if __name__ == "__main__": - tunnel_top = TunnelTop() - asyncio.run(tunnel_top.main()) + tunnel_manager = TunnelManager() + asyncio.run(tunnel_manager.tui_loop()) diff --git a/etc/docker/daemon.json b/etc/docker/daemon.json index 7aced8a..96e91c4 100644 --- a/etc/docker/daemon.json +++ b/etc/docker/daemon.json @@ -1,5 +1,6 @@ { "data-root": "/home/devi/storage/ssd1/docker", + "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"], "runtimes": { "nvidia": { "args": [], diff --git a/irssi/config b/irssi/config index 9b30418..14cf750 100644 --- a/irssi/config +++ b/irssi/config @@ -73,7 +73,7 @@ servers = ( address = "185.130.45.46"; chatnet = "Libera-ZNC"; port = "1025"; - password = "terminaldweller/Liberachat:";#pragma: allowlist secret + password = "terminaldweller/Liberachat:"; # pragma: allowlist secret use_tls = "yes"; tls_cert = "~/.irssi/certs/nick.pem"; tls_verify = "no"; @@ -83,7 +83,7 @@ servers = ( address = "185.130.45.46"; chatnet = "OFTC-ZNC"; port = "1025"; - password = "terminaldweller/OFTC:network";#pragma: allowlist secret + password = "terminaldweller/OFTC:network"; # pragma: allowlist secret use_tls = "yes"; tls_cert = "~/.irssi/certs/nick.pem"; tls_verify = "no"; @@ -93,7 +93,7 @@ servers = ( address = "185.130.45.46"; chatnet = "Rizon-ZNC"; port = "1025"; - password = "terminaldweller/Rizon:network";#pragma: allowlist secret + password = "terminaldweller/Rizon:network"; # pragma: allowlist secret use_tls = "yes"; tls_cert = "~/.irssi/certs/nick.pem"; tls_verify = "no"; @@ -103,7 +103,7 @@ servers = ( address = "185.130.45.46"; chatnet = "Undernet-ZNC"; port = "1025"; - password = "terminaldweller/undernet:network";#pragma: allowlist secret + password = "terminaldweller/undernet:network"; # pragma: allowlist secret use_tls = "yes"; tls_cert = "~/.irssi/certs/nick.pem"; tls_verify = "no"; @@ -129,7 +129,7 @@ servers = ( address = "185.130.45.46"; chatnet = "TildeChat_ZNC"; port = "1025"; - password = "terminaldweller/Tilde_Chat:network"; #pragma: allowlist secret + password = "terminaldweller/Tilde_Chat:network"; # pragma: allowlist secret tls_cert = "~/.irssi/certs/nick.pem"; use_tls = "yes"; tls_verify = "no"; @@ -177,12 +177,14 @@ chatnets = { IRCNet = { type = "IRC"; }; "Undernet-ZNC" = { type = "IRC"; - autosendcmd = "/^mode terminaldwel +ix;msg *status traffic;wait 3000"; + nick = "terminaldwel"; + autosendcmd = "/^mode termi +ix;msg *status traffic;wait 3000"; }; EFnet = { type = "IRC"; }; DALnet = { type = "IRC"; - autosendcmd = "/^mode terminaldweller +HCi;msg nickserv@services.dal.net identify Xashmith#666;wait 3000"; + nick = "terminaldweller"; + autosendcmd = "/^msg nickserv@services.dal.net identify identify;mode terminaldweller HCi;wait 3000"; }; bitlbee_r = { type = "IRC"; }; }; @@ -201,12 +203,14 @@ channels = ( { name = "#selfhosting"; chatnet = "TildeChat_ZNC"; autojoin = "yes"; }, { name = "#tor"; chatnet = "OFTC-ZNC"; autojoin = "yes"; }, { name = "#llvm"; chatnet = "OFTC-ZNC"; autojoin = "yes"; }, + { name = "##terminaldweller"; chatnet = "OFTC-ZNC"; autojoin = "yes"; }, # { name = "#openssh"; chatnet = "Libera-ZNC"; autojoin = "yes"; }, # { name = "#gdb"; chatnet = "Libera-ZNC"; autojoin = "yes"; }, { name = "#openbsd"; chatnet = "Libera-ZNC"; autojoin = "yes"; }, { name = "#gnupg"; chatnet = "Libera-ZNC"; autojoin = "yes"; }, { name = "#znc"; chatnet = "Libera-ZNC"; autojoin = "yes"; }, { name = "#go-nuts"; chatnet = "Libera-ZNC"; autojoin = "yes"; }, + { name = "##terminaldweller"; chatnet = "Libera-ZNC"; autojoin = "yes"; }, { name = "#voidlinux"; chatnet = "Libera-ZNC"; autojoin = "yes"; }, { name = "#CataclysmDDA"; chatnet = "Libera-ZNC"; autojoin = "yes"; }, { name = "#security"; chatnet = "Libera-ZNC"; autojoin = "yes"; }, @@ -224,6 +228,7 @@ channels = ( { name = "#bookz"; chatnet = "Undernet-ZNC"; autojoin = "yes"; }, { name = "#postgresql"; chatnet = "Libera-ZNC"; autojoin = "yes"; }, { name = "#news"; chatnet = "Rizon-ZNC"; autojoin = "yes"; }, + { name = "##terminaldweller"; chatnet = "Rizon-ZNC"; autojoin = "yes"; }, { name = "#irc"; chatnet = "IRCNet"; autojoin = "yes"; }, { name = "#supersonic"; chatnet = "DALNet"; autojoin = "yes"; }, # { name = "#kvm"; chatnet = "Libera-ZNC"; autojoin = "yes"; } @@ -452,6 +457,7 @@ settings = { hilight_color = "%Zd75f5f"; emphasis_italics = "yes"; emphasis_replace = "yes"; + show_names_on_join = "no"; }; "fe-text" = { actlist_sort = "refnum"; }; "perl/core/scripts" = { @@ -581,10 +587,16 @@ ignores = ( { level = "JOINS PARTS QUITS NICKS"; channels = ( "#security" ); }, { level = "JOINS PARTS QUITS NICKS"; channels = ( "#busybox" ); }, { level = "JOINS PARTS QUITS NICKS"; channels = ( "#bookz" ); }, + { level = "JOINS PARTS QUITS NICKS"; channels = ( "#qubes" ); }, { level = "JOINS PARTS QUITS NICKS"; channels = ( "#gnupg" ); }, { level = "JOINS PARTS QUITS NICKS"; channels = ( "#supersonic" ); }, { level = "JOINS PARTS QUITS NICKS"; channels = ( "#news" ); }, + { level = "JOINS PARTS QUITS NICKS"; channels = ( "#mednafen" ); }, + { level = "JOINS PARTS QUITS NICKS"; channels = ( "#forgefed" ); }, + { level = "JOINS PARTS QUITS NICKS"; channels = ( "#s6" ); }, { level = "JOINS PARTS QUITS NICKS"; channels = ( "#postgresql" ); }, + { level = "JOINS PARTS QUITS NICKS"; channels = ( "#meta" ); }, + { level = "JOINS PARTS QUITS NICKS"; channels = ( "#gemini" ); }, { level = "JOINS PARTS QUITS NICKS"; channels = ( "#llvm" ); }, { level = "JOINS PARTS QUITS NICKS"; channels = ( "#selfhosting" ); }, { level = "JOINS PARTS QUITS NICKS"; channels = ( "#irc" ); }, diff --git a/irssi/solarized-powerline.theme b/irssi/solarized-powerline.theme index beb08e0..cc83466 100644 --- a/irssi/solarized-powerline.theme +++ b/irssi/solarized-powerline.theme @@ -401,7 +401,7 @@ formats = { daychange = " %g-----%k-%W-%n Day changed to %%D %W-%k-%g-----%n"; join = "%k%z00af5fJOIN %8 {ichannelhilight $2} %0%Z00d700%0 {inick $0}%0 %N {chanhost_hilight $1}"; line_start_irssi = "%k%z5f5fd7IRSSI%N%Z5f5fd7 %N"; - new_topic = "%k%z00d700TOPIC %8 {ichannelhilight $1} %wby {inick $0}  $2"; + new_topic = "%k%z00d700TOPIC %8 {ichannelhilight $1} %wby {inick $0}%Z005f87%N  $2"; nick_changed = "%k%z00d700RENAME %Z00d700%0 %k%z005f87{nick $0} %Zff8700 {nick $1}%Z005f87%0%N"; part = "%K%Z00d700%k%z00d700PART %8 {ichannelhilight $2}%N %0%Z005f87 %N{inick $0}%0 %Z005f87%Zeeeeee {reason $3}"; quit = "%0%Z005f00%k%z005f00QUIT %N {inick $0}%0 %Zeeeeee %N%n%k%N {reason $2}"; diff --git a/postit b/postit index 3ed0539..1e92ac6 100644 --- a/postit +++ b/postit @@ -49,3 +49,5 @@ https://wms.cs.kuleuven.be/cs/studeren/master-artificial-intelligence/MAI_SIP/ma https://www.ssllabs.com/ssltest ntfs-3g https://virastaran.net/a/w/11467/ +https://www.dhl.com/nl-en/home/tracking/tracking-parcel.html?submit=1&tracking-id=CY570784975DE +https://github.com/net4people/bbs diff --git a/sshfs/mount.sh b/sshfs/mount.sh new file mode 100755 index 0000000..6d0ef1f --- /dev/null +++ b/sshfs/mount.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +sshfs \ + -o compression=no \ + -o idmap=user \ + -o reconnect \ + ubuntu@10.167.131.24:/home/ubuntu \ + /home/devi/sshfs/lxc/ubuntu2204_python + + +sshfs \ + -o compression=no \ + -o idmap=user \ + -o reconnect \ + ubuntu@10.167.131.30:/home/ubuntu \ + /home/devi/sshfs/lxc/ubuntu2204_js diff --git a/terminaldweller.com/cgit/authorized_keys b/terminaldweller.com/cgit/authorized_keys new file mode 100644 index 0000000..8bd899d --- /dev/null +++ b/terminaldweller.com/cgit/authorized_keys @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCv7DZhAcOd6MELOY/6gDfdm8RxE29m0kygA50CtXc10Viza54UT5zaCmQ4AFPUztC8zZYR/dqVkxPox443qfbC+N+KJ4prlKZOGOlVVJp+b4EgByQ2VDAQqbuE5rLqsETglgH5IfYct5WiO4DpZ3Ta+w+AkTZYgsVHCdN7i3dQBSGMVvdNxSrLgB5Dr1xTp0qQDM5J+4F8yqWohCSsChX+jGrY04bLYXzYvwVg9O4TB685izT/3YpmFAdN3PJsWt1VaSlYbe03Dn5kxOedX4mK51fkwD+qIlQ2EaFPNjpYYb4ecRKYIPx+0PwcPgEbkiuvBGCaAz9sD231IDJZhZWWkyb9PlgCI3FQh05N/ycbb4Uhe1vKq3rISbscfjK2ZBGVsrammbimihD/SzTisKMfiRhNi2vNgOn1p6ss7TAmpOaub8EfUBvpy5zaTn4ImbnD7QWWDeMrxfiV7TWczqmryPn+IMjlVR+PZIUnF3v+ki8BosA2/FpQmH5krAYuP+SbxtQx7i8VUCkTPQkjkj6Ts270Kf04hNi8RCSTQUV4KbXf96Az4Q2Vpjl1sa0wbrWOITt+nYkYQk+kuOxMdnbWScmC8kZShSzGR4bcvmk4P7ALWy2QW9iwGUCCqDzZPScQV0eLlQfyVHQyOebeiHHbQJ/3ln4tJijsBRYY0/6nsw== devi@DeviBox diff --git a/terminaldweller.com/cgit/bootstrap/Dockerfile b/terminaldweller.com/cgit/bootstrap/Dockerfile index be4f278..a1c2ea8 100644 --- a/terminaldweller.com/cgit/bootstrap/Dockerfile +++ b/terminaldweller.com/cgit/bootstrap/Dockerfile @@ -4,7 +4,7 @@ RUN apk update && apk add --no-cache git apk-cron # RUN rc-service crond start && rc-update add crond COPY ./bootstrap.sh /bootstrap.sh COPY ./docker-entrypoint.sh /docker-entrypoint.sh -COPY ./cron /etc/periodic/15min/cron +COPY ./cron /etc/periodic/daily/cron # COPY ./crontab /etc/crontabs/root # RUN chmod 0744 /bootstrap.sh ENTRYPOINT ["/docker-entrypoint.sh"] diff --git a/terminaldweller.com/cgit/cgit/Dockerfile b/terminaldweller.com/cgit/cgit/Dockerfile index 7ef7134..be2e5ef 100644 --- a/terminaldweller.com/cgit/cgit/Dockerfile +++ b/terminaldweller.com/cgit/cgit/Dockerfile @@ -3,3 +3,4 @@ RUN apk add && apk add --no-cache python3 py3-pip RUN pip3 install pygments RUN pip3 install md2html RUN pip3 install markdown +RUN mkdir -p /cgit_cache/ && chown git:git /cgit_cache diff --git a/terminaldweller.com/cgit/cgit/cgitrc b/terminaldweller.com/cgit/cgit/cgitrc index 90abd90..a4944e9 100644 --- a/terminaldweller.com/cgit/cgit/cgitrc +++ b/terminaldweller.com/cgit/cgit/cgitrc @@ -5,6 +5,7 @@ # Enable caching of up to 1000 output entries # cache-size=100 +cache-root=/cgit_cache ## ttl for root page cache-root-ttl=5 @@ -62,7 +63,7 @@ max-stats=year local-time=1 root-title=cGit -root-desc=Keep ALL the stuff in VERSION CONTROL!! +root-desc=terminaldweller's personal git root-readme=/var/www/about.html # footer=/var/www/footer.html @@ -84,7 +85,7 @@ about-filter=/usr/lib/cgit/filters/about-formatting.sh snapshots=tar.gz zip # Specify some default clone urls using macro expansion -clone-url=ssh://git@hostname.local:64822~repositories/$CGIT_REPO_URL git@hostname.local:/home/git/repositories/$CGIT_REPO_URL +clone-url=https://git.terminaldweller.com/$CGIT_REPO_URL ssh://git@git.terminaldweller.com/$CGIT_REPO_URL git@git.terminaldweller.com:$CGIT_REPO_URL ## ## List of common mimetypes diff --git a/terminaldweller.com/cgit/docker-compose.yaml b/terminaldweller.com/cgit/docker-compose.yaml index 3fe10ae..f1344f5 100644 --- a/terminaldweller.com/cgit/docker-compose.yaml +++ b/terminaldweller.com/cgit/docker-compose.yaml @@ -8,12 +8,13 @@ services: - cgitnet ports: - "127.0.0.1:8041:80" - - "127.0.0.1:8042:22" + - "8042:22" - "8043:443" restart: unless-stopped environment: - PGID=1000 - PUID=1000 + - PYGMENTIZE_STYLE=paraiso-dark volumes: - ./cgit/cgitrc:/etc/cgitrc:ro - storage:/home/git/repositories @@ -23,6 +24,8 @@ services: # - /etc/localtime:/etc/localtime:ro - ./cgit.conf:/etc/lighttpd/cgit.conf:ro - /etc/letsencrypt/archive/git.terminaldweller.com/:/etc/certs/:ro + - cache:/cgit_cache + - ./authorized_keys:/home/git/.ssh/authorized_keys bootstrap: image: bootstrap build: @@ -34,14 +37,15 @@ services: entrypoint: ["/docker-entrypoint.sh"] # cap_drop: # - ALL - healthcheck: - test: exit 1 - interval: 1d - timeout: 10s - retries: 1 + # healthcheck: + # test: exit 1 + # interval: 1d + # timeout: 10s + # retries: 1 restart: unless-stopped networks: cgitnet: bootstrapnet: volumes: storage: + cache: diff --git a/terminaldweller.com/ejabberd/docker-compose.yaml b/terminaldweller.com/ejabberd/docker-compose.yaml index f01085d..cbc9377 100644 --- a/terminaldweller.com/ejabberd/docker-compose.yaml +++ b/terminaldweller.com/ejabberd/docker-compose.yaml @@ -9,7 +9,7 @@ services: - "5222:5222" - "5223:5223" - "5269:5269" - - "5280:5280" + - "5270:5270" - "5443:5443" #- "1883:1883" #- "127.0.0.1:5080:5080" diff --git a/terminaldweller.com/ejabberd/ejabberd.yml b/terminaldweller.com/ejabberd/ejabberd.yml index fb5a6a9..5072841 100644 --- a/terminaldweller.com/ejabberd/ejabberd.yml +++ b/terminaldweller.com/ejabberd/ejabberd.yml @@ -66,6 +66,14 @@ listen: ip: '0.0.0.0' module: ejabberd_s2s_in max_stanza_size: 524288 + - port: 5270 + ip: '0.0.0.0' + module: ejabberd_s2s_in + max_stanza_size: 524288 + protocol_options: 'TLS_OPTIONS' + ciphers: 'TLS_CIPHERS' + dhfile: 'DH_FILE' + tls: true - port: 5443 ip: '0.0.0.0' module: ejabberd_http -- cgit v1.2.3