cockroach.spec 9.9 KB

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