cockroach.spec 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  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.6
  25. %define V_cockroach_snap 20170921
  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: 20170921
  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 the
  54. transactional and consistent key/value store RocksDB. The primary
  55. design goals are support for ACID transactions, horizontal
  56. scalability, and survivability, hence the name. CockroachDB uses
  57. the RAFT consensus algorithm for consistency across its nodes.
  58. CockroachDB aims to tolerate disk, machine, rack, and even
  59. datacenter failures with minimal latency disruption and no manual
  60. intervention. CockroachDB nodes are symmetric; a design goal is
  61. homogenous deployment with minimal configuration. CockroachDB
  62. speaks the PostgreSQL wire protocol and hence can be used with
  63. any PostgreSQL client. CockroachDB supports many PostgreSQL SQL
  64. functionalities, too.
  65. %track
  66. prog cockroach:release = {
  67. version = %{V_cockroach_base}
  68. url = https://github.com/cockroachdb/cockroach/releases
  69. regex = v(\d+\.\d+\.\d+)\.tar\.gz
  70. }
  71. prog cockroach:snapshot = {
  72. version = %{V_cockroach_snap}
  73. url = http://download.openpkg.org/components/versioned/cockroach/
  74. regex = cockroach-(__VER__)\.tar\.xz
  75. }
  76. %prep
  77. %setup -q -n cockroach
  78. %patch -p0
  79. %build
  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. export GOFLAGS="-x"
  86. export CC="%{l_cc}"
  87. export CFLAGS="%{l_cflags -O}"
  88. export CPPFLAGS="%{l_cppflags}"
  89. export LDFLAGS="%{l_ldflags}"
  90. cd src/github.com/cockroachdb/cockroach
  91. %{l_make} %{l_mflags} build
  92. # build manual pages
  93. ./cockroach gen man
  94. # build bash autocomplete script
  95. ./cockroach gen autocomplete
  96. %install
  97. # create directory hierarchy
  98. %{l_shtool} mkdir -f -p -m 755 \
  99. $RPM_BUILD_ROOT%{l_prefix}/bin \
  100. $RPM_BUILD_ROOT%{l_prefix}/man/man1 \
  101. $RPM_BUILD_ROOT%{l_prefix}/etc/rc.d \
  102. $RPM_BUILD_ROOT%{l_prefix}/etc/cockroach \
  103. $RPM_BUILD_ROOT%{l_prefix}/var/cockroach/log \
  104. $RPM_BUILD_ROOT%{l_prefix}/var/cockroach/run \
  105. $RPM_BUILD_ROOT%{l_prefix}/var/cockroach/db
  106. # install program
  107. %{l_shtool} install -c -s -m 755 \
  108. src/github.com/cockroachdb/cockroach/cockroach \
  109. $RPM_BUILD_ROOT%{l_prefix}/bin/cockroach
  110. # install wrapper scripts
  111. %{l_shtool} install -c -m 755 %{l_value -s -a} \
  112. %{SOURCE cockroach-sql.sh} \
  113. $RPM_BUILD_ROOT%{l_prefix}/bin/cockroach-sql
  114. %{l_shtool} install -c -m 755 %{l_value -s -a} \
  115. %{SOURCE cockroach-psql.sh} \
  116. $RPM_BUILD_ROOT%{l_prefix}/bin/cockroach-psql
  117. %{l_shtool} install -c -m 755 %{l_value -s -a} \
  118. %{SOURCE cockroach-cert.sh} \
  119. $RPM_BUILD_ROOT%{l_prefix}/bin/cockroach-cert
  120. %{l_shtool} install -c -m 755 %{l_value -s -a} \
  121. %{SOURCE cockroach-user.sh} \
  122. $RPM_BUILD_ROOT%{l_prefix}/bin/cockroach-user
  123. # install manual pages
  124. %{l_shtool} install -c -m 644 \
  125. src/github.com/cockroachdb/cockroach/man/man1/*.1 \
  126. $RPM_BUILD_ROOT%{l_prefix}/man/man1/
  127. # install bash autocomplete script
  128. %{l_shtool} install -c -m 644 \
  129. src/github.com/cockroachdb/cockroach/cockroach.bash \
  130. $RPM_BUILD_ROOT%{l_prefix}/etc/cockroach/
  131. # install haproxy configuration
  132. %{l_shtool} install -c -m 644 \
  133. %{SOURCE cockroach-haproxy.cfg} \
  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. '%attr(-,%{l_rusr},%{l_rgrp}) %{l_prefix}/etc/cockroach' \
  142. '%config %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"
  164. echo " | --http-host=<ipaddress> --http-port=8080\""
  165. echo " \$ rm -f $RPM_INSTALL_PREFIX/etc/cockroach/node.{crt,key}"
  166. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-cert server <ipaddress>"
  167. echo " \$ $RPM_INSTALL_PREFIX/bin/openpkg rc cockroach stop start"
  168. echo "Then you have to connect through the external IP address from now on:"
  169. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-sql root <ipaddress> system"
  170. echo ""
  171. echo "For production use, you usually also want to establish a non-privileged"
  172. echo "user with a dedicated database:"
  173. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-cert client <username>"
  174. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-user root set <username> --password"
  175. echo " | Enter password: <password>"
  176. echo " | Confirm password: <password>"
  177. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-sql root <ipaddress> system"
  178. echo " | CREATE DATABASE <database>;"
  179. echo " | GRANT ALL ON DATABASE <database> TO <username>;"
  180. echo " | \\q"
  181. echo "After this, user <username> can connect with the CockroachDB CLI:"
  182. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-sql <username> <ipaddress> <database>"
  183. echo "Alternatively, you can also use the more convenient PostgreSQL psql(1) CLI:"
  184. echo " \$ $RPM_INSTALL_PREFIX/bin/cockroach-psql <username> <ipaddress> <database>"
  185. echo ""
  186. echo "The CockroachDB admin interface you can reach under URL:"
  187. echo " https://<ipaddress>:8080/"
  188. echo "CockroachDB uses the PostgreSQL protocol. The connection string is:"
  189. echo " postgresql://<username>@<ipaddress>:26257/<database>?sslmode=require&%{l_nil}"
  190. echo " sslcert=$RPM_INSTALL_PREFIX/etc/cockroach/client.root.crt&%{l_nil}"
  191. echo " sslkey=$RPM_INSTALL_PREFIX/etc/cockroach/client.root.key"
  192. ) | %{l_rpmtool} msg -b -t notice
  193. elif [ $1 -eq 2 ]; then
  194. # after upgrade, restart service
  195. eval `%{l_rc} cockroach status 2>/dev/null`
  196. [ ".$cockroach_active" = .yes ] && %{l_rc} cockroach restart
  197. fi
  198. exit 0
  199. %preun
  200. # before erase, stop service and remove log files
  201. if [ $1 -eq 0 ]; then
  202. %{l_rc} cockroach stop 2>/dev/null
  203. rm -f $RPM_INSTALL_PREFIX/etc/cockroach/*.crt >/dev/null 2>&1 || true
  204. rm -f $RPM_INSTALL_PREFIX/etc/cockroach/*.key >/dev/null 2>&1 || true
  205. rm -f $RPM_INSTALL_PREFIX/var/cockroach/log/* >/dev/null 2>&1 || true
  206. rm -f $RPM_INSTALL_PREFIX/var/cockroach/run/* >/dev/null 2>&1 || true
  207. rm -rf $RPM_INSTALL_PREFIX/var/cockroach/db/* >/dev/null 2>&1 || true
  208. fi
  209. exit 0