forked from spawngrid/htoad
/
htoad_pkg_apt.erl
43 lines (36 loc) · 2.11 KB
/
htoad_pkg_apt.erl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
-module(htoad_pkg_apt).
-include_lib("htoad/include/htoad.hrl").
-include_lib("htoad/include/toadie.hrl").
-include_lib("htoad/include/stdlib.hrl").
-rules([init, ensure_package, package_not_present]).
init(Engine, #init{}, {operating_system_name, linux}, {linux_distribution, "Ubuntu"}) ->
initialize(Engine);
init(Engine, #init{}, {operating_system_name, linux}, {linux_distribution, "Debian"}) ->
initialize(Engine).
initialize(Engine) ->
lager:debug("APT has been selected as a package manager"),
htoad:assert(Engine, {package_manager, apt}).
-define(APT_SHELL_CHECK(Package),
case Package of
#package{ name = Name, version = undefined } ->
#shell{ cmd = "([ `dpkg -s " ++ Name ++ " 1>/dev/null 2>/dev/null | grep Status | wc -l` = 0 ] && printf missing) || printf present"};
#package{ name = Name, version = Version } ->
#shell{ cmd = "([ `dpkg -s " ++ Name ++ " 1>/dev/null 2>/dev/null | grep Status | wc -l` = 0 ] && printf missing) || (([ -z `dpkg -s " ++ Name ++ " | grep Version | grep " ++ Version ++ " | wc -l` ] && printf missing) || printf present) "}
end).
-define(APT_SHELL_INSTALL(Package),
case Package of
#package{ name = Name, version = undefined } ->
#shell{ cmd = "(apt-get -y install " ++ Name ++ " && printf installed) "
"|| printf not_installed",
run_as = superuser };
#package{ name = Name, version = Version } ->
#shell{ cmd = "(apt-get -y install " ++ Name ++ " =" ++ Version ++ " && printf installed) "
"|| printf not_installed",
run_as = superuser }
end).
ensure_package(Engine, {ensure, present, #package{} = Package}, {package_manager, apt}) ->
htoad_pkg:ensure_package(Engine, Package, ?APT_SHELL_CHECK(Package)).
package_not_present(Engine, {package_check,
#package{} = Package,
"missing"}, {package_manager, apt}) ->
htoad_pkg:package_not_present(Engine, Package, ?APT_SHELL_INSTALL(Package)).