aethernal-agent 0.1.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.gitlab-ci.yml +23 -0
  4. data/.rspec +2 -0
  5. data/.ruby-gemset +1 -0
  6. data/.ruby-version +1 -0
  7. data/Gemfile +6 -0
  8. data/Gemfile.lock +107 -0
  9. data/README.md +35 -0
  10. data/Rakefile +31 -0
  11. data/Vagrantfile +32 -0
  12. data/aethernal-agent.gemspec +45 -0
  13. data/bin/console +14 -0
  14. data/bin/run-aa-for-test +35 -0
  15. data/bin/setup +8 -0
  16. data/exe/aa-web +7 -0
  17. data/lib/aethernal_agent.rb +34 -0
  18. data/lib/aethernal_agent/apache/apache.rb +70 -0
  19. data/lib/aethernal_agent/apache/templates/aa-user.conf.erb +21 -0
  20. data/lib/aethernal_agent/app.rb +317 -0
  21. data/lib/aethernal_agent/apt.rb +30 -0
  22. data/lib/aethernal_agent/errors.rb +17 -0
  23. data/lib/aethernal_agent/filesystem.rb +178 -0
  24. data/lib/aethernal_agent/loader.rb +56 -0
  25. data/lib/aethernal_agent/manifest.rb +6 -0
  26. data/lib/aethernal_agent/operation.rb +51 -0
  27. data/lib/aethernal_agent/operation_pool.rb +46 -0
  28. data/lib/aethernal_agent/plugins/deluge/deluge.rb +65 -0
  29. data/lib/aethernal_agent/plugins/deluge/manifest.yml +51 -0
  30. data/lib/aethernal_agent/plugins/deluge/meta/deluge.png +0 -0
  31. data/lib/aethernal_agent/plugins/deluge/templates/auth.erb +2 -0
  32. data/lib/aethernal_agent/plugins/deluge/templates/core.conf.erb +95 -0
  33. data/lib/aethernal_agent/plugins/deluge/templates/deluge-web.service.erb +12 -0
  34. data/lib/aethernal_agent/plugins/deluge/templates/deluge.apache.conf.erb +9 -0
  35. data/lib/aethernal_agent/plugins/deluge/templates/deluged.service.erb +12 -0
  36. data/lib/aethernal_agent/plugins/deluge/templates/hostlist.conf.erb +14 -0
  37. data/lib/aethernal_agent/plugins/deluge/templates/web.conf.erb +24 -0
  38. data/lib/aethernal_agent/plugins/filebrowser/filebrowser.rb +45 -0
  39. data/lib/aethernal_agent/plugins/filebrowser/files/filebrowser.service +12 -0
  40. data/lib/aethernal_agent/plugins/filebrowser/manifest.yml +51 -0
  41. data/lib/aethernal_agent/plugins/filebrowser/meta/filebrowser.png +0 -0
  42. data/lib/aethernal_agent/plugins/filebrowser/templates/filebrowser.apache.conf.erb +6 -0
  43. data/lib/aethernal_agent/plugins/gitea/files/gitea.service +12 -0
  44. data/lib/aethernal_agent/plugins/gitea/gitea.rb +64 -0
  45. data/lib/aethernal_agent/plugins/gitea/manifest.yml +53 -0
  46. data/lib/aethernal_agent/plugins/gitea/meta/gitea.png +0 -0
  47. data/lib/aethernal_agent/plugins/gitea/templates/app.ini.erb +68 -0
  48. data/lib/aethernal_agent/plugins/gitea/templates/gitea.apache.conf.erb +6 -0
  49. data/lib/aethernal_agent/plugins/olaris/manifest.yml +52 -0
  50. data/lib/aethernal_agent/plugins/olaris/meta/olaris.png +0 -0
  51. data/lib/aethernal_agent/plugins/olaris/olaris.rb +35 -0
  52. data/lib/aethernal_agent/plugins/olaris/templates/olaris.apache.conf.erb +6 -0
  53. data/lib/aethernal_agent/plugins/olaris/templates/olaris.service.erb +12 -0
  54. data/lib/aethernal_agent/plugins/ombi/manifest.yml +57 -0
  55. data/lib/aethernal_agent/plugins/ombi/meta/ombi.jpeg +0 -0
  56. data/lib/aethernal_agent/plugins/ombi/ombi.rb +81 -0
  57. data/lib/aethernal_agent/plugins/ombi/templates/ombi.apache.conf.erb +6 -0
  58. data/lib/aethernal_agent/plugins/ombi/templates/ombi.service.erb +14 -0
  59. data/lib/aethernal_agent/plugins/plex/files/plex.service +26 -0
  60. data/lib/aethernal_agent/plugins/plex/manifest.yml +49 -0
  61. data/lib/aethernal_agent/plugins/plex/meta/plex.png +0 -0
  62. data/lib/aethernal_agent/plugins/plex/plex.rb +65 -0
  63. data/lib/aethernal_agent/plugins/plex/templates/Preferences.xml.erb +2 -0
  64. data/lib/aethernal_agent/plugins/radarr/files/radarr.service +13 -0
  65. data/lib/aethernal_agent/plugins/radarr/manifest.yml +68 -0
  66. data/lib/aethernal_agent/plugins/radarr/meta/radarr.png +0 -0
  67. data/lib/aethernal_agent/plugins/radarr/radarr.rb +72 -0
  68. data/lib/aethernal_agent/plugins/radarr/templates/config.xml.erb +16 -0
  69. data/lib/aethernal_agent/plugins/radarr/templates/radarr.apache.conf.erb +6 -0
  70. data/lib/aethernal_agent/plugins/sonarr/files/sonarr.service +13 -0
  71. data/lib/aethernal_agent/plugins/sonarr/manifest.yml +66 -0
  72. data/lib/aethernal_agent/plugins/sonarr/meta/sonarr.jpeg +0 -0
  73. data/lib/aethernal_agent/plugins/sonarr/sonarr.rb +70 -0
  74. data/lib/aethernal_agent/plugins/sonarr/templates/config.xml.erb +16 -0
  75. data/lib/aethernal_agent/plugins/sonarr/templates/sonarr.apache.conf.erb +6 -0
  76. data/lib/aethernal_agent/plugins/vnc/files/xstartup +9 -0
  77. data/lib/aethernal_agent/plugins/vnc/manifest.yml +41 -0
  78. data/lib/aethernal_agent/plugins/vnc/meta/vnc.png +0 -0
  79. data/lib/aethernal_agent/plugins/vnc/templates/vnc.service.erb +14 -0
  80. data/lib/aethernal_agent/plugins/vnc/vnc.rb +41 -0
  81. data/lib/aethernal_agent/systemd.rb +123 -0
  82. data/lib/aethernal_agent/template.rb +57 -0
  83. data/lib/aethernal_agent/utils.rb +107 -0
  84. data/lib/aethernal_agent/version.rb +3 -0
  85. data/lib/aethernal_agent/webserver/api.rb +77 -0
  86. data/lib/aethernal_agent/webserver/core.rb +32 -0
  87. 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
@@ -0,0 +1,6 @@
1
+ Redirect "/filebrowser/" "/filebrowser"
2
+ <Location /filebrowser>
3
+ ProxyPass http://127.0.0.1:<%= @port %>/filebrowser
4
+ ProxyPassReverse http://127.0.0.1:<%= @port %>/filebrowser
5
+ Require all granted
6
+ </Location>
@@ -0,0 +1,12 @@
1
+ [Unit]
2
+ Description=Gitea
3
+ After=network-online.target
4
+
5
+ [Service]
6
+ Type=simple
7
+ ExecStartPre=-/usr/bin/killall -q gitea
8
+ ExecStart=%h/apps/gitea/gitea --config %h/.config/gitea/app.ini
9
+ Restart=on-failure
10
+
11
+ [Install]
12
+ WantedBy=default.target
@@ -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
@@ -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,6 @@
1
+ redirect "/gitea" "/gitea/"
2
+ <Location /gitea/>
3
+ ProxyPass http://127.0.0.1:<%= @port %>/
4
+ ProxyPassReverse http://127.0.0.1:<%= @port %>/
5
+ Require all granted
6
+ </Location>
@@ -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
@@ -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,6 @@
1
+ Redirect "/olaris" "/olaris/app"
2
+ <Location /olaris/>
3
+ ProxyPass http://localhost:<%= @port %>/olaris/
4
+ ProxyPassReverse http://localhost:<%= @port %>/olaris/
5
+ Require all granted
6
+ </Location>
@@ -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