cockroach.spec 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. ##
  2. ## cockroach.spec -- OpenPKG RPM Package Specification
  3. ## Copyright (c) 2000-2017 OpenPKG Foundation e.V. <http://openpkg.net/>
  4. ##
  5. ## Permission to use, copy, modify, and distribute this software for
  6. ## any purpose with or without fee is hereby granted, provided that
  7. ## the above copyright notice and this permission notice appear in all
  8. ## copies.
  9. ##
  10. ## THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  11. ## WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  12. ## MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  13. ## IN NO EVENT SHALL THE AUTHORS AND COPYRIGHT HOLDERS AND THEIR
  14. ## CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  15. ## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  16. ## LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  17. ## USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  18. ## ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  19. ## OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  20. ## OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  21. ## SUCH DAMAGE.
  22. ##
  23. # package version
  24. %define V_cockroach_base 20170301
  25. %define V_cockroach_snap 20170301
  26. # package information
  27. Name: cockroach
  28. Summary: Scalable, Geo-Replicated, Transactional SQL Database
  29. URL: http://www.cockroachlabs.com/
  30. Vendor: Spencer Kimball & Peter Mattis
  31. Packager: OpenPKG Foundation e.V.
  32. Distribution: OpenPKG Community
  33. Class: EVAL
  34. Group: Database
  35. License: Apache
  36. Version: %{V_cockroach_base}
  37. Release: 20170301
  38. # list of sources
  39. Source0: http://download.openpkg.org/components/versioned/cockroach/cockroach-%{V_cockroach_snap}.tar.xz
  40. Source1: rc.cockroach
  41. Source2: cockroach-sql.sh
  42. Source3: cockroach-psql.sh
  43. Source4: cockroach-cert.sh
  44. Source5: cockroach-user.sh
  45. Patch0: cockroach.patch
  46. Patch1: cockroach.patch.freebsd
  47. # build information
  48. BuildPreReq: OpenPKG, openpkg >= 20160101, go
  49. PreReq: OpenPKG, openpkg >= 20160101
  50. %description
  51. CockroachDB is a distributed SQL database built on top of a
  52. transactional and consistent key/value store. The primary design
  53. goals are support for ACID transactions, horizontal scalability,
  54. and survivability, hence the name. CockroachDB implements a
  55. RAFT consensus algorithm for consistency. It aims to tolerate
  56. disk, machine, rack, and even datacenter failures with minimal
  57. latency disruption and no manual intervention. CockroachDB nodes
  58. (RoachNodes) are symmetric; a design goal is homogenous deployment
  59. (one binary) with minimal configuration. CockroachDB speaks the
  60. PostgreSQL wire protocol and hence can be used with any PostgreSQL
  61. client.
  62. %track
  63. prog cockroach:release = {
  64. version = %{V_cockroach_base}
  65. url = https://github.com/cockroachdb/cockroach/releases
  66. regex = v(__VER__)\.tar\.gz
  67. }
  68. prog cockroach:snapshot = {
  69. version = %{V_cockroach_snap}
  70. url = http://download.openpkg.org/components/versioned/cockroach/
  71. regex = cockroach-(__VER__)\.tar\.xz
  72. }
  73. %prep
  74. %setup -q -n cockroach
  75. %patch -p0
  76. case "%{l_platform -t}" in
  77. *-freebsd* )
  78. %patch -p0 -P 1
  79. ;;
  80. esac
  81. %build
  82. # bootstrap jemalloc
  83. ( cd src/github.com/cockroachdb/cockroach/vendor/github.com/cockroachdb/c-jemalloc/internal
  84. sh autogen.sh
  85. ) || exit $?
  86. # build program
  87. export GOPATH=`pwd`
  88. export CGO_CFLAGS="%{l_cflags} -Wno-deprecated-declarations"
  89. export CGO_CXXFLAGS="%{l_cxxflags} -Wno-deprecated-declarations"
  90. export CGO_LDFLAGS="%{l_ldflags} -lstdc++ -lm"
  91. cd src/github.com/cockroachdb/cockroach
  92. ldflags="-extldflags '-Wl,-zmuldefs'"
  93. ldflags="$ldflags -X \"github.com/cockroachdb/cockroach/build.tag=%{V_cockroach_base}\""
  94. ldflags="$ldflags -X \"github.com/cockroachdb/cockroach/build.time=`date -u '+%%Y-%%m-%%dT%%H:%%M:%%S'`\""
  95. go build -x -ldflags "$ldflags" -o cockroach
  96. # build manual pages
  97. ./cockroach gen man
  98. # build bash autocomplete script
  99. ./cockroach gen autocomplete
  100. %install
  101. # create directory hierarchy
  102. %{l_shtool} mkdir -f -p -m 755 \
  103. $RPM_BUILD_ROOT%{l_prefix}/bin \
  104. $RPM_BUILD_ROOT%{l_prefix}/man/man1 \
  105. $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d \
  106. $RPM_BUILD_ROOT%{l_prefix}/etc/cockroach \
  107. $RPM_BUILD_ROOT%{l_prefix}/var/cockroach/log \
  108. $RPM_BUILD_ROOT%{l_prefix}/var/cockroach/run \
  109. $RPM_BUILD_ROOT%{l_prefix}/var/cockroach/db
  110. # install program
  111. %{l_shtool} install -c -s -m 755 \
  112. src/github.com/cockroachdb/cockroach/cockroach \
  113. $RPM_BUILD_ROOT%{l_prefix}/bin/cockroach
  114. # install wrapper scripts
  115. %{l_shtool} install -c -m 755 %{l_value -s -a} \
  116. %{SOURCE cockroach-sql.sh} \
  117. $RPM_BUILD_ROOT%{l_prefix}/bin/cockroach-sql
  118. %{l_shtool} install -c -m 755 %{l_value -s -a} \
  119. %{SOURCE cockroach-psql.sh} \
  120. $RPM_BUILD_ROOT%{l_prefix}/bin/cockroach-psql
  121. %{l_shtool} install -c -m 755 %{l_value -s -a} \
  122. %{SOURCE cockroach-cert.sh} \
  123. $RPM_BUILD_ROOT%{l_prefix}/bin/cockroach-cert
  124. %{l_shtool} install -c -m 755 %{l_value -s -a} \
  125. %{SOURCE cockroach-user.sh} \
  126. $RPM_BUILD_ROOT%{l_prefix}/bin/cockroach-user
  127. # install manual pages
  128. %{l_shtool} install -c -m 644 \
  129. src/github.com/cockroachdb/cockroach/man/man1/*.1 \
  130. $RPM_BUILD_ROOT%{l_prefix}/man/man1/
  131. # install bash autocomplete script
  132. %{l_shtool} install -c -m 644 \
  133. src/github.com/cockroachdb/cockroach/cockroach.bash \
  134. $RPM_BUILD_ROOT%{l_prefix}/etc/cockroach/
  135. # install run-command script
  136. %{l_shtool} install -c -m 755 %{l_value -s -a} \
  137. %{SOURCE rc.cockroach} $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/
  138. # determine installation files
  139. %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \
  140. %{l_files_std} \
  141. '%config %{l_prefix}/etc/cockroach/*' \
  142. '%attr(-,%{l_rusr},%{l_rgrp}) %{l_prefix}/etc/cockroach' \
  143. '%attr(-,%{l_rusr},%{l_rgrp}) %{l_prefix}/var/cockroach/*'
  144. %files -f files
  145. %clean
  146. %post
  147. if [ $1 -eq 1 ]; then
  148. # on initial installation, create database and certs/keys
  149. echo "Generating Certificates/Keys" | %{l_rpmtool} msg -b -t notice
  150. $RPM_INSTALL_PREFIX/bin/cockroach-cert ca
  151. $RPM_INSTALL_PREFIX/bin/cockroach-cert server localhost 127.0.0.1
  152. $RPM_INSTALL_PREFIX/bin/cockroach-cert client root
  153. # display some initial hints, too
  154. ( echo "An initial CockroachDB was configured with the standard"
  155. echo "certificate/key pairs. You can start CockroachDB and connect"
  156. echo "to it on \"localhost\" with database user \"root\":"
  157. echo " \$ $RPM_INSTALL_PREFIX/bin/openpkg rc cockroach start"
  158. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-sql root 127.0.0.1 system"
  159. echo ""
  160. echo "For production use, you can reconfigure it to listen on external"
  161. echo "IP address. But for this the server certificate has to be regenerated:"
  162. echo " \$ vi $RPM_INSTALL_PREFIX/etc/rc.conf"
  163. echo " | cockroach_flags=\"--host=<ipaddress> --port=26257 --http-port=8080\""
  164. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-cert server <ipaddress>"
  165. echo " \$ $RPM_INSTALL_PREFIX/bin/openpkg rc cockroach stop start"
  166. echo "Then you have to connect through the external IP address from now on:"
  167. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-sql root <ipaddress> system"
  168. echo ""
  169. echo "For production use, you usually also want to establish a non-privileged"
  170. echo "user with a dedicated database:"
  171. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-cert client <username>"
  172. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-user root set <username>"
  173. echo " | Enter password: <password>"
  174. echo " | Confirm password: <password>"
  175. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-sql root <ipaddress> system"
  176. echo " | CREATE DATABASE <database>;"
  177. echo " | GRANT ALL ON DATABASE <database> TO <username>;"
  178. echo " | \\q"
  179. echo "After this, the user <username> will be able to connect with:"
  180. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-sql <username> <ipaddress> <database>"
  181. echo "Alternatively, you can also use the covenient PostgreSQL psql(1) CLI:"
  182. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-psql <username> <ipaddress> <database>"
  183. echo ""
  184. echo "The CockroachDB admin interface you can reach under URL:"
  185. echo " https://<ipaddress>:8080/"
  186. echo "CockroachDB uses the PostgreSQL protocol. The connection string is:"
  187. echo " postgresql://<username>@<ipaddress>:26257/<database>?sslmode=require&%{l_nil}"
  188. echo " sslcert=$RPM_INSTALL_PREFIX/etc/cockroach/cockroach-client-root.crt&%{l_nil}"
  189. echo " sslkey=$RPM_INSTALL_PREFIX/etc/cockroach/cockroach-client-root.key"
  190. ) | %{l_rpmtool} msg -b -t notice
  191. elif [ $1 -eq 2 ]; then
  192. # after upgrade, restart service
  193. eval `%{l_rc} cockroach status 2>/dev/null`
  194. [ ".$cockroach_active" = .yes ] && %{l_rc} cockroach restart
  195. fi
  196. exit 0
  197. %preun
  198. # before erase, stop service and remove log files
  199. if [ $1 -eq 0 ]; then
  200. %{l_rc} cockroach stop 2>/dev/null
  201. rm -f $RPM_INSTALL_PREFIX/etc/cockroach/*.crt >/dev/null 2>&1 || true
  202. rm -f $RPM_INSTALL_PREFIX/etc/cockroach/*.key >/dev/null 2>&1 || true
  203. rm -f $RPM_INSTALL_PREFIX/var/cockroach/log/* >/dev/null 2>&1 || true
  204. rm -f $RPM_INSTALL_PREFIX/var/cockroach/run/* >/dev/null 2>&1 || true
  205. rm -rf $RPM_INSTALL_PREFIX/var/cockroach/db/* >/dev/null 2>&1 || true
  206. fi
  207. exit 0