summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordweller <dweller@cabin.digital>2024-03-09 02:50:22 +0200
committerdweller <dweller@cabin.digital>2024-03-09 02:50:22 +0200
commit9b9bda8bb3700b25007a1b78958a2a4ac7c2f9cb (patch)
tree894a24c89afdff8eae712307bc186b83cd6b0044
Initial commit
-rw-r--r--LICENSE30
-rw-r--r--README34
-rwxr-xr-xgit-descremote19
-rwxr-xr-xgit-mkremote21
-rwxr-xr-xgit-shell-commands/help12
-rwxr-xr-xgit-shell-commands/mkrepo42
-rwxr-xr-xgit-shell-commands/setdesc37
7 files changed, 195 insertions, 0 deletions
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..b1530d2
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+BSD 3-Clause License (BSD-3-Clause)
+
+Copyright (C) 2024 dwlr <dweller@cabin.digital>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/README b/README
new file mode 100644
index 0000000..e33a6b3
--- /dev/null
+++ b/README
@@ -0,0 +1,34 @@
+gitscripts
+----------
+
+Collection of scripts that make it easier to manager self-hosted git server.
+
+
+If you have a git server, and you don't like the idea of running large web frontends, but still want
+to be able to do something as basic as create a new remote (bare) repository this might be for you.
+
+Install/Usage:
+ 1. Create a 'git' user (or any other name, but you'll have to substitute henceforth)
+ I use git's $HOME to store my repositories, but you can either change git's $HOME on creation
+ or just change PREFIX in the scripts;
+
+ 2. `chsh -s $(command -v git-shell) git` to change 'git' to use git-shell (this will restrict
+ the user to use only the git related commands we allow);
+
+ 3. Clone this repository and `cp -r git-shell-commands /home/git`, without this folder and
+ scripts in it, git-shell won't be interactive (see git-shell(1) man page).
+ - help: just prints the contents of git-shell-commands directory;
+ - mkrepo: creates a new bare repository at given path and optionally provides description;
+ - setdesc: sets/changes a repository's description.
+
+ 4. That's it for the remote, now copy (or `ln -s` from this repo) `git-description` and
+ `git-mkremote` to somewhere that is in your $PATH. Now you can access them by calling
+ `git mkremote/descremote`. All of them provide usage example when called without arguments;
+
+ 5. That's it! Now you can create remotes easily from the comfort of your terminal, like a normal
+ terminally terminal person.
+
+NOTICE:
+ The git-shell scripts provide access for anyone with ssh access to git user to create folders
+ and initialize repositories anywhere on your system with lax permissions! Maybe chroot(1)ing
+ your git server could be a good idea, or maybe if it's just a personal git sever this is okay.
diff --git a/git-descremote b/git-descremote
new file mode 100755
index 0000000..e7c0a78
--- /dev/null
+++ b/git-descremote
@@ -0,0 +1,19 @@
+#!/bin/sh
+# Copyright (C) 2024 dwlr <dweller@cabin.digital>
+#
+# BSD 3-Clause License (BSD-3-Clause)
+# See LICENSE for details
+
+set -e
+
+
+if [ $# -lt 3 ]; then
+ echo "Usage: $0 <server> <repo name> <description>"
+ exit 1;
+fi
+
+serv=$1
+repo=$2
+shift 2
+
+ssh "$serv" setdesc "$repo" "$@"
diff --git a/git-mkremote b/git-mkremote
new file mode 100755
index 0000000..168f142
--- /dev/null
+++ b/git-mkremote
@@ -0,0 +1,21 @@
+#!/bin/sh
+# Copyright (C) 2024 dwlr <dweller@cabin.digital>
+#
+# BSD 3-Clause License (BSD-3-Clause)
+# See LICENSE for details
+
+set -e
+
+
+if [ $# -lt 3 ]; then
+ echo "Usage: $0 <name> <server> <repo name> [description]"
+ exit 1;
+fi
+
+name=$1
+serv=$2
+repo=$3
+shift 3
+
+remote=$(ssh "$serv" mkrepo "$repo" "$@")
+git remote add "$name" "$serv$remote"
diff --git a/git-shell-commands/help b/git-shell-commands/help
new file mode 100755
index 0000000..292cb97
--- /dev/null
+++ b/git-shell-commands/help
@@ -0,0 +1,12 @@
+#!/bin/sh
+# Copyright (C) 2024 dwlr <dweller@cabin.digital>
+#
+# BSD 3-Clause License (BSD-3-Clause)
+# See LICENSE for details
+
+set -e
+
+
+echo "Available: commands:"
+ls "$HOME/git-shell-commands"
+echo "exit"
diff --git a/git-shell-commands/mkrepo b/git-shell-commands/mkrepo
new file mode 100755
index 0000000..356cafa
--- /dev/null
+++ b/git-shell-commands/mkrepo
@@ -0,0 +1,42 @@
+#!/bin/sh
+# Copyright (C) 2024 dwlr <dweller@cabin.digital>
+#
+# BSD 3-Clause License (BSD-3-Clause)
+# See LICENSE for details
+
+set -e
+
+#FIXME: this is wide open for exploits by using crafted paths like ../../../etc/passwd or something
+# But we should be okay since this is behind ssh, right? r- right..?
+
+
+PREFIX="$HOME/repos"
+
+if [ $# -lt 1 ]; then
+ echo "Usage: $(basename $0) <repo name> [description]"
+ exit 1;
+fi
+
+case "$1" in
+ *.git) reponame="$1" ;;
+ *) reponame="$1.git" ;;
+esac
+
+netname=$(echo "$PREFIX/$reponame" | sed "s|$HOME|:|")
+reponame="$PREFIX/$reponame"
+
+
+if [ ! -e "$reponame" ];
+then
+ mkdir -p "$reponame"
+ cd "$reponame"
+ git init -q --bare && echo "$netname" || echo "Failed to create repo '$netname' :("
+
+ if [ $# -gt 1 ]; then
+ shift
+ echo "$@" > description
+ fi
+else
+ echo "$netname exists!"
+ exit 1
+fi
diff --git a/git-shell-commands/setdesc b/git-shell-commands/setdesc
new file mode 100755
index 0000000..651b170
--- /dev/null
+++ b/git-shell-commands/setdesc
@@ -0,0 +1,37 @@
+#!/bin/sh
+# Copyright (C) 2024 dwlr <dweller@cabin.digital>
+#
+# BSD 3-Clause License (BSD-3-Clause)
+# See LICENSE for details
+
+set -e
+
+#FIXME: this is wide open for exploits by using crafted paths like ../../../etc/passwd or something
+# But we should be okay since this is behind ssh, right? r- right..?
+
+
+PREFIX="$HOME/repos"
+
+if [ $# -lt 2 ]; then
+ echo "Usage: $(basename $0) <repo name> <description>"
+ exit 1;
+fi
+
+case "$1" in
+ *.git) reponame="$1" ;;
+ *) reponame="$1.git" ;;
+esac
+
+netname=$(echo "$PREFIX/$reponame" | sed "s|$HOME|:|")
+reponame="$PREFIX/$reponame"
+
+
+if [ -e "$reponame" ];
+then
+ cd "$reponame"
+ shift
+ echo "$@" > description
+else
+ echo "$netname doesn't exists!"
+ exit 1
+fi