Advertisement
Guest User

clusterfuck.sh

a guest
Dec 28th, 2016
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 10.19 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # This annotated script sets up a limited deployment of OpenStack Swift
  4. # onto a Raspberry Pi. It sets up a one-replica, one-server environment
  5. # appropriate for external testing. It assumes there is a user called "pi"
  6. # and that user has sudo access (this is the default on a Raspberry Pi).
  7.  
  8. #install btrfs && format disks
  9.  
  10. sudo apt-get update && apt-get upgrade -y
  11. sudo apt-get install btrfs-tools -y
  12.  
  13. for i in `fdisk -l | grep /dev/sd | awk '{print $2}' | sed 's/://g'`; do (echo o; echo n; echo p; echo 1; echo ; echo; echo w) | sudo fdisk $i; done
  14. #for i in `fdisk -l | grep /dev/sd | awk '{print $1}' | grep /dev`; do mkfs.xfs $i -f; done
  15. for i in `fdisk -l | grep /dev/sd | awk '{print $1}' | grep /dev`; do mkfs.btrfs $i -f; done
  16.  
  17. mkdir /etc/swift
  18. mkdir /var/run/swift
  19.  
  20.  
  21.  
  22. export DEBIAN_FRONTEND=noninteractive
  23.  
  24. set -e
  25. echo "deb http:// trusty-backports main universe" >> /etc/apt/sources.list
  26.  
  27.  
  28. sudo apt-get update && sudo apt-get upgrade -y
  29. sudo apt-get install -y build-essential libssl-dev libffi-dev
  30. sudo apt-get install -y build-essential autoconf automake libtool
  31.  
  32. sudo apt-get install -y python-software-properties curl gcc git memcached \
  33.  python-coverage python-dev python-nose python-setuptools \
  34.  python-simplejson python-xattr sqlite3 xfsprogs python-eventlet \
  35.  python-greenlet python-pastedeploy python-netifaces python-pip \
  36.  python-sphinx
  37. sudo pip install mock tox dnspython
  38. sudo pip install setuptools --upgrade
  39.  
  40. #-hacks-
  41. #install erasurelib
  42. mkdir /tmp/erasurelib
  43. cd /tmp/erasurelib
  44. git clone https://github.com/openstack/liberasurecode.git
  45. cd /tmp/erasurelib/liberasurecode
  46. ./autogen.sh
  47. ./configure
  48. make
  49. sudo make install
  50. cd --
  51.  
  52. #install pyeclib
  53. mkdir /tmp/pyeclib
  54. cd /tmp/pyeclib
  55. git clone https://github.com/openstack/pyeclib.git
  56. #git clone https://bitbucket.org/kmgreen2/pyeclib.git
  57. cd pyeclib
  58. sudo python setup.py install
  59. ldconfig
  60. cd --
  61. #-end hacks-
  62.  
  63.  
  64. # update /etc/fstab
  65. for i in `sudo fdisk -l | grep /dev/sd | awk '{print $1}' | grep /dev | cut -d\/ -f 3`;
  66. do
  67. grep $i /etc/fstab
  68. if [ $? = 1 ]; then
  69. sudo tee -a /etc/fstab >/dev/null <<EOF
  70. /dev/$i /mnt/$i btrfs defaults 0 0
  71. #/dev/$i /mnt/$i xfs loop,noatime,nodiratime,nobarrier,inode64,logbufs=8 0 0
  72. EOF
  73. fi;
  74. done
  75.  
  76. export C=1
  77. for i in `sudo fdisk -l | grep /dev/sd | awk '{print $1}' | grep /dev | cut -d\/ -f 3`;
  78. do
  79.  sudo mkdir -p /mnt/$i/1
  80.  sudo chown -R pi:pi /mnt/$i/1
  81.  sudo ln -fs /mnt/$1/1 /srv/$C;
  82.  C=$(( $C + 1 ))
  83. done
  84. sudo chown -R pi:pi /etc/swift /srv/* /var/run/swift
  85.  
  86. # update /etc/rc.local
  87. grep 'su - pi /home/pi/bin/startmain' /etc/rc.local
  88. if [ $? = 1 ]; then
  89. sudo tee -a /etc/rc.local >/dev/null <<EOF
  90.  
  91. mkdir -p /var/cache/swift
  92. chown pi:pi /var/cache/swift*
  93. mkdir -p /var/run/swift
  94. chown pi:pi /var/run/swift
  95. su - pi /home/pi/bin/startmain
  96. EOF
  97. fi
  98.  
  99. sudo tee /etc/rsyncd.conf >/dev/null <<EOF
  100. uid = pi
  101. gid = pi
  102. log file = /var/log/rsyncd.log
  103. pid file = /var/run/rsyncd.pid
  104. address = 127.0.0.1
  105. EOF
  106.  
  107. for i in `ls /srv`;
  108. do
  109. account=$((6002 + ($i * 10)))
  110. container=$((6001 + ($i * 10)))
  111. object=$((6000 + ($i * 10)))
  112. sudo echo "
  113. [account$account]
  114. max connections = 25
  115. path = /srv/$i/node/
  116. read only = false
  117. lock file = /var/lock/account6012.lock
  118.  
  119.  
  120. [container$container]
  121. max connections = 25
  122. path = /srv/$i/node/
  123. read only = false
  124. lock file = /var/lock/container6011.lock
  125.  
  126. [object$object]
  127. max connections = 25
  128. path = /srv/$i/node/
  129. read only = false
  130. lock file = /var/lock/object6010.lock" >> /etc/rsyncd.conf;
  131. done
  132.  
  133.  
  134. sudo tee /etc/rsyslog.d/10-swift.conf >/dev/null <<EOF
  135. # Uncomment the following to have a log containing all logs together
  136. local1,local2,local3,local4,local5.* /var/log/swift/all.log
  137.  
  138.  
  139. # Uncomment the following to have hourly proxy logs for stats processing
  140. $template HourlyProxyLog,"/var/log/swift/hourly/%\$YEAR%%\$MONTH%%\$DAY%%\$HOUR%"
  141. local1.*;local1.!notice ?HourlyProxyLog
  142.  
  143.  
  144. local1.*;local1.!notice /var/log/swift/proxy.log
  145. local1.notice /var/log/swift/proxy.error
  146. local1.* ~
  147.  
  148.  
  149. local2.*;local2.!notice /var/log/swift/storage1.log
  150. local2.notice /var/log/swift/storage1.error
  151. local2.* ~
  152. EOF
  153.  
  154.  
  155. sudo mkdir -p /var/log/swift/hourly
  156. sudo chmod -R g+w /var/log/swift
  157.  
  158.  
  159.  
  160.  
  161. set +e
  162. cd && git clone git://github.com/openstack/python-swiftclient.git
  163. set -e
  164. cd ~/python-swiftclient; git pull origin master && sudo python ./setup.py install
  165.  
  166.  
  167. set +e
  168. cd && git clone git://github.com/openstack/swift.git
  169. set -e
  170. cd ~/swift; git pull origin master && sudo python ./setup.py install
  171.  
  172.  
  173. cd && mkdir -p /home/pi/bin
  174.  
  175.  
  176. sudo mkdir -p /etc/swift
  177. sudo chown pi:pi /etc/swift
  178.  
  179.  
  180. cat >/etc/swift/proxy-server.conf <<EOF
  181. [DEFAULT]
  182. bind_port = 8080
  183. user = pi
  184. log_facility = LOG_LOCAL1
  185. log_level = DEBUG
  186. eventlet_debug = true
  187.  
  188.  
  189. [pipeline:main]
  190. pipeline = catch_errors healthcheck proxy-logging cache slo ratelimit tempurl formpost tempauth staticweb container-quotas account-quotas proxy-logging proxy-server
  191.  
  192.  
  193. [app:proxy-server]
  194. use = egg:swift#proxy
  195. allow_account_management = true
  196. account_autocreate = true
  197.  
  198.  
  199. [filter:tempauth]
  200. use = egg:swift#tempauth
  201. user_admin_admin = admin .admin .reseller_admin
  202. user_test_tester = testing .admin
  203. user_test2_tester2 = testing2 .admin
  204. user_test4_tester4 = testing4 .admin
  205. user_test_tester3 = testing3
  206. user_demo_demo = demo .admin
  207.  
  208.  
  209. [filter:catch_errors]
  210. use = egg:swift#catch_errors
  211.  
  212.  
  213. [filter:healthcheck]
  214. use = egg:swift#healthcheck
  215.  
  216.  
  217. [filter:cache]
  218. use = egg:swift#memcache
  219.  
  220.  
  221. [filter:proxy-logging]
  222. use = egg:swift#proxy_logging
  223.  
  224.  
  225. [filter:ratelimit]
  226. use = egg:swift#ratelimit
  227.  
  228.  
  229. [filter:domain_remap]
  230. use = egg:swift#domain_remap
  231.  
  232.  
  233. [filter:cname_lookup]
  234. # Note: this middleware requires python-dnspython
  235. use = egg:swift#cname_lookup
  236.  
  237.  
  238. [filter:staticweb]
  239. use = egg:swift#staticweb
  240.  
  241.  
  242. [filter:formpost]
  243. use = egg:swift#formpost
  244.  
  245.  
  246. [filter:list-endpoints]
  247. use = egg:swift#list_endpoints
  248.  
  249.  
  250. [filter:bulk]
  251. use = egg:swift#bulk
  252.  
  253.  
  254. [filter:container-quotas]
  255. use = egg:swift#container_quotas
  256.  
  257.  
  258. [filter:account-quotas]
  259. use = egg:swift#account_quotas
  260.  
  261.  
  262. [filter:slo]
  263. use = egg:swift#slo
  264.  
  265.  
  266. [filter:tempurl]
  267. use = egg:swift#tempurl
  268.  
  269.  
  270. [filter:formpost]
  271. use = egg:swift#formpost
  272. EOF
  273.  
  274.  
  275. sudo mkdir -p /etc/swift/account-server
  276. sudo chown pi:pi /etc/swift/account-server
  277.  
  278.  
  279. for i in `ls /srv`;
  280. do
  281. sudo cat >/etc/swift/account-server/$i.conf <<EOF
  282. [DEFAULT]
  283. devices = /srv/$i/node/
  284. bind_port = $((6002 + ($i * 10)))
  285. user = pi
  286. log_facility = LOG_LOCAL2
  287. recon_cache_path = /var/cache/swift
  288. eventlet_debug = true
  289. log_level = DEBUG
  290. mount_check = false
  291. disable_fallocate = true
  292.  
  293.  
  294. [pipeline:main]
  295. pipeline = recon account-server
  296.  
  297.  
  298. [app:account-server]
  299. use = egg:swift#account
  300.  
  301.  
  302. [filter:recon]
  303. use = egg:swift#recon
  304.  
  305.  
  306. [account-replicator]
  307. vm_test_mode = yes
  308.  
  309.  
  310. [account-auditor]
  311.  
  312.  
  313. [account-reaper]
  314. EOF
  315. echo "done $i";
  316. done
  317.  
  318.  
  319. sudo mkdir -p /etc/swift/container-server
  320. sudo chown pi:pi /etc/swift/container-server
  321.  
  322.  
  323. for i in `ls /srv`;
  324. do
  325. cat >/etc/swift/container-server/$i.conf <<EOF
  326. [DEFAULT]
  327. devices = /srv/$i/node/
  328. bind_port = $((6001 + ($i *10)))
  329. user = pi
  330. log_facility = LOG_LOCAL2
  331. recon_cache_path = /var/cache/swift
  332. eventlet_debug = true
  333. log_level = DEBUG
  334. mount_check = false
  335. disable_fallocate = true
  336.  
  337.  
  338. [pipeline:main]
  339. pipeline = recon container-server
  340.  
  341.  
  342. [app:container-server]
  343. use = egg:swift#container
  344.  
  345.  
  346. [filter:recon]
  347. use = egg:swift#recon
  348.  
  349.  
  350. [container-replicator]
  351. vm_test_mode = yes
  352.  
  353.  
  354. [container-updater]
  355.  
  356.  
  357. [container-auditor]
  358.  
  359.  
  360. [container-sync]
  361. EOF
  362. echo "done $i";
  363. done
  364.  
  365.  
  366. sudo mkdir -p /etc/swift/object-server/
  367. sudo chown pi:pi /etc/swift/object-server/
  368.  
  369.  
  370. for i in `ls /srv`;
  371. do
  372. cat >/etc/swift/object-server/$i.conf <<EOF
  373. [DEFAULT]
  374. devices = /srv/$i/node/
  375. bind_port = $((6000 + ($i *10)))
  376. user = pi
  377. log_facility = LOG_LOCAL2
  378. recon_cache_path = /var/cache/swift
  379. eventlet_debug = true
  380. log_level = DEBUG
  381. mount_check = false
  382. disable_fallocate = true
  383.  
  384.  
  385. [pipeline:main]
  386. pipeline = recon object-server
  387.  
  388.  
  389. [app:object-server]
  390. use = egg:swift#object
  391.  
  392.  
  393. [filter:recon]
  394. use = egg:swift#recon
  395.  
  396.  
  397. [object-replicator]
  398. vm_test_mode = yes
  399.  
  400.  
  401. [object-updater]
  402.  
  403.  
  404. [object-auditor]
  405. EOF
  406. echo "done $i";
  407. done
  408.  
  409.  
  410. # when setting up the hash_path_suffix, it is important to make it unique
  411. # and keep it a secret
  412. SUFF=`python -c 'import uuid; print uuid.uuid4().hex'`
  413. cat <<EOF >/etc/swift/swift.conf
  414. [swift-hash]
  415. swift_hash_path_suffix = $SUFF
  416.  
  417.  
  418. [swift-constraints]
  419. #max_file_size = 5368709122
  420. # Note: Since the Raspberry Pi has such limited storage space,
  421. # the maximum size of a single object has been set to 500MB.
  422. max_file_size = 524288000
  423. #max_meta_name_length = 128
  424. #max_meta_value_length = 256
  425. #max_meta_count = 90
  426. #max_meta_overall_size = 4096
  427. #max_object_name_length = 1024
  428. #container_listing_limit = 10000
  429. #account_listing_limit = 10000
  430. #max_account_name_length = 256
  431. #max_container_name_length = 256
  432. EOF
  433.  
  434. mkdir /home/pi/bin
  435. touch /home/pi/bin/remakerings
  436. cat <<EOF >/home/pi/bin/remakerings
  437. #!/bin/bash
  438.  
  439.  
  440. cd /etc/swift
  441.  
  442.  
  443. rm -f *.builder *.ring.gz backups/*.builder backups/*.ring.gz
  444.  
  445.  
  446. swift-ring-builder object.builder create 8 1 0
  447. swift-ring-builder account.builder create 8 1 0
  448. swift-ring-builder container.builder create 8 1 0
  449. EOF
  450.  
  451.  
  452. for i in `ls /srv`;
  453. do
  454. account=$((6002 + ($i * 10)))
  455. container=$((6001 + ($i * 10)))
  456. object=$((6000 + ($i * 10)))
  457.  
  458.  
  459. echo "
  460. swift-ring-builder object.builder add r1z1-127.0.0.1:$object/d1 1
  461. swift-ring-builder container.builder add r1z1-127.0.0.1:$container/d1 1
  462. swift-ring-builder account.builder add r1z1-127.0.0.1:$account/d1 1" >> /home/pi/bin/remakerings;
  463. done
  464.  
  465.  
  466. echo "
  467. swift-ring-builder object.builder rebalance
  468. swift-ring-builder container.builder rebalance
  469. swift-ring-builder account.builder rebalance
  470. " >> /home/pi/bin/remakerings
  471.  
  472.  
  473. chmod +x /home/pi/bin/*
  474.  
  475.  
  476. cat <<EOF
  477.  
  478.  
  479. ===========================================
  480.  
  481.  
  482. Install completed.
  483.  
  484.  
  485. You can now call \`resetswift\` and \`startmain\` to clean everything and start
  486. the Swift server processes.
  487.  
  488.  
  489. To test, try the following:
  490. export PIIP=<IP address of your Raspberry Pi>
  491. curl -i -H "X-Auth-User: test:tester" -H "X-Auth-Key: testing" \\
  492. http://\${PIIP}:8080/auth/v1.0/
  493. EOF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement