cockroach.spec 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. ##
  2. ## cockroach.spec -- OpenPKG RPM Package Specification
  3. ## Copyright (c) 2000-2016 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 20161226
  25. %define V_cockroach_snap 20161226
  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: Network
  35. License: Apache
  36. Version: %{V_cockroach_base}
  37. Release: 20161226
  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. # build information
  47. BuildPreReq: OpenPKG, openpkg >= 20160101, go
  48. PreReq: OpenPKG, openpkg >= 20160101
  49. %description
  50. CockroachDB is a distributed SQL database built on top of a
  51. transactional and consistent key/value store. The primary design
  52. goals are support for ACID transactions, horizontal scalability,
  53. and survivability, hence the name. CockroachDB implements a
  54. RAFT consensus algorithm for consistency. It aims to tolerate
  55. disk, machine, rack, and even datacenter failures with minimal
  56. latency disruption and no manual intervention. CockroachDB nodes
  57. (RoachNodes) are symmetric; a design goal is homogenous deployment
  58. (one binary) with minimal configuration. CockroachDB speaks the
  59. PostgreSQL wire protocol and hence can be used with any PostgreSQL
  60. client.
  61. %track
  62. prog cockroach:release = {
  63. version = %{V_cockroach_base}
  64. url = https://github.com/cockroachdb/cockroach/releases
  65. regex = v(__VER__)\.tar\.gz
  66. }
  67. prog cockroach:snapshot = {
  68. version = %{V_cockroach_snap}
  69. url = http://download.openpkg.org/components/versioned/cockroach/
  70. regex = cockroach-(__VER__)\.tar\.xz
  71. }
  72. %prep
  73. %setup -q -n cockroach
  74. %patch -p0
  75. %build
  76. # bootstrap jemalloc
  77. ( cd src/github.com/cockroachdb/cockroach/vendor/github.com/cockroachdb/c-jemalloc/internal
  78. sh autogen.sh
  79. ) || exit $?
  80. # build program
  81. export GOPATH=`pwd`
  82. export CGO_CFLAGS="%{l_cflags} -Wno-deprecated-declarations"
  83. export CGO_CXXFLAGS="%{l_cxxflags} -Wno-deprecated-declarations"
  84. export CGO_LDFLAGS="%{l_ldflags} -lstdc++ -lm"
  85. cd src/github.com/cockroachdb/cockroach
  86. ldflags="-extldflags '-Wl,-zmuldefs'"
  87. ldflags="$ldflags -X \"github.com/cockroachdb/cockroach/build.tag=%{V_cockroach_base}\""
  88. ldflags="$ldflags -X \"github.com/cockroachdb/cockroach/build.time=`date -u '+%%Y-%%m-%%dT%%H:%%M:%%S'`\""
  89. go build -x -ldflags "$ldflags" -o cockroach
  90. # build manual pages
  91. ./cockroach gen man
  92. # build bash autocomplete script
  93. ./cockroach gen autocomplete
  94. %install
  95. # create directory hierarchy
  96. %{l_shtool} mkdir -f -p -m 755 \
  97. $RPM_BUILD_ROOT%{l_prefix}/bin \
  98. $RPM_BUILD_ROOT%{l_prefix}/man/man1 \
  99. $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d \
  100. $RPM_BUILD_ROOT%{l_prefix}/etc/cockroach \
  101. $RPM_BUILD_ROOT%{l_prefix}/var/cockroach/log \
  102. $RPM_BUILD_ROOT%{l_prefix}/var/cockroach/run \
  103. $RPM_BUILD_ROOT%{l_prefix}/var/cockroach/db
  104. # install program
  105. %{l_shtool} install -c -s -m 755 \
  106. src/github.com/cockroachdb/cockroach/cockroach \
  107. $RPM_BUILD_ROOT%{l_prefix}/bin/cockroach
  108. # install wrapper scripts
  109. %{l_shtool} install -c -m 755 %{l_value -s -a} \
  110. %{SOURCE cockroach-sql.sh} \
  111. $RPM_BUILD_ROOT%{l_prefix}/bin/cockroach-sql
  112. %{l_shtool} install -c -m 755 %{l_value -s -a} \
  113. %{SOURCE cockroach-psql.sh} \
  114. $RPM_BUILD_ROOT%{l_prefix}/bin/cockroach-psql
  115. %{l_shtool} install -c -m 755 %{l_value -s -a} \
  116. %{SOURCE cockroach-cert.sh} \
  117. $RPM_BUILD_ROOT%{l_prefix}/bin/cockroach-cert
  118. %{l_shtool} install -c -m 755 %{l_value -s -a} \
  119. %{SOURCE cockroach-user.sh} \
  120. $RPM_BUILD_ROOT%{l_prefix}/bin/cockroach-user
  121. # install manual pages
  122. %{l_shtool} install -c -m 644 \
  123. src/github.com/cockroachdb/cockroach/man/man1/*.1 \
  124. $RPM_BUILD_ROOT%{l_prefix}/man/man1/
  125. # install bash autocomplete script
  126. %{l_shtool} install -c -m 644 \
  127. src/github.com/cockroachdb/cockroach/cockroach.bash \
  128. $RPM_BUILD_ROOT%{l_prefix}/etc/cockroach/
  129. # install run-command script
  130. %{l_shtool} install -c -m 755 %{l_value -s -a} \
  131. %{SOURCE rc.cockroach} $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d/
  132. # determine installation files
  133. %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT \
  134. %{l_files_std} \
  135. '%config %{l_prefix}/etc/cockroach/*' \
  136. '%attr(-,%{l_rusr},%{l_rgrp}) %{l_prefix}/etc/cockroach' \
  137. '%attr(-,%{l_rusr},%{l_rgrp}) %{l_prefix}/var/cockroach/*'
  138. %files -f files
  139. %clean
  140. %post
  141. if [ $1 -eq 1 ]; then
  142. # on initial installation, create database and certs/keys
  143. echo "Generating Certificates/Keys" | %{l_rpmtool} msg -b -t notice
  144. $RPM_INSTALL_PREFIX/bin/cockroach-cert ca
  145. $RPM_INSTALL_PREFIX/bin/cockroach-cert server localhost 127.0.0.1
  146. $RPM_INSTALL_PREFIX/bin/cockroach-cert client root
  147. # display some initial hints, too
  148. ( echo "An initial CockroachDB was configured with the standard"
  149. echo "certificate/key pairs. You can start CockroachDB and connect"
  150. echo "to it on \"localhost\" with database user \"root\":"
  151. echo " \$ $RPM_INSTALL_PREFIX/bin/openpkg rc cockroach start"
  152. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-sql root 127.0.0.1 system"
  153. echo ""
  154. echo "For production use, you can reconfigure it to listen on external"
  155. echo "IP address. But for this the server certificate has to be regenerated:"
  156. echo " \$ vi $RPM_INSTALL_PREFIX/etc/rc.conf"
  157. echo " | cockroach_flags=\"--host=<ipaddress> --port=26257 --http-port=8080\""
  158. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-cert server <ipaddress>"
  159. echo " \$ $RPM_INSTALL_PREFIX/bin/openpkg rc cockroach stop start"
  160. echo "Then you have to connect through the external IP address from now on:"
  161. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-sql root <ipaddress> system"
  162. echo ""
  163. echo "For production use, you usually also want to establish a non-privileged"
  164. echo "user with a dedicated database:"
  165. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-cert client <username>"
  166. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-user root set <username>"
  167. echo " | Enter password: <password>"
  168. echo " | Confirm password: <password>"
  169. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-sql root <ipaddress> system"
  170. echo " | CREATE DATABASE <database>;"
  171. echo " | GRANT ALL ON DATABASE <database> TO <username>;"
  172. echo " | \\q"
  173. echo "After this, the user <username> will be able to connect with:"
  174. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-sql <username> <ipaddress> <database>"
  175. echo "Alternatively, you can also use the covenient PostgreSQL psql(1) CLI:"
  176. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-psql <username> <ipaddress> <database>"
  177. echo ""
  178. echo "The CockroachDB admin interface you can reach under URL:"
  179. echo " https://<ipaddress>:8080/"
  180. echo "CockroachDB uses the PostgreSQL protocol. The connection string is:"
  181. echo " postgresql://<username>@<ipaddress>:26257/<database>?sslmode=require&%{l_nil}"
  182. echo " sslcert=$RPM_INSTALL_PREFIX/etc/cockroach/cockroach-client-root.crt&%{l_nil}"
  183. echo " sslkey=$RPM_INSTALL_PREFIX/etc/cockroach/cockroach-client-root.key"
  184. ) | %{l_rpmtool} msg -b -t notice
  185. elif [ $1 -eq 2 ]; then
  186. # after upgrade, restart service
  187. eval `%{l_rc} cockroach status 2>/dev/null`
  188. [ ".$cockroach_active" = .yes ] && %{l_rc} cockroach restart
  189. fi
  190. exit 0
  191. %preun
  192. # before erase, stop service and remove log files
  193. if [ $1 -eq 0 ]; then
  194. %{l_rc} cockroach stop 2>/dev/null
  195. rm -f $RPM_INSTALL_PREFIX/etc/cockroach/*.crt >/dev/null 2>&1 || true
  196. rm -f $RPM_INSTALL_PREFIX/etc/cockroach/*.key >/dev/null 2>&1 || true
  197. rm -f $RPM_INSTALL_PREFIX/var/cockroach/log/* >/dev/null 2>&1 || true
  198. rm -f $RPM_INSTALL_PREFIX/var/cockroach/run/* >/dev/null 2>&1 || true
  199. rm -rf $RPM_INSTALL_PREFIX/var/cockroach/db/* >/dev/null 2>&1 || true
  200. fi
  201. exit 0