blob: 64f424dfac966c48ab7e9646f550632036dfc694 (
plain)
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
_chef_client_ruby="core/ruby27"
pkg_name="chef-infra-client"
pkg_origin="chef"
pkg_maintainer="The Chef Maintainers <humans@chef.io>"
pkg_description="The Chef Infra Client"
pkg_license=('Apache-2.0')
pkg_bin_dirs=(
bin
vendor/bin
)
pkg_build_deps=(
core/make
core/gcc
core/git
)
pkg_deps=(
core/glibc
$_chef_client_ruby
core/libxml2
core/libxslt
core/libiconv
core/xz
core/zlib
core/openssl
core/cacerts
core/libffi
core/coreutils
core/libarchive
)
pkg_svc_user=root
pkg_version() {
cat "${SRC_PATH}/VERSION"
}
do_before() {
do_default_before
update_pkg_version
# We must wait until we update the pkg_version to use the pkg_version
pkg_filename="${pkg_name}-${pkg_version}.tar.gz"
}
do_download() {
build_line "Locally creating archive of latest repository commit at ${HAB_CACHE_SRC_PATH}/${pkg_filename}"
# source is in this repo, so we're going to create an archive from the
# appropriate path within the repo and place the generated tarball in the
# location expected by do_unpack
( cd "${SRC_PATH}" || exit_with "unable to enter hab-src directory" 1
git archive --prefix="${pkg_name}-${pkg_version}/" --output="${HAB_CACHE_SRC_PATH}/${pkg_filename}" HEAD
)
}
do_verify() {
build_line "Skipping checksum verification on the archive we just created."
return 0
}
do_setup_environment() {
push_runtime_env GEM_PATH "${pkg_prefix}/vendor"
set_runtime_env APPBUNDLER_ALLOW_RVM "true" # prevent appbundler from clearing out the carefully constructed runtime GEM_PATH
set_runtime_env SSL_CERT_FILE "$(pkg_path_for cacerts)/ssl/cert.pem"
set_runtime_env LANG "en_US.UTF-8"
set_runtime_env LC_CTYPE "en_US.UTF-8"
}
do_prepare() {
export GEM_HOME="${pkg_prefix}/vendor"
export OPENSSL_LIB_DIR="$(pkg_path_for openssl)/lib"
export OPENSSL_INCLUDE_DIR="$(pkg_path_for openssl)/include"
export SSL_CERT_FILE="$(pkg_path_for cacerts)/ssl/cert.pem"
export CPPFLAGS="${CPPFLAGS} ${CFLAGS}"
( cd "$CACHE_PATH"
bundle config --local build.nokogiri "--use-system-libraries \
--with-zlib-dir=$(pkg_path_for zlib) \
--with-xslt-dir=$(pkg_path_for libxslt) \
--with-xml2-include=$(pkg_path_for libxml2)/include/libxml2 \
--with-xml2-lib=$(pkg_path_for libxml2)/lib"
bundle config --local jobs "$(nproc)"
bundle config --local without server docgen maintenance pry travis integration ci chefstyle
bundle config --local shebang "$(pkg_path_for "$_chef_client_ruby")/bin/ruby"
bundle config --local retry 5
bundle config --local silence_root_warning 1
)
build_line "Setting link for /usr/bin/env to 'coreutils'"
if [ ! -f /usr/bin/env ]; then
ln -s "$(pkg_interpreter_for core/coreutils bin/env)" /usr/bin/env
fi
}
do_build() {
( cd "$CACHE_PATH" || exit_with "unable to enter hab-cache directory" 1
build_line "Installing gem dependencies ..."
bundle install --jobs=3 --retry=3
build_line "Installing this project's gems ..."
bundle exec rake install
for gem in $GEM_HOME/bundler/gems/*; do
( cd $gem
build_line "Installing gems from git repos properly ..."
rake install
)
done
)
}
do_install() {
( cd "$pkg_prefix" || exit_with "unable to enter pkg prefix directory" 1
export BUNDLE_GEMFILE="${CACHE_PATH}/Gemfile"
build_line "** fixing binstub shebangs"
fix_interpreter "${pkg_prefix}/vendor/bin/*" "$_chef_client_ruby" bin/ruby
export BUNDLE_GEMFILE="${CACHE_PATH}/Gemfile"
for gem in chef-bin chef inspec-core-bin ohai; do
build_line "** generating binstubs for $gem with precise version pins"
appbundler $CACHE_PATH $pkg_prefix/bin $gem
done
)
}
do_after() {
build_line "Trimming the fat ..."
# We don't need the cache of downloaded .gem files ...
rm -r "$pkg_prefix/vendor/cache"
# ... or bundler's cache of git-ref'd gems
rm -r "$pkg_prefix/vendor/bundler"
# We don't need the gem docs.
rm -r "$pkg_prefix/vendor/doc"
# We don't need to ship the test suites for every gem dependency,
# only Chef's for package verification.
find "$pkg_prefix/vendor/gems" -name spec -type d | grep -v "chef-${pkg_version}" \
| while read spec_dir; do rm -r "$spec_dir"; done
}
do_end() {
if [ "$(readlink /usr/bin/env)" = "$(pkg_interpreter_for core/coreutils bin/env)" ]; then
build_line "Removing the symlink we created for '/usr/bin/env'"
rm /usr/bin/env
fi
}
do_strip() {
return 0
}
|