aethernal-agent 0.1.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.gitlab-ci.yml +23 -0
- data/.rspec +2 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +107 -0
- data/README.md +35 -0
- data/Rakefile +31 -0
- data/Vagrantfile +32 -0
- data/aethernal-agent.gemspec +45 -0
- data/bin/console +14 -0
- data/bin/run-aa-for-test +35 -0
- data/bin/setup +8 -0
- data/exe/aa-web +7 -0
- data/lib/aethernal_agent.rb +34 -0
- data/lib/aethernal_agent/apache/apache.rb +70 -0
- data/lib/aethernal_agent/apache/templates/aa-user.conf.erb +21 -0
- data/lib/aethernal_agent/app.rb +317 -0
- data/lib/aethernal_agent/apt.rb +30 -0
- data/lib/aethernal_agent/errors.rb +17 -0
- data/lib/aethernal_agent/filesystem.rb +178 -0
- data/lib/aethernal_agent/loader.rb +56 -0
- data/lib/aethernal_agent/manifest.rb +6 -0
- data/lib/aethernal_agent/operation.rb +51 -0
- data/lib/aethernal_agent/operation_pool.rb +46 -0
- data/lib/aethernal_agent/plugins/deluge/deluge.rb +65 -0
- data/lib/aethernal_agent/plugins/deluge/manifest.yml +51 -0
- data/lib/aethernal_agent/plugins/deluge/meta/deluge.png +0 -0
- data/lib/aethernal_agent/plugins/deluge/templates/auth.erb +2 -0
- data/lib/aethernal_agent/plugins/deluge/templates/core.conf.erb +95 -0
- data/lib/aethernal_agent/plugins/deluge/templates/deluge-web.service.erb +12 -0
- data/lib/aethernal_agent/plugins/deluge/templates/deluge.apache.conf.erb +9 -0
- data/lib/aethernal_agent/plugins/deluge/templates/deluged.service.erb +12 -0
- data/lib/aethernal_agent/plugins/deluge/templates/hostlist.conf.erb +14 -0
- data/lib/aethernal_agent/plugins/deluge/templates/web.conf.erb +24 -0
- data/lib/aethernal_agent/plugins/filebrowser/filebrowser.rb +45 -0
- data/lib/aethernal_agent/plugins/filebrowser/files/filebrowser.service +12 -0
- data/lib/aethernal_agent/plugins/filebrowser/manifest.yml +51 -0
- data/lib/aethernal_agent/plugins/filebrowser/meta/filebrowser.png +0 -0
- data/lib/aethernal_agent/plugins/filebrowser/templates/filebrowser.apache.conf.erb +6 -0
- data/lib/aethernal_agent/plugins/gitea/files/gitea.service +12 -0
- data/lib/aethernal_agent/plugins/gitea/gitea.rb +64 -0
- data/lib/aethernal_agent/plugins/gitea/manifest.yml +53 -0
- data/lib/aethernal_agent/plugins/gitea/meta/gitea.png +0 -0
- data/lib/aethernal_agent/plugins/gitea/templates/app.ini.erb +68 -0
- data/lib/aethernal_agent/plugins/gitea/templates/gitea.apache.conf.erb +6 -0
- data/lib/aethernal_agent/plugins/olaris/manifest.yml +52 -0
- data/lib/aethernal_agent/plugins/olaris/meta/olaris.png +0 -0
- data/lib/aethernal_agent/plugins/olaris/olaris.rb +35 -0
- data/lib/aethernal_agent/plugins/olaris/templates/olaris.apache.conf.erb +6 -0
- data/lib/aethernal_agent/plugins/olaris/templates/olaris.service.erb +12 -0
- data/lib/aethernal_agent/plugins/ombi/manifest.yml +57 -0
- data/lib/aethernal_agent/plugins/ombi/meta/ombi.jpeg +0 -0
- data/lib/aethernal_agent/plugins/ombi/ombi.rb +81 -0
- data/lib/aethernal_agent/plugins/ombi/templates/ombi.apache.conf.erb +6 -0
- data/lib/aethernal_agent/plugins/ombi/templates/ombi.service.erb +14 -0
- data/lib/aethernal_agent/plugins/plex/files/plex.service +26 -0
- data/lib/aethernal_agent/plugins/plex/manifest.yml +49 -0
- data/lib/aethernal_agent/plugins/plex/meta/plex.png +0 -0
- data/lib/aethernal_agent/plugins/plex/plex.rb +65 -0
- data/lib/aethernal_agent/plugins/plex/templates/Preferences.xml.erb +2 -0
- data/lib/aethernal_agent/plugins/radarr/files/radarr.service +13 -0
- data/lib/aethernal_agent/plugins/radarr/manifest.yml +68 -0
- data/lib/aethernal_agent/plugins/radarr/meta/radarr.png +0 -0
- data/lib/aethernal_agent/plugins/radarr/radarr.rb +72 -0
- data/lib/aethernal_agent/plugins/radarr/templates/config.xml.erb +16 -0
- data/lib/aethernal_agent/plugins/radarr/templates/radarr.apache.conf.erb +6 -0
- data/lib/aethernal_agent/plugins/sonarr/files/sonarr.service +13 -0
- data/lib/aethernal_agent/plugins/sonarr/manifest.yml +66 -0
- data/lib/aethernal_agent/plugins/sonarr/meta/sonarr.jpeg +0 -0
- data/lib/aethernal_agent/plugins/sonarr/sonarr.rb +70 -0
- data/lib/aethernal_agent/plugins/sonarr/templates/config.xml.erb +16 -0
- data/lib/aethernal_agent/plugins/sonarr/templates/sonarr.apache.conf.erb +6 -0
- data/lib/aethernal_agent/plugins/vnc/files/xstartup +9 -0
- data/lib/aethernal_agent/plugins/vnc/manifest.yml +41 -0
- data/lib/aethernal_agent/plugins/vnc/meta/vnc.png +0 -0
- data/lib/aethernal_agent/plugins/vnc/templates/vnc.service.erb +14 -0
- data/lib/aethernal_agent/plugins/vnc/vnc.rb +41 -0
- data/lib/aethernal_agent/systemd.rb +123 -0
- data/lib/aethernal_agent/template.rb +57 -0
- data/lib/aethernal_agent/utils.rb +107 -0
- data/lib/aethernal_agent/version.rb +3 -0
- data/lib/aethernal_agent/webserver/api.rb +77 -0
- data/lib/aethernal_agent/webserver/core.rb +32 -0
- metadata +257 -0
@@ -0,0 +1,45 @@
|
|
1
|
+
class AethernalAgent::Filebrowser < AethernalAgent::App
|
2
|
+
def initialize(options = {})
|
3
|
+
super(options)
|
4
|
+
end
|
5
|
+
|
6
|
+
def install_packages(options = {})
|
7
|
+
super(options)
|
8
|
+
file(filebrowser_path, chmod: 711, owner: self.user)
|
9
|
+
end
|
10
|
+
|
11
|
+
def remove_app_user(options = {})
|
12
|
+
super(options) do |opts|
|
13
|
+
directory(home_folder_path(".config/filebrowser"), action: :delete)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def configure_app_user(options = {})
|
18
|
+
self.install_packages(options)
|
19
|
+
|
20
|
+
super(options) do |opts|
|
21
|
+
run_as(self.user,"#{filebrowser_path} config init -d #{filebrowser_db_path}")
|
22
|
+
run_as(self.user,"#{filebrowser_path} users add #{self.user} #{opts[:password]} --perm.admin -d #{filebrowser_db_path}")
|
23
|
+
run_as(self.user,"#{filebrowser_path} config set -p #{opts[:port]} -a '[::]' -b '/filebrowser' -d #{filebrowser_db_path}")
|
24
|
+
run_as(self.user,"#{filebrowser_path} rules add -r \"[\\\\\\/]\\..+\" -u #{self.user} -d #{filebrowser_db_path}")
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
def filebrowser_path
|
30
|
+
app_path('filebrowser')
|
31
|
+
end
|
32
|
+
|
33
|
+
def filebrowser_db_path
|
34
|
+
File.join(home_folder_path(".config/filebrowser"), "filebrowser.db")
|
35
|
+
end
|
36
|
+
|
37
|
+
def source_path(opts)
|
38
|
+
File.join(filebrowser_path, source_name, 'filebrowser')
|
39
|
+
end
|
40
|
+
|
41
|
+
def source_name
|
42
|
+
self.manifest.package['direct_download']['target_name']
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
[Unit]
|
2
|
+
Description=Filebrowser
|
3
|
+
After=network-online.target
|
4
|
+
|
5
|
+
[Service]
|
6
|
+
Type=simple
|
7
|
+
ExecStartPre=-/usr/bin/killall -q filebrowser
|
8
|
+
ExecStart=%h/apps/filebrowser/filebrowser --database %h/.config/filebrowser/filebrowser.db
|
9
|
+
Restart=on-failure
|
10
|
+
|
11
|
+
[Install]
|
12
|
+
WantedBy=default.target
|
@@ -0,0 +1,51 @@
|
|
1
|
+
name: Filebrowser
|
2
|
+
script_name: filebrowser.rb
|
3
|
+
version: 0.1
|
4
|
+
required_aethernal_agent_version: "~> 0.1.0"
|
5
|
+
description: Web File Browser which can be used as a middleware or standalone app
|
6
|
+
installation_type: local_install
|
7
|
+
configuration_type: multi_user
|
8
|
+
apache_configuration: filebrowser.apache.conf.erb
|
9
|
+
plain_name: filebrowser
|
10
|
+
built_in_updater: false
|
11
|
+
icon:
|
12
|
+
sha256sum: "7a2e7391af709e0050df2dda06afbaf331fc905156b47b7f0328de090c03fbec"
|
13
|
+
name: "filebrowser.png"
|
14
|
+
services:
|
15
|
+
- filebrowser
|
16
|
+
actions:
|
17
|
+
restart:
|
18
|
+
user:
|
19
|
+
required: true
|
20
|
+
linux_user: true
|
21
|
+
uninstall:
|
22
|
+
nothing: true
|
23
|
+
install_packages:
|
24
|
+
required: true
|
25
|
+
linux_user: true
|
26
|
+
remove_app_user:
|
27
|
+
user:
|
28
|
+
required: true
|
29
|
+
linux_user: true
|
30
|
+
configure_app_user:
|
31
|
+
port:
|
32
|
+
auto_generate_port: true
|
33
|
+
min: 6900
|
34
|
+
max: 6999
|
35
|
+
user:
|
36
|
+
required: true
|
37
|
+
linux_user: true
|
38
|
+
password:
|
39
|
+
required: false
|
40
|
+
auto_generate: true
|
41
|
+
display_values:
|
42
|
+
- user
|
43
|
+
- password
|
44
|
+
estimated_size_mb: 1
|
45
|
+
package:
|
46
|
+
folder_name: filebrowser
|
47
|
+
direct_download:
|
48
|
+
url: https://github.com/filebrowser/filebrowser/releases/latest/download/linux-amd64-filebrowser.tar.gz
|
49
|
+
target_name: linux-amd64-filebrowser.tar.gz
|
50
|
+
auto_extract: true
|
51
|
+
always_latest: true
|
Binary file
|
@@ -0,0 +1,64 @@
|
|
1
|
+
class AethernalAgent::Gitea < AethernalAgent::App
|
2
|
+
def initialize(options = {})
|
3
|
+
super(options)
|
4
|
+
end
|
5
|
+
|
6
|
+
def install_packages(options = {})
|
7
|
+
super(options)
|
8
|
+
file(gitea_path, chmod: 711, owner: self.user)
|
9
|
+
end
|
10
|
+
|
11
|
+
def remove_app_user(options = {})
|
12
|
+
super(options) do |opts|
|
13
|
+
directory(gitea_config_path, action: :delete)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def configure_app_user(options = {})
|
18
|
+
self.install_packages(options)
|
19
|
+
|
20
|
+
super(options) do |opts|
|
21
|
+
directory(home_folder_path(".config/gitea/"), owner: self.user)
|
22
|
+
|
23
|
+
vars = {
|
24
|
+
user: self.user,
|
25
|
+
home_folder: home_folder_path,
|
26
|
+
port: opts[:port],
|
27
|
+
ssh_port: opts[:ssh_port],
|
28
|
+
ssh_host_port: opts[:ssh_host_port],
|
29
|
+
container_name: get_global_config(:container_name),
|
30
|
+
host_name: get_global_config(:hostname)
|
31
|
+
}.merge(generated_tokens_from_gitea)
|
32
|
+
|
33
|
+
write_template(template_path('app.ini.erb'),
|
34
|
+
gitea_config_path('app.ini'),
|
35
|
+
vars,
|
36
|
+
{
|
37
|
+
owner: vars[:user]
|
38
|
+
}
|
39
|
+
)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
protected
|
44
|
+
def gitea_path
|
45
|
+
app_path('gitea')
|
46
|
+
end
|
47
|
+
|
48
|
+
def gitea_config_path(path ="/")
|
49
|
+
File.join(home_folder_path(".config/gitea"), path)
|
50
|
+
end
|
51
|
+
|
52
|
+
def generated_tokens_from_gitea
|
53
|
+
internal_token = `#{gitea_path} generate secret INTERNAL_TOKEN`
|
54
|
+
secret_key = `#{gitea_path} generate secret SECRET_KEY`
|
55
|
+
lfs_jwt_secret = `#{gitea_path} generate secret LFS_JWT_SECRET`
|
56
|
+
|
57
|
+
{
|
58
|
+
internal_token: internal_token,
|
59
|
+
secret_key: secret_key,
|
60
|
+
lfs_jwt_secret: lfs_jwt_secret
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
name: Gitea
|
2
|
+
script_name: gitea.rb
|
3
|
+
version: 0.1
|
4
|
+
required_aethernal_agent_version: "~> 0.1.0"
|
5
|
+
description: Gitea - Git with a cup of tea, A painless self-hosted Git service.
|
6
|
+
installation_type: local_install
|
7
|
+
configuration_type: multi_user
|
8
|
+
apache_configuration: gitea.apache.conf.erb
|
9
|
+
plain_name: gitea
|
10
|
+
built_in_updater: false
|
11
|
+
icon:
|
12
|
+
name: "gitea.png"
|
13
|
+
sha256sum: "91d4fc840443a1149b8aa48e71a99d71be70ab3b15ff0e16200a11e4460a7ddb"
|
14
|
+
services:
|
15
|
+
- gitea
|
16
|
+
actions:
|
17
|
+
restart:
|
18
|
+
user:
|
19
|
+
required: true
|
20
|
+
linux_user: true
|
21
|
+
uninstall:
|
22
|
+
nothing: true
|
23
|
+
install_packages:
|
24
|
+
required: true
|
25
|
+
linux_user: true
|
26
|
+
remove_app_user:
|
27
|
+
user:
|
28
|
+
required: true
|
29
|
+
linux_user: true
|
30
|
+
configure_app_user:
|
31
|
+
ssh_host_port:
|
32
|
+
required: false
|
33
|
+
ssh_port:
|
34
|
+
external_port: ssh_host_port
|
35
|
+
auto_generate_port: true
|
36
|
+
min: 6000
|
37
|
+
max: 19999
|
38
|
+
required: false
|
39
|
+
port:
|
40
|
+
required: false
|
41
|
+
auto_generate_port: true
|
42
|
+
min: 6000
|
43
|
+
max: 19999
|
44
|
+
user:
|
45
|
+
required: true
|
46
|
+
linux_user: true
|
47
|
+
estimated_size_mb: 1
|
48
|
+
package:
|
49
|
+
folder_name: gitea
|
50
|
+
direct_download:
|
51
|
+
url: https://dl.gitea.io/gitea/master/gitea-master-linux-amd64
|
52
|
+
target_name: gitea
|
53
|
+
always_latest: true
|
Binary file
|
@@ -0,0 +1,68 @@
|
|
1
|
+
APP_NAME = Gitea BOSS edition
|
2
|
+
RUN_USER = <%= @user %>
|
3
|
+
RUN_MODE = prod
|
4
|
+
|
5
|
+
[security]
|
6
|
+
INTERNAL_TOKEN = <%= @internal_token %>
|
7
|
+
INSTALL_LOCK = true
|
8
|
+
SECRET_KEY = <%= @secret_key %>
|
9
|
+
|
10
|
+
[database]
|
11
|
+
DB_TYPE = sqlite3
|
12
|
+
HOST = 127.0.0.1:3306
|
13
|
+
NAME = gitea
|
14
|
+
USER = gitea
|
15
|
+
PASSWD =
|
16
|
+
SSL_MODE = disable
|
17
|
+
CHARSET = utf8
|
18
|
+
PATH = <%= @home_folder %>/.config/gitea/data/gitea.db
|
19
|
+
|
20
|
+
[repository]
|
21
|
+
ROOT = <%= @home_folder %>/.config/gitea/repositories
|
22
|
+
|
23
|
+
[server]
|
24
|
+
SSH_DOMAIN = localhost
|
25
|
+
DOMAIN = localhost
|
26
|
+
HTTP_PORT = <%= @port %>
|
27
|
+
ROOT_URL = http://<%= "#{@user}.#{@container_name}.#{@host_name}" %>/gitea
|
28
|
+
DISABLE_SSH = false
|
29
|
+
START_SSH_SERVER = true
|
30
|
+
SSH_PORT = <%= @ssh_host_port %>
|
31
|
+
SSH_LISTEN_PORT = <%= @ssh_port %>
|
32
|
+
SSH_DOMAIN = <%= "#{@user}.#{@container_name}.#{@host_name}" %>
|
33
|
+
|
34
|
+
LFS_START_SERVER = true
|
35
|
+
LFS_CONTENT_PATH = <%= @home_folder %>/.config/gitea/data/lfs
|
36
|
+
LFS_JWT_SECRET = <%= @lfs_jwt_secret %>
|
37
|
+
OFFLINE_MODE = false
|
38
|
+
|
39
|
+
[mailer]
|
40
|
+
ENABLED = false
|
41
|
+
|
42
|
+
[service]
|
43
|
+
REGISTER_EMAIL_CONFIRM = false
|
44
|
+
ENABLE_NOTIFY_MAIL = false
|
45
|
+
DISABLE_REGISTRATION = false
|
46
|
+
ALLOW_ONLY_EXTERNAL_REGISTRATION = false
|
47
|
+
ENABLE_CAPTCHA = false
|
48
|
+
REQUIRE_SIGNIN_VIEW = false
|
49
|
+
DEFAULT_KEEP_EMAIL_PRIVATE = false
|
50
|
+
DEFAULT_ALLOW_CREATE_ORGANIZATION = true
|
51
|
+
DEFAULT_ENABLE_TIMETRACKING = true
|
52
|
+
NO_REPLY_ADDRESS = noreply.example.org
|
53
|
+
|
54
|
+
[picture]
|
55
|
+
DISABLE_GRAVATAR = false
|
56
|
+
ENABLE_FEDERATED_AVATAR = true
|
57
|
+
|
58
|
+
[openid]
|
59
|
+
ENABLE_OPENID_SIGNIN = true
|
60
|
+
ENABLE_OPENID_SIGNUP = true
|
61
|
+
|
62
|
+
[session]
|
63
|
+
PROVIDER = file
|
64
|
+
|
65
|
+
[log]
|
66
|
+
MODE = file
|
67
|
+
LEVEL = info
|
68
|
+
ROOT_PATH = <%= @home_folder %>/.config/gitea/logs
|
@@ -0,0 +1,52 @@
|
|
1
|
+
name: Olaris Media Server
|
2
|
+
script_name: olaris.rb
|
3
|
+
version: 0.1
|
4
|
+
required_aethernal_agent_version: "~> 0.1.0"
|
5
|
+
description: Olaris is a free and open-source media server for your personal media collection.
|
6
|
+
installation_type: local_install
|
7
|
+
configuration_type: multi_user
|
8
|
+
apache_configuration: olaris.apache.conf.erb
|
9
|
+
plain_name: olaris
|
10
|
+
built_in_updater: false
|
11
|
+
icon:
|
12
|
+
name: olaris.png
|
13
|
+
sha256sum: c9f94d309691e755702c3366dc38294d6cd91d52fc38886a1baf501c0f270b5b
|
14
|
+
services:
|
15
|
+
- olaris
|
16
|
+
actions:
|
17
|
+
restart:
|
18
|
+
user:
|
19
|
+
required: true
|
20
|
+
linux_user: true
|
21
|
+
uninstall:
|
22
|
+
nothing: true
|
23
|
+
install_packages:
|
24
|
+
user:
|
25
|
+
required: true
|
26
|
+
linux_user: true
|
27
|
+
remove_app_user:
|
28
|
+
user:
|
29
|
+
required: true
|
30
|
+
linux_user: true
|
31
|
+
configure_app_user:
|
32
|
+
port:
|
33
|
+
auto_generate_port: true
|
34
|
+
min: 5900
|
35
|
+
max: 5999
|
36
|
+
user:
|
37
|
+
required: true
|
38
|
+
linux_user: true
|
39
|
+
password:
|
40
|
+
required: false
|
41
|
+
auto_generate: true
|
42
|
+
display_values:
|
43
|
+
- user
|
44
|
+
- password
|
45
|
+
estimated_size_mb: 120
|
46
|
+
package:
|
47
|
+
folder_name: olaris
|
48
|
+
direct_download:
|
49
|
+
url: https://gitlab.com/olaris/olaris-server/-/jobs/artifacts/develop/download?job=dist-linux-amd64
|
50
|
+
target_name: olaris.zip
|
51
|
+
auto_extract: true
|
52
|
+
always_latest: false
|
Binary file
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class AethernalAgent::Olaris < AethernalAgent::App
|
2
|
+
def initialize(options = {})
|
3
|
+
super(options)
|
4
|
+
end
|
5
|
+
|
6
|
+
def install_packages(options = {})
|
7
|
+
super(options)
|
8
|
+
|
9
|
+
unzip("olaris-linux-amd64-*.zip")
|
10
|
+
end
|
11
|
+
|
12
|
+
def remove_app_user(options = {})
|
13
|
+
super(options) do |opts|
|
14
|
+
directory home_folder_path(".config/olaris"), action: :delete
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def configure_app_user(options = {})
|
19
|
+
self.install_packages(options)
|
20
|
+
|
21
|
+
super(options) do |opts|
|
22
|
+
directory home_folder_path("media/Movies"), action: :create
|
23
|
+
directory home_folder_path("media/TV Shows"), action: :create
|
24
|
+
|
25
|
+
run_as(self.user,"#{olaris_bin_path} user create --admin --username #{self.user} --password #{opts[:password]}")
|
26
|
+
run_as(self.user,"#{olaris_bin_path} library create --name movies --path #{home_folder_path("media/Movies")} --media_type 0")
|
27
|
+
run_as(self.user,"#{olaris_bin_path} library create --name tv --path '#{home_folder_path("media/TV Shows")}' --media_type 1")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
protected
|
32
|
+
def olaris_bin_path
|
33
|
+
app_path('bin/olaris')
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
[Unit]
|
2
|
+
Description=Olaris Media Server
|
3
|
+
After=network-online.target
|
4
|
+
|
5
|
+
[Service]
|
6
|
+
Type=simple
|
7
|
+
ExecStartPre=-/usr/bin/killall -q olaris
|
8
|
+
ExecStart=%h/apps/olaris/bin/olaris serve --port <%= @port %>
|
9
|
+
Restart=on-failure
|
10
|
+
|
11
|
+
[Install]
|
12
|
+
WantedBy=default.target
|