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.

664 lines
18 KiB

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