Jitihada za Linux. Hongera kwa washindi na utuambie kuhusu masuluhisho ya kazi

Jitihada za Linux. Hongera kwa washindi na utuambie kuhusu masuluhisho ya kazi

Mnamo Machi 25 tulifungua usajili kwa Jitihada za Linux, huu ni Mchezo kwa wapenzi na wataalamu wa mfumo endeshi wa Linux. Baadhi ya takwimu: watu 1117 waliojiandikisha kwa mchezo, 317 kati yao walipata angalau ufunguo mmoja, 241 walikamilisha kwa ufanisi kazi ya hatua ya kwanza, 123 - ya pili na 70 walipita hatua ya tatu. Leo mchezo wetu umefikia tamati na tunawapongeza washindi wetu!

  • Alexander Teldekov alichukua nafasi ya kwanza.
    Alexander alijisemea kuwa yeye ndiye msimamizi wa kawaida wa mfumo. Anaishi Volgograd, amekuwa akisimamia mifumo mbali mbali ya Unix kwa karibu miaka ishirini. Nilifanikiwa kufanya kazi katika watoa huduma za Intaneti, benki, na kiunganishi cha mfumo. Sasa anafanya kazi kwa mbali katika kampuni ndogo, akifanya kazi kwenye miundombinu ya wingu kwa mteja mkubwa wa kigeni. Anapenda kusoma na kusikiliza muziki. Kuhusu Mchezo, Alexander alisema kwamba alipenda mchezo kwa ujumla, anapenda kazi kama hizo. Wakati wa mahojiano katika moja ya makampuni nilifanya kitu sawa na Hackerrank, ilikuwa ya kuvutia.
  • Nafasi ya pili - Roman Suslov.
    Riwaya kutoka Moscow. Ana miaka 37. Anafanya kazi kama mhandisi wa Linux/Unix katika Jet Infosystems. Kazini, lazima nisimamie na kusuluhisha mifumo ya Linux/Unix + SAN. Maslahi ni tofauti: Mifumo ya Linux, programu, uhandisi wa nyuma, usalama wa habari, Arduino. Kuhusu Mchezo Roman alibainisha kuwa alipenda mchezo kwa ujumla. "Nilinyoosha akili yangu kidogo na kuchukua mapumziko kutoka kwa maisha ya kila siku ya kijivu ya kazi ya kila siku. πŸ™‚ Ningependa kuwa na kazi zaidi, vinginevyo kabla sijapata wakati wa kuionja, mchezo ulikuwa tayari umekwisha.
  • Tatu - alex3d.
    Alex anaishi Moscow na anafanya kazi katika maendeleo ya programu. "Asante kwa shindano, ilipendeza kujaribu ujuzi wangu wa google-fu."

Pia katika orodha ya wachezaji 10 bora:

  • Yevgeniy Saldayev
  • Markel Mokhnachevsky
  • Konstantin Konosov
  • Pavel Sergeev
  • Vladimir Bovaev
  • Ivan Bubnov
  • Pavlo Klets

Tunaelewa kuwa kuna chaguzi nyingi za kutatua shida zetu zote; baadhi ya suluhisho zinazowezekana zimefafanuliwa hapa chini.

1. Hatua ya kwanza

Tuliiita "Je, wewe ni msimamizi?", Kwa kuwa kazi ilikuwa rahisi sana - kurekebisha huduma ya taa ya joto.

1.1. Ukweli wa Kuvutia:

Wachezaji wawili walipata ufunguo wa kwanza katika dakika 15 za kwanza za mchezo, na katika saa ya kwanza tulikuwa na viongozi watatu ambao walikamilisha kazi hiyo.

1.2. Zoezi

Ulikwenda kufanya kazi katika kampuni ambapo kwa muda mrefu hapakuwa na mtaalamu wa teknolojia ya habari. Kabla ya kuanza kuweka mambo kwa utaratibu, unahitaji kutatua tatizo la kuungua ambalo linazuia kazi ya ofisi.

Mwanamke wa kusafisha alishika kebo ya umeme ya kabati la seva kwa mop. Nguvu imerejeshwa, lakini tovuti muhimu sana bado haifanyi kazi. Tovuti ni muhimu kwa sababu kampuni haina wasiwasi sana juu ya usalama wa habari, na kwenye ukurasa kuu wa hii unaweza kupata kwa maandishi wazi nenosiri la msimamizi kwa kompyuta ya Mkurugenzi Mtendaji.

Siku nyingine nenosiri lilibadilishwa, lakini kila mtu alisahau mpya, mkurugenzi hawezi kufanya kazi. Kuna uvumi kwamba kulikuwa na funguo zaidi kwenye mashine hii ambazo zinaweza kutusaidia kubainisha nakala rudufu ya hati za uhasibu.

Kila mtu anatarajia utatuzi wa haraka wa suala hilo!

1.3. Suluhisho

1. Awali ya yote, unahitaji kubadilisha nenosiri la mizizi kwenye mashine ya kawaida ili kupata upatikanaji wake. Wakati wa kuanza, tunagundua kuwa hii ni Ubuntu 16.04 Server.

Ili kuweka upya nenosiri la mizizi, tunaanzisha upya mashine, wakati wa kupakia, wakati orodha ya grub inavyoonyeshwa, nenda kuhariri kipengee cha Ubuntu na kifungo cha "e". Hariri linux ya mstari, uiongeze hadi mwisho init=/bin/bash. Tunapakia kupitia Ctrl+x, tunapata bash. Weka tena mzizi na rw, badilisha nenosiri:

$ mount -o remount,rw /dev/mapper/ubuntu--vg-root
$ passwd

Usisahau kuhusu kusawazisha, anzisha upya.

2. Hali inasema kwamba seva yetu ya wavuti haifanyi kazi, angalia:

$ curl localhost
Not Found
The requested URL / was not found on this server.
Apache/2.4.18 

Hiyo ni, kwa kweli, Apache inaendesha, lakini inajibu na msimbo 404. Hebu tuangalie usanidi:

$ vim /etc/apache2/sites-enabled/000-default.conf

Pia kuna ufunguo hapa - StevenPaulSteveJobs.

Kuangalia njia /usr/share/WordPress - hakuna kitu kama hicho, lakini kuna /usr/share/wordpress. Hariri usanidi na uanze tena Apache.

$ systemctl restart apache2

3. Jaribu tena, tunapata hitilafu:

Warning: mysqli_real_connect(): (HY000/2002): Connection refused in /usr/share/wordpress/wp-includes/wp-db.php on line 1488

Hifadhidata haifanyi kazi?

$ systemctl status mysql
Active: active (running)

Kuna nini? Tunahitaji kufikiri. Ili kufanya hivyo, unahitaji kupata ufikiaji wa MySQL, kama ilivyoelezewa katika nyaraka. Moja ya pointi za nyaraka inapendekeza kwamba tusajili chaguo skip-grant-tables Π² /etc/mysql/mysql.conf.d/mysqld.cnf. Pia kuna ufunguo hapa - AugustaAdaKingByron.

Kurekebisha haki za mtumiaji 'wp'@'localhost'. Tunazindua MySQL, kuifanya ipatikane kwenye mtandao, tukitoa maoni juu ya chaguo katika usanidi skip-networking.

4. Baada ya hatua hizi, seva ya wavuti huanza, lakini tovuti bado haifanyi kazi kwa sababu

Warning: require_once(/usr/share/wordpress/wp-content/themes/twentysixteen/footer.php): failed to open stream: Permission denied in /usr/share/wordpress/wp-includes/template.php on line 562

Tunahariri haki za faili.

$ chmod 644 /usr/share/wordpress/wp-content/themes/twentysixteen/footer.php

Tunaburudisha ukurasa, nenda kwenye tovuti na upate ufunguo - BjarneStroustrup! Tulipata funguo zote tatu, mkurugenzi wetu anaweza kufanya kazi, tuliondoa faili za uhasibu. Kila mtu ana furaha, na una kazi nyingi mbele yako ya kuweka miundombinu, chelezo na usalama katika kampuni.

2. Hatua ya pili

Ilikuwa ni lazima kutatua tatizo la kukusanya analytics. Kila mtu anapenda uchanganuzi - ni nani anayetumia, wapi na kwa idadi gani. Tulikuja na kesi ambayo wahandisi wote wanaweza kukutana kwa namna moja au nyingine maishani.

2.1. Mambo ya Kuvutia

Mmoja wa wachezaji wetu aliingia ufunguo sahihi ndani ya dakika 10 za kwanza za mchezo, na ndani ya saa ya kwanza tulikuwa na kiongozi ambaye alikamilisha kazi.

2.2. Zoezi

Ulikwenda kufanya kazi kwenye kampuni, wasimamizi walikuja kwako na kukuuliza utafute barua zilitumwa kutoka Afrika. Tunahitaji kuunda anwani 21 za juu za wapokeaji kulingana nazo. Herufi za kwanza za anwani za wapokeaji ndizo ufunguo. Jambo moja: seva ya barua ambayo barua zilitumwa haipakia. Kila mtu anatarajia utatuzi wa haraka wa suala hilo!

2.3. Suluhisho

1. Seva haiwashi kwa sababu ya kizigeu cha ubadilishaji kisichokuwepo katika fstab; wakati wa kupakia, mfumo hujaribu kuiweka na kuacha kufanya kazi. Jinsi ya boot?

Pakua picha, tulipakua CentOS 7, boot kutoka Live CD/DVD (Troubleshooting -> Rescue), weka mfumo, hariri /etc/fstab. Mara moja tunapata ufunguo wa kwanza - GottfriedWilhelm11646Leibniz!

Unda ubadilishaji:

$ lvcreate -n swap centos -L 256M
$ sync && reboot

2. Kama kawaida, hakuna nenosiri, unahitaji kubadilisha nenosiri la mizizi kwenye mashine ya kawaida. Tayari tulifanya hivi katika kazi ya kwanza. Tunabadilisha na kuingia kwa mafanikio kwenye seva, lakini mara moja huenda kwenye kuanzisha upya. Seva imejaa kwa kasi kiasi kwamba huna hata wakati wa kuangalia magogo yote kwa makini. Jinsi ya kuelewa kinachotokea?

Tena tunaanzisha kutoka kwa livecd, soma kwa uangalifu kumbukumbu za mfumo na, ikiwa tu, angalia kwenye cron, kwa kuwa periodicity kama hiyo. Huko tunapata shida na ufunguo wa pili - Alan1912MathisonTuring!

Haja ndani /etc/crontab kufuta au kutoa maoni mstari nje echo b > /proc/sysrq-trigger.

3. Baada ya hapo seva imepakia, na unaweza kukamilisha kazi ya wasimamizi: "Anwani gani barani Afrika?" Habari hii kwa ujumla inapatikana kwa umma. Unaweza kupata taarifa hii kwenye Mtandao kwa kutumia maneno "ip address africa", "geoip database". Ili kutatua tatizo, unaweza kutumia hifadhidata za usambazaji wa anwani zinazopatikana kwa uhuru (geoip). Tulitumia hifadhidata kama kiwango MaxMind GeoLite2, inapatikana chini ya leseni ya Creative Commons Attribution-ShareAlike 4.0.

Wacha tujaribu kusuluhisha shida yetu kwa kutumia huduma za mfumo wa Linux tu, lakini kwa ujumla inaweza kutatuliwa kwa idadi kubwa ya njia: kutumia huduma za kuchuja maandishi na kutumia maandishi katika lugha anuwai za programu.

Kuanza, tutapata tu jozi za "IP ya mpokeaji-mpokeaji" kutoka kwa kumbukumbu ya barua. /var/log/maillog (hebu tujenge jedwali la wapokeaji wa barua pepe - IP ya mtumaji). Hii inaweza kufanywa kwa amri ifuatayo:

$ cat /var/log/maillog | fgrep -e ' connect from' -e 'status=sent' | sed 's/[]<>[]/ /g' | awk '/connect from/ {ip=$11} /status=sent/ {print $10" "ip}' > log1.txt

Na kabla hatujaendelea na kuandaa hifadhidata ya anwani za Kiafrika, acheni tuangalie anwani kuu za IP za watumaji.

$ cat log1.txt | cut -d' ' -f1 | sort | uniq -c | sort -r | head -n 40
5206 [email protected]
4165 [email protected]
3739 [email protected]
3405 [email protected]
3346 [email protected]

Kati ya wote, wapokeaji watatu wa kwanza kutoka juu wanasimama wazi kwa suala la idadi ya herufi. Ukiweka anwani za IP za watumaji waliotuma kwa anwani kutoka kwenye orodha hii 3 bora, utagundua uwepo wa mitandao fulani:

$ cat log1.txt | fgrep '[email protected]' | cut -d' ' -f2 | sort | cut -d'.' -f1 | uniq -c | sort -r | head
831 105
806 41
782 197
664 196
542 154
503 102
266 156
165 45
150 160
108 165

Mitandao mingi ya 105/8, 41/8, 196/8,197/8 imetengwa kwa AFRINIC - mojawapo ya wasajili watano wa mtandao wa kikanda ambao husambaza rasilimali za mtandao. AFRINIC inasambaza nafasi ya anwani barani Afrika. Na 41/8 inahusu AFRINIC kabisa.

https://www.nic.ru/whois/?searchWord=105.0.0.0 
https://www.nic.ru/whois/?searchWord=41.0.0.0

Kwa hivyo, jibu la shida ni, kwa kweli, kwenye logi yenyewe.

$ cat log1.txt | fgrep -e '105.' -e '41.' -e '196.' -e '197.' -e '154.' -e '102.' | awk '{print $1}' | sort | uniq -c | sort -r | head -n 21
4209 [email protected]
3313 [email protected]
2704 [email protected]
2215 [email protected]
1774 [email protected]
1448 [email protected]
1233 [email protected]
958 [email protected]
862 [email protected]
762 [email protected]
632 [email protected]
539 [email protected]
531 [email protected]
431 [email protected]
380 [email protected]
357 [email protected]
348 [email protected]
312 [email protected]
289 [email protected]
282 [email protected]
274 [email protected]

Katika hatua hii tunapata kamba "LinuxBenedictTorvadst".

Kitufe sahihi: "LinusBenedictTorvalds".

Mfuatano unaotokana una taipo kuhusiana na ufunguo sahihi katika herufi 3 za mwisho. Hii ni kutokana na ukweli kwamba mitandao tuliyochagua haijajitolea kabisa kwa nchi za Kiafrika na jinsi barua pepe zinavyosambazwa na anwani za IP katika kumbukumbu yetu.

Kwa maelezo ya kutosha ya mitandao mikubwa zaidi iliyopewa nchi za Kiafrika, jibu sahihi linaweza kupatikana:

$ cat log1.txt | fgrep -e' '105.{30..255}. -e' '41. -e' '196.{64..47}. -e' '196.{248..132}. -e' '197.{160..31}. -e' '154.{127..255}. -e' '102.{70..255}. -e' '156.{155..255}. | awk '{print $1}' | sort | uniq -c | sort -r | head -n 21
3350 [email protected]
2662 [email protected]
2105 [email protected]
1724 [email protected]
1376 [email protected]
1092 [email protected]
849 [email protected]
712 [email protected]
584 [email protected]
463 [email protected]
365 [email protected]
269 [email protected]
225 [email protected]
168 [email protected]
142 [email protected]
111 [email protected]
 96 [email protected]
 78 [email protected]
 56 [email protected]
 56 [email protected]
 40 [email protected]

Tatizo linaweza pia kutatuliwa kwa njia nyingine.
Pakua MaxMind, ifungue, na amri tatu zifuatazo pia kutatua tatizo letu.

$ cat GeoLite2-Country-Locations-ru.csv | grep "Африка" | cut -d',' -f1 > africaIds.txt
$ grep -Ff africaIds.txt GeoLite2-Country-Blocks-IPv4.csv | cut -d',' -f1 > africaNetworks.txt
$ grepcidr -f africaNetworks.txt log1.txt | cut -d' ' -f1 | sort | uniq -c | sort -r | head -n21

Kwa njia moja au nyingine, hatimaye tulihesabu takwimu, na wasimamizi walipokea data waliyohitaji kufanya kazi!

3. Hatua ya tatu

Hatua ya tatu ni sawa na ya kwanza - unahitaji pia kurekebisha huduma ya taa ya joto, lakini kila kitu ni ngumu zaidi kuliko kazi ya kwanza.

3.1. Mambo ya Kuvutia

Katika dakika 15 za kwanza, wachezaji watatu walipata ufunguo wa kwanza; saa 2 na dakika 20 baada ya kuanza kwa hatua, mshindi wetu alikamilisha kazi.

3.2. Zoezi

Ulienda kufanya kazi kwa kampuni ambapo hati zote za kampuni zimehifadhiwa kwenye seva ya ndani ya Wiki. Mwaka jana, mhandisi aliamuru diski 3 mpya kwa seva pamoja na moja iliyopo, akisema kwamba ili mfumo ustahimili makosa, diski zinahitajika kuwekwa katika safu fulani. Kwa bahati mbaya, wiki chache baada ya ufungaji wao, mhandisi alikwenda likizo kwenda India na hakurudi.

Seva ilifanya kazi bila kushindwa kwa miaka kadhaa, lakini siku chache zilizopita mtandao wa kampuni hiyo ulidukuliwa. Kwa mujibu wa maagizo, wafanyakazi wa usalama waliondoa disks kutoka kwa seva na kukupeleka kwako. Wakati wa usafirishaji, diski moja ilipotea bila kurudi.

Tunahitaji kurejesha utendakazi wa Wiki; kwanza kabisa, tunavutiwa na yaliyomo kwenye kurasa za wiki. Sehemu fulani ya maandishi ambayo ilikuwa kwenye mojawapo ya kurasa za wiki hii ni nenosiri la seva ya 1C na inahitajika haraka ili kuifungua.

Kwa kuongezea, mahali fulani kwenye kurasa za wiki au mahali pengine palikuwa na nywila za seva ya logi na seva ya ufuatiliaji wa video, ambayo pia ingehitajika kupona; bila wao, uchunguzi wa tukio hilo hauwezekani. Kama kawaida, tunatarajia utatuzi wa haraka wa suala hilo!

3.3. Suluhisho

1. Tunajaribu boot moja baada ya nyingine kutoka kwa diski ambazo tunazo na kila mahali tunapokea ujumbe sawa:

No bootable medium found! System halted 

Unahitaji boot kutoka kwa kitu. Kuanzisha kutoka kwa CD/DVD ya Moja kwa Moja (Utatuzi wa Shida -> Uokoaji) husaidia tena. Wakati wa kupakia, tunajaribu kupata ugawaji wa boot, hatuwezi kuipata, tunaishia kwenye shell. Tunajaribu kujifunza nini na jinsi ya kufanya na disks. Inajulikana kuwa kuna watatu kati yao. Kuna zana zaidi za hii katika toleo la 7 la CentOS, ambapo kuna amri blkid au lsblk, ambayo inatuonyesha habari zote kuhusu disks.

Jinsi na nini tunafanya:

$ ls /dev/sd*

Mara moja ni dhahiri kwamba

/dev/sdb1 - ext4
/dev/sdb2 - Ρ‡Π°ΡΡ‚ΡŒ lvm
/dev/sda1 ΠΈ /dev/sdc1 - части Ρ€Π΅ΠΉΠ΄Π°
/dev/sda2 ΠΈ /dev/sdc2 - ΠΏΡ€ΠΎ Π½ΠΈΡ… Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ извСстно Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚

Tunaweka sdb1, ni wazi kuwa hii ni kizigeu cha buti cha CentOS 6.

$ mkdir /mnt/sdb1 && mount /dev/sdb1 /mnt/sdb1

Ni wazi, tunaenda kwenye sehemu ya grub na kupata ufunguo wa kwanza hapo - James191955Gosling katika faili isiyo ya kawaida.

2. Tunasoma pvs na lvs, kwa kuwa tunafanya kazi na LVM. Tunaona kwamba kunapaswa kuwa na kiasi 2 cha kimwili, moja haipatikani na inalalamika kuhusu uid iliyopotea. Tunaona kwamba kunapaswa kuwa na kiasi 2 cha kimantiki: mzizi na ubadilishaji, wakati mzizi umepotea kwa kiasi (sifa ya P ya kiasi). Haiwezekani kupanda, ambayo ni huruma! Tunamuhitaji sana.

Kuna diski 2 zaidi, tunaziangalia, kukusanyika na kuziweka:

$ mdadm --examine --verbose --scan
$ mdadm --assemble --verbose --scan
$ mkdir /mnt/md127 && mount /dev/md127  /mnt/md127 

Tunaangalia, tunaweza kuona kuwa hii ni kizigeu cha buti cha CentOS 6 na nakala ya kile ambacho tayari kimewashwa. /dev/sdb1, na hapa tena ufunguo sawa - DennisBMacAlistairCritchie!
Wacha tuone jinsi inavyokusanywa /dev/md127.

$ mdadm --detail /dev/md127

Tunaona kwamba inapaswa kukusanywa kutoka kwa diski 4, lakini ilikusanywa kutoka kwa mbili /dev/sda1 ΠΈ /dev/sdc1, zinapaswa kuwa nambari 2 na 4 kwenye mfumo. Tunadhani kwamba kutoka /dev/sda2 ΠΈ /dev/sdc2 Unaweza pia kukusanya safu. Haijulikani kwa nini hakuna metadata juu yao, lakini hii ni kwa dhamiri ya msimamizi, ambaye yuko mahali fulani huko Goa. Tunadhania kuwa kunapaswa kuwa na RAID10, ingawa kuna chaguzi. Tunakusanya:

$ mdadm --create --verbose /dev/md0 --assume-clean --level=10 --raid-devices=4 missing /dev/sda2 missing /dev/sdc2

Tunaangalia blkid, pvs, lvs. Tunagundua kwamba tumekusanya kiasi halisi ambacho tulikosa hapo awali.

lvroot ilirekebishwa mara moja, tukaiweka, lakini kwanza washa VG:

$ vgchange -a y
$ mkdir /mnt/lvroot && mount /dev/mapper/vg_c6m1-lv_root /mnt/lvroot 

Na kila kitu kiko, pamoja na ufunguo kwenye saraka ya nyumba ya mizizi - /root/sweet.

3. Bado tunajaribu kufufua seva yetu ili ianze kama kawaida. Kiasi zote za kimantiki kutoka kwa yetu /dev/md0 (ambapo tulipata kila kitu) kiburute hadi /dev/sdb2, ambapo seva nzima ilifanya kazi hapo awali.

$ pvmove /dev/md0 /dev/sdb2
$ vgreduce vg_c6m1 /dev/md0

Tunazima seva, toa disks 1 na 3, kuondoka pili, boot kutoka Live CD / DVD katika Uokoaji. Pata kizigeu cha buti na urejeshe bootloader kwenye grub:

root (hd0,0)
setup (hd0)

Tunaondoa diski ya boot na kupakia kwa mafanikio, lakini tovuti haifanyi kazi.

4. Kuna chaguzi mbili za kuzindua tovuti: sanidi Apache kutoka mwanzo au tumia nginx na php-fpm tayari imesanidiwa mapema:

$ /etc/init.d/nginx start
$ /etc/init.d/php-fpm start

Hatimaye, unahitaji kuanza MySQL:

$ /etc/init.d/mysqld start

Haitaanza, na jibu liko ndani /var/log/mysql. Mara tu unapotatua tatizo na MySQL, tovuti itafanya kazi, kwenye ukurasa kuu kutakuwa na ufunguo - RichardGCCMatthewGNUStallman! Sasa tunaweza kufikia 1C, na wafanyakazi wataweza kupokea mishahara yao. Na kama kawaida, una kazi nyingi mbele ya kuanzisha miundombinu na usalama katika kampuni.

Tunaweza pia kushiriki tena orodha ya vitabu ambavyo vilitusaidia sisi na washiriki wetu kujiandaa kwa ajili ya mchezo: linux.mail.ru/books.

Asante kwa kuwa nasi! Endelea kufuatilia matangazo ya michezo inayofuata!

Chanzo: mapenzi.com

Kuongeza maoni