aethernal-agent 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
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