From 3a7eb1f0d5f85443d2fbeb48435b367c768fbf37 Mon Sep 17 00:00:00 2001 From: Jordan West Date: Mon, 6 Oct 2014 20:20:50 -0700 Subject: [PATCH 1/9] add support for custom exit codes to nodetool rpc & friends --- priv/base/nodetool | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/priv/base/nodetool b/priv/base/nodetool index 23503d7..0e95609 100755 --- a/priv/base/nodetool +++ b/priv/base/nodetool @@ -71,6 +71,11 @@ main(Args) -> {badrpc, Reason} -> io:format(standard_error, "RPC to ~p failed: ~p\n", [TargetNode, Reason]), halt(1); + {error, Code} when is_integer(Code) -> + halt(Code); + {error, Code, Reason} when is_integer(Code) -> + io:format(standard_error, "ERROR: ~p\n", [Reason]), + halt(Code); _ -> halt(1) end; @@ -81,6 +86,11 @@ main(Args) -> {badrpc, Reason} -> io:format(standard_error, "RPC to ~p failed: ~p\n", [TargetNode, Reason]), halt(1); + {error, Code} when is_integer(Code) -> + halt(Code); + {error, Code, Reason} when is_integer(Code) -> + io:format(standard_error, "ERROR: ~p\n", [Reason]), + halt(Code); _ -> halt(1) end; @@ -90,6 +100,11 @@ main(Args) -> {badrpc, Reason} -> io:format(standard_error, "RPC to ~p failed: ~p\n", [TargetNode, Reason]), halt(1); + {error, Code} when is_integer(Code) -> + halt(Code); + {error, Code, Reason} when is_integer(Code) -> + io:format(standard_error, "ERROR: ~p\n", [Reason]), + halt(Code); Other -> io:format("~p\n", [Other]) end; From 60b6febaab72c5e8a09aed657723e56a5cc769b1 Mon Sep 17 00:00:00 2001 From: Sean Cribbs Date: Tue, 11 Nov 2014 09:29:00 -0600 Subject: [PATCH 2/9] Handle net_ticktime argument specially. Resolves RIAK-1281 `escript` does not process emulator/runtime arguments like `erl`, so you can't blindly pass an application environment setting on the command line. This meant that the `-kernel net_ticktime N` argument passed to nodetool was not functioning as intended and being treated as regular arguments, resulting in a crash. The net_ticktime setting is also a sensitive setting and should likely be set before the Erlang distribution is started. I can only assume that the original author that added it had intended for it to be loaded by the application_controller, as `erl` does. Therefore, this change handles net_ticktime specially in nodetool:process_args/3 and puts it as the first argument to the script so that it is set first. --- priv/base/env.sh | 2 +- priv/base/nodetool | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/priv/base/env.sh b/priv/base/env.sh index 53704fc..bcaf475 100755 --- a/priv/base/env.sh +++ b/priv/base/env.sh @@ -117,7 +117,7 @@ APP_VSN=${START_ERL#* } ERTS_PATH=$RUNNER_BASE_DIR/erts-$ERTS_VSN/bin # Setup command to control the node -NODETOOL="$ERTS_PATH/escript $ERTS_PATH/nodetool $NAME_ARG $COOKIE_ARG $NET_TICKTIME_ARG" +NODETOOL="$ERTS_PATH/escript $ERTS_PATH/nodetool $NET_TICKTIME_ARG $NAME_ARG $COOKIE_ARG" NODETOOL_LITE="$ERTS_PATH/escript $ERTS_PATH/nodetool" diff --git a/priv/base/nodetool b/priv/base/nodetool index 0e95609..65c2092 100755 --- a/priv/base/nodetool +++ b/priv/base/nodetool @@ -116,6 +116,9 @@ main(Args) -> process_args([], Acc, TargetNode) -> {lists:reverse(Acc), TargetNode}; +process_args(["-kernel", "net_ticktime", Value | Rest], Acc, TargetNode) -> + application:set_env(kernel, net_ticktime, list_to_integer(Value)), + process_args(Rest, Acc, TargetNode); process_args(["-setcookie", Cookie | Rest], Acc, TargetNode) -> erlang:set_cookie(node(), list_to_atom(Cookie)), process_args(Rest, Acc, TargetNode); From 6c174a671fc5d9f96f145d3039c5d6b4c4cee2b0 Mon Sep 17 00:00:00 2001 From: Greg Cymbalski Date: Thu, 4 Dec 2014 12:08:51 -0800 Subject: [PATCH 3/9] Never remove the data dirs for Riak --- priv/templates/deb/postrm | 3 --- 1 file changed, 3 deletions(-) diff --git a/priv/templates/deb/postrm b/priv/templates/deb/postrm index 506721c..bbdf548 100755 --- a/priv/templates/deb/postrm +++ b/priv/templates/deb/postrm @@ -26,9 +26,6 @@ case "$1" in # ensure we remove the rc.d scripts installed by postinst update-rc.d {{package_install_name}} remove >/dev/null - if [ -d /var/lib/{{package_install_name}} ]; then - rm -r /var/lib/{{package_install_name}} - fi if [ -d /var/log/{{package_install_name}} ]; then rm -r /var/log/{{package_install_name}} fi From 8fa5ee55352f44508bed73e48be2d8924bf93033 Mon Sep 17 00:00:00 2001 From: Greg Cymbalski Date: Thu, 4 Dec 2014 13:50:58 -0800 Subject: [PATCH 4/9] Replace Riak if we are building an EE package --- priv/templates/deb/control | 2 +- priv/templates/deb/vars.config | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/priv/templates/deb/control b/priv/templates/deb/control index 3ad51ee..e762df1 100644 --- a/priv/templates/deb/control +++ b/priv/templates/deb/control @@ -11,4 +11,4 @@ Architecture: any Depends: ${misc:Depends}, ${shlibs:Depends}, adduser, logrotate, sudo, {{deb_depends}} Description: {{package_shortdesc}} {{package_desc}} - +{{replace_riak_line}} diff --git a/priv/templates/deb/vars.config b/priv/templates/deb/vars.config index 22276fb..a6a462e 100644 --- a/priv/templates/deb/vars.config +++ b/priv/templates/deb/vars.config @@ -17,3 +17,11 @@ {runner_lib_dir, "{{platform_lib_dir}}"}. {runner_patch_dir, "{{platform_lib_dir}}/{{package_patch_dir}}"}. {pipe_dir, "/tmp/{{package_install_name}}/"}. +{replace_riak_line, + case "{{package_install_name}}" of + "riak-ee" -> + "Replaces: riak"; + _Else -> + "" + end. +}. From 83ff9587d151a141ee0710ca26adffb504bbd416 Mon Sep 17 00:00:00 2001 From: Greg Cymbalski Date: Mon, 15 Dec 2014 17:31:52 -0800 Subject: [PATCH 5/9] And now with a better understanding of how these templates work --- priv/templates/deb/control | 2 +- priv/templates/deb/vars.config | 9 +-------- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/priv/templates/deb/control b/priv/templates/deb/control index e762df1..e0fcbf7 100644 --- a/priv/templates/deb/control +++ b/priv/templates/deb/control @@ -5,10 +5,10 @@ Maintainer: {{vendor_contact_name}} <{{vendor_contact_email}}> Build-Depends: debhelper (>= 7) Standards-Version: 3.9.3 Homepage: {{vendor_url}} +{{package_replacement_line}} Package: {{package_name}} Architecture: any Depends: ${misc:Depends}, ${shlibs:Depends}, adduser, logrotate, sudo, {{deb_depends}} Description: {{package_shortdesc}} {{package_desc}} -{{replace_riak_line}} diff --git a/priv/templates/deb/vars.config b/priv/templates/deb/vars.config index a6a462e..76f8ee8 100644 --- a/priv/templates/deb/vars.config +++ b/priv/templates/deb/vars.config @@ -17,11 +17,4 @@ {runner_lib_dir, "{{platform_lib_dir}}"}. {runner_patch_dir, "{{platform_lib_dir}}/{{package_patch_dir}}"}. {pipe_dir, "/tmp/{{package_install_name}}/"}. -{replace_riak_line, - case "{{package_install_name}}" of - "riak-ee" -> - "Replaces: riak"; - _Else -> - "" - end. -}. +{package_replacement_line, "{{package_replacement_line_debian}}"}. From e7f8ad60af7e6ba8b62c8ad9f398c7818308822f Mon Sep 17 00:00:00 2001 From: Luke Bakken Date: Thu, 18 Dec 2014 08:35:18 -0800 Subject: [PATCH 6/9] Fixes for debian control template Puts the `Replace:` and `Conflicts:` lines in the correct place --- priv/templates/deb/control | 4 +++- priv/templates/deb/deb.template | 2 ++ priv/templates/deb/vars.config | 3 ++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/priv/templates/deb/control b/priv/templates/deb/control index e0fcbf7..3709055 100644 --- a/priv/templates/deb/control +++ b/priv/templates/deb/control @@ -5,10 +5,12 @@ Maintainer: {{vendor_contact_name}} <{{vendor_contact_email}}> Build-Depends: debhelper (>= 7) Standards-Version: 3.9.3 Homepage: {{vendor_url}} -{{package_replacement_line}} Package: {{package_name}} Architecture: any Depends: ${misc:Depends}, ${shlibs:Depends}, adduser, logrotate, sudo, {{deb_depends}} +Homepage: {{vendor_url}} Description: {{package_shortdesc}} {{package_desc}} +{{package_replacement_line}} +{{package_conflicts_line}} diff --git a/priv/templates/deb/deb.template b/priv/templates/deb/deb.template index 79ae81c..c1ceb4b 100644 --- a/priv/templates/deb/deb.template +++ b/priv/templates/deb/deb.template @@ -6,6 +6,8 @@ {package_install_user, "package_install_user"}, {package_install_user_desc, "package_install_user_desc"}, {package_install_group, "package_install_group"}, + {package_replacement_line, "{{package_replacement_line_debian}}"}, + {package_conflicts_line, "{{package_conflicts_line_debian}}"}, {vendor_name, "vendor_name"}, {vendor_url, "vendor_url"}, {vendor_contact_name, "vendor_contact_name"}, diff --git a/priv/templates/deb/vars.config b/priv/templates/deb/vars.config index 76f8ee8..6e3f56e 100644 --- a/priv/templates/deb/vars.config +++ b/priv/templates/deb/vars.config @@ -17,4 +17,5 @@ {runner_lib_dir, "{{platform_lib_dir}}"}. {runner_patch_dir, "{{platform_lib_dir}}/{{package_patch_dir}}"}. {pipe_dir, "/tmp/{{package_install_name}}/"}. -{package_replacement_line, "{{package_replacement_line_debian}}"}. +{package_replacement_line, "{{package_replacement_line_debian}}"}. +{package_conflicts_line, "{{package_replacement_line_debian}}"}. From 4823f886d455d5d35ec252b08e67f607e84ac2c3 Mon Sep 17 00:00:00 2001 From: Greg Cymbalski Date: Tue, 23 Dec 2014 12:35:55 -0800 Subject: [PATCH 7/9] Update to actually support fbsdng --- priv/templates/fbsdng/+MANIFEST | 32 +++++++++++++++----------------- priv/templates/fbsdng/Makefile | 20 +++++++++++++------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/priv/templates/fbsdng/+MANIFEST b/priv/templates/fbsdng/+MANIFEST index c7d3f1f..6a66cfd 100644 --- a/priv/templates/fbsdng/+MANIFEST +++ b/priv/templates/fbsdng/+MANIFEST @@ -1,18 +1,16 @@ -name: {{package_name}} -origin: {{freebsd_package_category}} -comment: {{package_shortdesc}} -licenses: [{{license_type}}] -licenselogic: single -arch: freebsd:10:x86:64 -www: {{vendor_url}} -maintainer: {{vendor_contact_email}} -users: [{{package_install_user}}] -groups: [{{package_install_group}}] -prefix: /usr/local -categories: [{{freebsd_package_category}}] +name: "{{package_name}}" +origin: "{{freebsd_package_category}}" +comment: "{{package_shortdesc}}" +licenses: ["{{license_type}}"] +licenselogic: "single" +arch: "freebsd:10:x86:64" +www: "{{vendor_url}}" +maintainer: "{{vendor_contact_email}}" +users: ["{{package_install_user}}"] +groups: ["{{package_install_group}}"] +prefix: "/usr/local" +categories: ["{{freebsd_package_category}}"] desc: "{{package_desc}}" -scripts: - pre-install: |- - if ! pw groupshow {{package_install_group}} 2>/dev/null; then pw groupadd {{package_install_group}}; fi - if ! pw usershow {{package_install_user}} 2>/dev/null; then pw useradd {{package_install_user}} -g {{package_install_group}} -h - -d {{platform_data_dir}} -s /bin/sh -c \"{{package_install_user_desc}}\"; fi - if [ ! -d /var/log/{{package_install_name}} ]; then mkdir /var/log/{{package_install_name}} && chown {{package_install_user}}:{{package_install_group}} /var/log/{{package_install_name}}; fi +scripts: { + pre-install: "if ! pw groupshow {{package_install_group}} 2>/dev/null; then pw groupadd {{package_install_group}}; fi \n if ! pw usershow {{package_install_user}} 2>/dev/null; then pw useradd {{package_install_user}} -g {{package_install_group}} -h - -d {{platform_data_dir}} -s /bin/sh -c \"{{package_install_user_desc}}\"; fi \n if [ ! -d /var/log/{{package_install_name}} ]; then mkdir /var/log/{{package_install_name}} && chown {{package_install_user}}:{{package_install_group}} /var/log/{{package_install_name}}; fi" + } diff --git a/priv/templates/fbsdng/Makefile b/priv/templates/fbsdng/Makefile index 7c2ff12..15d021c 100644 --- a/priv/templates/fbsdng/Makefile +++ b/priv/templates/fbsdng/Makefile @@ -42,8 +42,8 @@ packing_list_files: $(BUILD_STAGE_DIR) chmod -w ${BUILD_STAGE_DIR}/usr/local/etc/rc.d/{{package_install_name}} chmod +x ${BUILD_STAGE_DIR}/usr/local/etc/rc.d/{{package_install_name}} @cd $(BUILD_STAGE_DIR) && \ - echo "version: ${PKG_VERSION}" >> +MANIFEST && \ - echo "files:" >> +MANIFEST + echo "version: \"${PKG_VERSION}\"" >> +MANIFEST && \ + echo "files: {" >> +MANIFEST @echo "Copying Man pages to staging directory" @cd $(BUILDDIR) && \ @@ -51,18 +51,24 @@ packing_list_files: $(BUILD_STAGE_DIR) mkdir -p $(PMAN_DIR) && \ cp -R doc/man/man1 $(PMAN_DIR); fi + @echo "Packaging /usr/local files" @cd $(BUILD_STAGE_DIR) && \ find usr -type f | while read file ; do \ mode=$$(stat -f%p "$$file" | cut -c 3-) && \ sum=$$(sha256 -q $$file) && \ - echo " /$$file: { sum: $$sum, perm: $$mode, uname: root, gname: wheel }" >> +MANIFEST; done + echo " /$$file: { sum: \"$$sum\", perm: \"$$mode\", uname: \"root\", gname: \"wheel\" }," >> +MANIFEST; done && \ + sed -i .bak '$$s/,$$//' +MANIFEST && \ + rm -- +MANIFEST.bak && \ + echo " }" >> +MANIFEST + @cd $(BUILD_STAGE_DIR) && \ - echo "directories:" >> +MANIFEST && \ - echo " {{platform_base_dir}}: {}" >> +MANIFEST && \ - echo " {{platform_data_dir}}: {uname: {{package_install_user}}, gname: {{package_install_group}}, perm: 0700 }" >> +MANIFEST && \ - echo " {{platform_etc_dir}}: {}" >> +MANIFEST + echo "directories: {" >> +MANIFEST && \ + echo " {{platform_base_dir}}: \"y\"," >> +MANIFEST && \ + echo " {{platform_data_dir}}: {uname: \"{{package_install_user}}\", gname: \"{{package_install_group}}\", perm: \"0700\" }," >> +MANIFEST && \ + echo " {{platform_etc_dir}}: \"y\"" >> +MANIFEST && \ + echo " }" >> +MANIFEST # Copy the app rel directory to the staging directory to build our # package structure and move the directories into the right place From b3b8ee38ee295f7315bef9c1fe97e9fa2b09ff70 Mon Sep 17 00:00:00 2001 From: Greg Cymbalski Date: Wed, 11 Feb 2015 12:15:28 -0800 Subject: [PATCH 8/9] Make sure we actually own lib dirs for CS on SmartOS --- priv/templates/smartos/+INSTALL | 1 + 1 file changed, 1 insertion(+) diff --git a/priv/templates/smartos/+INSTALL b/priv/templates/smartos/+INSTALL index 6f47d2b..a785cd7 100755 --- a/priv/templates/smartos/+INSTALL +++ b/priv/templates/smartos/+INSTALL @@ -48,6 +48,7 @@ if [ "$2" = "POST-INSTALL" ]; then # Ensure proper ownership of lib directory chown -R {{package_install_user}}:{{package_install_group}} {{platform_lib_dir}} + chmod -R g+r {{platform_lib_dir}} # Treat new configuration files as new if old ones already exist # if FILE and FILE.bak both exist, move FILE to FILE.new and FILE.bak to FILE From b69dc562527df47dd7f9f80a11fd3b0ad6ffd479 Mon Sep 17 00:00:00 2001 From: Greg Cymbalski Date: Tue, 24 Feb 2015 16:36:54 -0800 Subject: [PATCH 9/9] Make sure that locked deps are obeyed for packaging As per comments at https://github.com/basho/riak/pull/693#issuecomment-75879350 --- priv/templates/fbsd/Makefile | 2 +- priv/templates/fbsdng/Makefile | 2 +- priv/templates/smartos/Makefile | 2 +- priv/templates/solaris/Makefile | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/priv/templates/fbsd/Makefile b/priv/templates/fbsd/Makefile index 2d79af9..26e7108 100644 --- a/priv/templates/fbsd/Makefile +++ b/priv/templates/fbsd/Makefile @@ -153,7 +153,7 @@ $(BUILD_STAGE_DIR): buildrel # * Ensure all binaries are executable # * copy the vars.config over for build config buildrel: - OVERLAY_VARS="overlay_vars=../fbsd/vars.config" $(MAKE) deps rel + OVERLAY_VARS="overlay_vars=../fbsd/vars.config" $(MAKE) rel chmod 0755 rel/{{package_install_name}}/bin/* rel/{{package_install_name}}/erts-*/bin/* $(BUILDDIR): diff --git a/priv/templates/fbsdng/Makefile b/priv/templates/fbsdng/Makefile index 15d021c..f23c77f 100644 --- a/priv/templates/fbsdng/Makefile +++ b/priv/templates/fbsdng/Makefile @@ -94,7 +94,7 @@ $(BUILD_STAGE_DIR): buildrel # * Ensure all binaries are executable # * copy the vars.config over for build config buildrel: - OVERLAY_VARS="overlay_vars=../fbsdng/vars.config" $(MAKE) deps rel + OVERLAY_VARS="overlay_vars=../fbsdng/vars.config" $(MAKE) rel chmod 0755 rel/{{package_install_name}}/bin/* rel/{{package_install_name}}/erts-*/bin/* $(BUILDDIR): diff --git a/priv/templates/smartos/Makefile b/priv/templates/smartos/Makefile index d1a219f..e68d9e5 100644 --- a/priv/templates/smartos/Makefile +++ b/priv/templates/smartos/Makefile @@ -243,7 +243,7 @@ patch_runner: buildrel # * Ensure all binaries are executable # * copy the vars.config over for build config buildrel: $(BUILDDIR) smartos_check - OVERLAY_VARS="overlay_vars=../smartos/vars.config" $(MAKE) deps rel + OVERLAY_VARS="overlay_vars=../smartos/vars.config" $(MAKE) rel chmod 0755 $(BUILDDIR)/rel/{{package_install_name}}/bin/* $(BUILDDIR)/rel/{{package_install_name}}/erts-*/bin/* $(BUILDDIR): diff --git a/priv/templates/solaris/Makefile b/priv/templates/solaris/Makefile index 8fd5139..79d4cff 100644 --- a/priv/templates/solaris/Makefile +++ b/priv/templates/solaris/Makefile @@ -26,7 +26,7 @@ buildrel: @# Make sure we set our EUID properly @# Ye Olde Bourne Shell on Solaris means we have to do it old school echo "Using `which erl` to build"; \ - OVERLAY_VARS="overlay_vars=../solaris/vars.config" $(MAKE) deps rel + OVERLAY_VARS="overlay_vars=../solaris/vars.config" $(MAKE) rel chmod 0755 rel/{{package_install_name}}/bin/* \ rel/{{package_install_name}}/erts-*/bin/* if [ "{{bin_or_sbin}}" != "bin" ]; then \