Manage multiple server & client computers with SaltStack (finnish)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

653 lines
16 KiB

6 years ago
6 years ago
  1. Palvelinten hallinta - Harjoitus 1
  2. ==============
  3. *Disclaimer:*
  4. --------------
  5. Tämä harjoitus on tehty osana Haaga-Helian Tietojenkäsittelyn koulutusohjelman kurssia [Palvelinten hallinta (ICT4TN022, kevät 2018)](http://www.haaga-helia.fi/fi/opinto-opas/opintojaksokuvaukset/ICT4TN022). Kurssin pitäjänä toimii [Tero Karvinen](http://terokarvinen.com/), joka on määritellyt tämän harjoituksen tehtävänkuvaukset. Tehtävien vastaukset ovat Pekka Heleniuksen (allekirjoittanut) tuottamia.
  6. **c)** Asenna Salt Master ja Slave pull-arkkitehtuurilla (eli master on server). Voit laittaa herran ja orjan myös samalle koneelle. Kokeile suorittamalla salt:illa komentoja etänä.
  7. --------------
  8. **Vastaus:**
  9. ```
  10. sudo apt-get update && sudo apt-get install salt-common salt-master salt-minion salt-ssh ssh
  11. ```
  12. Näistä salt-master ja salt-ssh (sekä ssh-palvelin) tulee asentaa isäntäkoneelle, salt-minion ja ssh-asiakasohjelma taas asiakaskoneelle. Tässä tapauksessa asennamme molemmat samalle koneelle.
  13. Käynnistetään salt-master:
  14. ```
  15. sudo systemctl enable salt-master.service
  16. sudo systemctl start salt-master.service
  17. ```
  18. Tarkistetaan salt-masterin status:
  19. ```
  20. systemctl status salt-master.service
  21. ```
  22. Käynnistetään salt-minion:
  23. ```
  24. sudo systemctl enable salt-minion.service
  25. sudo systemctl start salt-minion.service
  26. ```
  27. Tarkistetaan salt-minionin status:
  28. ```
  29. systemctl status salt-minion.service
  30. ```
  31. Haetaan salt-masterin IP-osoite komennolla ifconfig*. IP-osoitetta indikoi tulosteen kohta inet.
  32. *En käytä tässä Debian-pohjaisista jakeluista löytyvää [hostname -I](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=562830) -komentoa, koska sitä ei ole muissa jakeluperheissä laajalti saatavilla oletuksena.
  33. Kerrotaan salt-minionille salt-masterin IP-osoite (tai koneen nimi) luotuun salt-minionin konfiguraatiotiedostoon /etc/salt/minion.
  34. Lisätään minionille ID-tunnus "orja".
  35. Lisätään seuraavat kentät (/etc/salt/minion):
  36. ```
  37. master: 127.0.0.1
  38. id: orja
  39. ```
  40. Käynnistetään salt-minion uudelleen:
  41. ```
  42. sudo systemctl restart salt-minion.service
  43. ```
  44. Ajetaan master-koneella komennot:
  45. ```
  46. sudo salt-key
  47. sudo salt-key -A
  48. ```
  49. Esimerkkituloste:
  50. ```
  51. fincer@computer:~$ sudo salt-key
  52. Accepted Keys:
  53. Denied Keys:
  54. Unaccepted Keys:
  55. orja
  56. Rejected Keys:
  57. fincer@computer:~$ sudo salt-key -A
  58. The following keys are going to be accepted:
  59. Unaccepted Keys:
  60. orja
  61. Proceed? [n/Y] y
  62. Key for minion orja accepted.
  63. ```
  64. Käynnistetään vielä salt-minion uudelleen:
  65. ```
  66. sudo systemctl restart salt-minion.service
  67. ```
  68. Ajetaan esimerkkikomento:
  69. ```
  70. fincer@computer:~$ sudo salt '*' cmd.run "ls /boot"
  71. orja:
  72. System.map-4.15.0-13-generic
  73. abi-4.15.0-13-generic
  74. config-4.15.0-13-generic
  75. grub
  76. initrd.img-4.15.0-13-generic
  77. memtest86+.bin
  78. memtest86+.elf
  79. memtest86+_multiboot.bin
  80. retpoline-4.15.0-13-generic
  81. vmlinuz-4.15.0-13-generic
  82. ```
  83. **d)** Kokeile jotain Laineen esimerkistä lainattua tilaa tai tee jostain tilasta oma muunnelma. Muista testata lopputuloksen toimivuus. Huomaa, että varastossa on myös keskeneräisiä esimerkkejä, kuten Battlenet-asennus Windowsille.
  84. --------------
  85. **Vastaus:**
  86. Luodaan master-koneelle kansiopolku /srv/salt
  87. ```
  88. sudo mkdir -p /srv/salt
  89. ```
  90. Lisätään tiedosto /srv/salt/top.sls ja /srv/salt/firewall.sls
  91. ```
  92. sudo touch /srv/salt/{top.sls,firewall.sls}
  93. ```
  94. Lisätään firewall.sls:een seuraava sisältö (sudoedit /srv/salt/firewall.sls):
  95. ```
  96. ufw:
  97. pkg.installed
  98. ufw-enable:
  99. cmd.run:
  100. - name: 'ufw --force enable'
  101. - require:
  102. - pkg: ufw
  103. ```
  104. Lähde: [joonaleppalahti - firewall.sls](https://github.com/joonaleppalahti/CCM/blob/master/salt/srv/salt/firewall.sls)
  105. Lisätään top.sls:een seuraava sisältö:
  106. ```
  107. base:
  108. 'orja':
  109. - firewall
  110. ```
  111. missä 'orja' on minionin (tai minioneiden, jos regex) ID-tunnus verkossa, ja 'firewall' viittaa masterin kansiossa /srv/salt olevaan tiedostoon firewall.sls, jonka sisältö orjalle ajetaan.
  112. Ajetaan masterilla komento:
  113. ```
  114. sudo salt '*' state.highstate
  115. ```
  116. jonka output on seuraavaa:
  117. ```
  118. fincer@computer:~$ sudo salt '*' state.highstate
  119. orja:
  120. ----------
  121. ID: ufw
  122. Function: pkg.installed
  123. Result: True
  124. Comment: All specified packages are already installed
  125. Started: 13:28:16.290668
  126. Duration: 858.482 ms
  127. Changes:
  128. ----------
  129. ID: ufw-enable
  130. Function: cmd.run
  131. Name: ufw --force enable
  132. Result: True
  133. Comment: Command "ufw --force enable" run
  134. Started: 13:28:17.190531
  135. Duration: 843.309 ms
  136. Changes:
  137. ----------
  138. pid:
  139. 10265
  140. retcode:
  141. 0
  142. stderr:
  143. stdout:
  144. Firewall is active and enabled on system startup
  145. Summary for orja
  146. ------------
  147. Succeeded: 2 (changed=1)
  148. Failed: 0
  149. ------------
  150. Total states run: 2
  151. Total run time: 1.718 s
  152. ```
  153. UFW-palomuuri oli jo orjakoneelle asennettuna, mutta ei kytkettynä päälle. Täten suoritettiin vain yksi muutos, joskin ajettiin kaksi komentoa orjalle.
  154. **e)** Kerää laitetietoja koneilta saltin grains-mekanismilla.
  155. --------------
  156. **Vastaus:**
  157. Kaikkien masterin hyväksymien minion-koneiden kaikki grains:t saa esille master-koneella ajettavalla komennolla:
  158. ```
  159. sudo salt '*' grains.ls
  160. ```
  161. Minioneiden salt:sta saa tietoja esimerkiksi seuraavasti (koskee kaikkia minion-koneita verkossa, ks. tähtimerkki):
  162. ```
  163. fincer@computer:~$ sudo salt '*' grains.items | grep saltversion -C 4
  164. - candidate
  165. - 1
  166. saltpath:
  167. /usr/lib/python3/dist-packages/salt
  168. saltversion:
  169. 2017.7.4
  170. saltversioninfo:
  171. - 2017
  172. - 7
  173. - 4
  174. - 0
  175. ```
  176. ja systemd:n pakettitietoja (flags) sekä versionumero:
  177. ```
  178. fincer@computer:~$ sudo salt '*' grains.item systemd
  179. orja:
  180. ----------
  181. systemd:
  182. ----------
  183. features:
  184. +PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD -IDN2 +IDN -PCRE2 default-hierarchy=hybrid
  185. version:
  186. 237
  187. ```
  188. Jne.
  189. **f)** Oikeaa elämää. Säädä Saltilla jotain pientä, mutta oikeaa esimerkiksi omalta koneeltasi tai omalta virtuaalipalvelimelta. (Kannattaa kokeilla Saltia oikeassa elämässä, mutta jos se ei onnistu, rakenna jotain oikeaa konettasi vastaava virtuaaliympäristö ja tee asetus siinä).
  190. --------------
  191. **Vastaus:**
  192. **HUOM!** Tehtävässä ei käytetty salt-ssh:ta!
  193. Asetetaan kaksi konetta samaan verkkoon. Toinen koneista on master, toinen minion.
  194. - Master-koneen saman verkon IP-osoite on (ifconfig) 10.11.11.101
  195. - Minion-koneen saman verkon IP-osoite on (ifconfig) 10.11.11.102
  196. - IP-osoitteet määriteltiin koneille DHCP-palvelimella
  197. Asennetaan Master ja Minion -konfiguraatiot kohdan c) -ohjeita mukaillen. Minion-koneella /etc/salt/minion -tiedostoon annetaan masterin IP-osoite ja orjakoneen ID muodossa
  198. ```
  199. master: 10.11.11.101
  200. id: orjakone
  201. ```
  202. minkä jälkeen ajetaan master-koneella komennot (HUOM! minion-kone ei heti näy salt-key:n listauksessa):
  203. ```
  204. sudo salt-key && sudo salt-key -A
  205. ```
  206. Output:
  207. ```
  208. fincer@master:~$ sudo salt-key && sudo salt-key -A
  209. Accepted Keys:
  210. Denied Keys:
  211. Unaccepted Keys:
  212. orjakone
  213. Rejected Keys:
  214. The following keys are going to be accepted:
  215. Unaccepted Keys:
  216. orjakone
  217. Proceed? [n/Y] y
  218. Key for minion orjakone accepted.
  219. ```
  220. Asennetaan LAMP-ympäristö ja /var/www/html/index.php orjakoneelle. Ajetaan masterilla seuraavat komennot:
  221. ```
  222. sudo mkdir -p /srv/salt
  223. echo "<?php phpinfo(); ?>" | sudo tee /srv/salt/index.php
  224. sudo wget https://raw.githubusercontent.com/joonaleppalahti/CCM/master/salt/srv/salt/lamp.sls -O /srv/salt/lamp.sls
  225. sudo sed -i '14,18d; s/salt\:\/\/webserver\//salt\:\/\//' /srv/salt/lamp.sls
  226. sudo salt 'orja*' state.apply lamp
  227. ```
  228. Wget:llä ladattu tiedosto sisältää määritykset myös index.html:lle, joita ei tässä laiteta. Siksi kys. tiedostoa koskevat rivit poistetaan em. sed-komennolla. Sed-komennolla poistetaan myös viittaus alihakemistoon webserver.
  229. Output onnistuneesta salt-komennosta (masterilla):
  230. ```
  231. fincer@master:~$ cat /srv/salt/lamp.sls
  232. install_lamp:
  233. pkg.installed:
  234. - pkgs:
  235. - apache2
  236. - libapache2-mod-php
  237. /var/www/html/index.php:
  238. file:
  239. - managed
  240. - source: salt://index.php
  241. - require:
  242. - pkg: install_lamp
  243. fincer@master:~$ sudo salt 'orja*' state.apply lamp
  244. orjakone:
  245. ----------
  246. ID: install_lamp
  247. Function: pkg.installed
  248. Result: True
  249. Comment: 2 targeted packages were installed/updated.
  250. Started: 15:07:24.960653
  251. Duration: 50817.827 ms
  252. Changes:
  253. ----------
  254. apache2:
  255. ----------
  256. new:
  257. 2.4.29-1ubuntu4
  258. old:
  259. apache2-api-20120211:
  260. ----------
  261. new:
  262. 1
  263. old:
  264. apache2-api-20120211-openssl1.1:
  265. ----------
  266. new:
  267. 1
  268. old:
  269. apache2-bin:
  270. ----------
  271. new:
  272. 2.4.29-1ubuntu4
  273. old:
  274. apache2-data:
  275. ----------
  276. new:
  277. 2.4.29-1ubuntu4
  278. old:
  279. apache2-utils:
  280. ----------
  281. new:
  282. 2.4.29-1ubuntu4
  283. old:
  284. httpd:
  285. ----------
  286. new:
  287. 1
  288. old:
  289. httpd-cgi:
  290. ----------
  291. new:
  292. 1
  293. old:
  294. libapache2-mod-php:
  295. ----------
  296. new:
  297. 1:7.2+60ubuntu1
  298. old:
  299. libapache2-mod-php7.2:
  300. ----------
  301. new:
  302. 7.2.3-1ubuntu1
  303. old:
  304. libapr1:
  305. ----------
  306. new:
  307. 1.6.3-2
  308. old:
  309. libaprutil1:
  310. ----------
  311. new:
  312. 1.6.1-2
  313. old:
  314. libaprutil1-dbd-sqlite3:
  315. ----------
  316. new:
  317. 1.6.1-2
  318. old:
  319. libaprutil1-ldap:
  320. ----------
  321. new:
  322. 1.6.1-2
  323. old:
  324. liblua5.2-0:
  325. ----------
  326. new:
  327. 5.2.4-1.1build1
  328. old:
  329. php-calendar:
  330. ----------
  331. new:
  332. 1
  333. old:
  334. php-cli:
  335. ----------
  336. new:
  337. 1
  338. old:
  339. php-common:
  340. ----------
  341. new:
  342. 1:60ubuntu1
  343. old:
  344. php-ctype:
  345. ----------
  346. new:
  347. 1
  348. old:
  349. php-exif:
  350. ----------
  351. new:
  352. 1
  353. old:
  354. php-fileinfo:
  355. ----------
  356. new:
  357. 1
  358. old:
  359. php-ftp:
  360. ----------
  361. new:
  362. 1
  363. old:
  364. php-iconv:
  365. ----------
  366. new:
  367. 1
  368. old:
  369. php-json:
  370. ----------
  371. new:
  372. 1
  373. old:
  374. php-opcache:
  375. ----------
  376. new:
  377. 1
  378. old:
  379. php-pdo:
  380. ----------
  381. new:
  382. 1
  383. old:
  384. php-phar:
  385. ----------
  386. new:
  387. 1
  388. old:
  389. php-posix:
  390. ----------
  391. new:
  392. 1
  393. old:
  394. php-readline:
  395. ----------
  396. new:
  397. 1
  398. old:
  399. php-shmop:
  400. ----------
  401. new:
  402. 1
  403. old:
  404. php-sockets:
  405. ----------
  406. new:
  407. 1
  408. old:
  409. php-sysvmsg:
  410. ----------
  411. new:
  412. 1
  413. old:
  414. php-sysvsem:
  415. ----------
  416. new:
  417. 1
  418. old:
  419. php-sysvshm:
  420. ----------
  421. new:
  422. 1
  423. old:
  424. php-tokenizer:
  425. ----------
  426. new:
  427. 1
  428. old:
  429. php7.2-calendar:
  430. ----------
  431. new:
  432. 1
  433. old:
  434. php7.2-cli:
  435. ----------
  436. new:
  437. 7.2.3-1ubuntu1
  438. old:
  439. php7.2-common:
  440. ----------
  441. new:
  442. 7.2.3-1ubuntu1
  443. old:
  444. php7.2-ctype:
  445. ----------
  446. new:
  447. 1
  448. old:
  449. php7.2-exif:
  450. ----------
  451. new:
  452. 1
  453. old:
  454. php7.2-fileinfo:
  455. ----------
  456. new:
  457. 1
  458. old:
  459. php7.2-ftp:
  460. ----------
  461. new:
  462. 1
  463. old:
  464. php7.2-gettext:
  465. ----------
  466. new:
  467. 1
  468. old:
  469. php7.2-iconv:
  470. ----------
  471. new:
  472. 1
  473. old:
  474. php7.2-json:
  475. ----------
  476. new:
  477. 7.2.3-1ubuntu1
  478. old:
  479. php7.2-opcache:
  480. ----------
  481. new:
  482. 7.2.3-1ubuntu1
  483. old:
  484. php7.2-pdo:
  485. ----------
  486. new:
  487. 1
  488. old:
  489. php7.2-phar:
  490. ----------
  491. new:
  492. 1
  493. old:
  494. php7.2-posix:
  495. ----------
  496. new:
  497. 1
  498. old:
  499. php7.2-readline:
  500. ----------
  501. new:
  502. 7.2.3-1ubuntu1
  503. old:
  504. php7.2-shmop:
  505. ----------
  506. new:
  507. 1
  508. old:
  509. php7.2-sockets:
  510. ----------
  511. new:
  512. 1
  513. old:
  514. php7.2-sysvmsg:
  515. ----------
  516. new:
  517. 1
  518. old:
  519. php7.2-sysvsem:
  520. ----------
  521. new:
  522. 1
  523. old:
  524. php7.2-sysvshm:
  525. ----------
  526. new:
  527. 1
  528. old:
  529. php7.2-tokenizer:
  530. ----------
  531. new:
  532. 1
  533. old:
  534. phpapi-20170718:
  535. ----------
  536. new:
  537. 1
  538. old:
  539. ----------
  540. ID: /var/www/html/index.php
  541. Function: file.managed
  542. Result: True
  543. Comment: File /var/www/html/index.php updated
  544. Started: 15:08:15.783571
  545. Duration: 67.439 ms
  546. Changes:
  547. ----------
  548. diff:
  549. New file
  550. mode:
  551. 0644
  552. Summary for orjakone
  553. ------------
  554. Succeeded: 2 (changed=2)
  555. Failed: 0
  556. ------------
  557. Total states run: 2
  558. Total run time: 50.885 s
  559. ```
  560. Sekä:
  561. ```
  562. fincer@master:~$ sudo salt 'orjakone' cmd.run 'dpkg --get-selections | grep apache'
  563. orjakone:
  564. apache2 install
  565. apache2-bin install
  566. apache2-data install
  567. apache2-utils install
  568. libapache2-mod-php install
  569. libapache2-mod-php7.2 install
  570. ```