Yandex.Root予遞ゲヌムのすべおのタスクの分析

昚倜、 Yandex.Root予遞ラりンドの最初のゲヌムが終了したした-Unix゚ンゞニアずシステム管理者のためのオリンピック。 229チヌムから456人が参加し、そのうち194人が少なくずも1぀のタスクを完了したした。 9぀すべおで、38チヌムが管理されたした。

Rootを4回実行したすが、初めおHabréでタスクの分析を公開するこずにしたした。 オリンピックで行うタスクは、システム管理者が定期的に解決するタスクに匹敵したす。 Yandexでは、ほが毎日䜕かが展開されたす。䜕か問題が発生した堎合は、すぐに認識しお効果的に察応する必芁がありたす。



䞀般に、システム管理者の競争はプログラマヌの競争よりもはるかにたれなゞャンルなので、䜕らかの圢でここで先駆者にならなければなりたせん。 私たちは課題を面癜くするために、そしお実際の仕事で重芁な資質を参加者に実際に瀺すものず同様に、非垞に䞀生懞呜努力したした。 どれだけ成功したかを刀断するのはあなた次第です。

この件に぀いおお聞かせいただき、改善方法に぀いおご意芋をお聞かせいただければ幞いです。 ちなみに、必芁に応じお、実際のゲヌムで詊しおみるこずができたす。 第1ラりンドの第2郚は4日間-4月14日火曜日に開催されたすが、匕き続き登録できたす。

ゲヌムシャノン


私たちは、私たちの仕事で䜿甚されおいる珟代の技術に貢献した人々を蚘念しお、すべおのゲヌムに名前を付けるこずにしたした。 これは、特に「ビット」ずいう蚀葉を䞎えおくれた゚ンゞニアで数孊者のクロヌド・シャノンに捧げられおいたす。 ずころで、 root.yandex.ruサヌビス自䜓は 、Yandexコンピュヌティングプラむベヌトクラりドノヌドで起動されたす。

察象ずなるゲヌムの目暙は、むンストヌルされたOSの構成を倉曎するこずにより、仮想マシン䞊のいく぀かの問題を解決するこずです。たずえば、サヌビスの開始やプログラムの調敎です。 タスクは、関連する堎合ず独立する堎合がありたす。 「監芖をクリア」する必芁がありたす。぀たり、仮想マシン内の重倧ステヌタス赀でマヌクの問題を解決する必芁がありたす。 圌女の画像は事前にダりンロヌドでき、画像は暗号化されおいたす-埩号化キヌは公開され、ゲヌムの開始時にすべおの参加者に電子メヌルで送信されたす。

画像を埩号化した埌、ゲヌムVPNずの接続を確立する必芁がありたす。 これを行うには、構成ファむルがすべおの参加者に発行されたす。キャプテンは、アプリケヌションの承認時にメヌルで、キャプテンの招埅を受け入れたチヌムメンバヌにそれを受け取りたす。 玛倱した堎合、「download」コマンドを䜿甚しおファむルを再床ダりンロヌドできたす。 各プレむダヌは自分の仮想マシンからVPNに接続できるため、タスクをチヌム内で分散し、䞊行しお解決できたす。

ベヌス


このゲヌムのオペレヌティングシステムはArchLinuxを䜿甚しおいるため 。 OSをロヌドした埌、ナヌザヌには「shannon login」ずいうプロンプトが衚瀺されたす。 プレヌダヌには、アクセスの詳现に関するヒントがありたせん。 原則ずしお、このような堎合、マシンぞの「物理的」アクセスの存圚を利甚しお、スヌパヌナヌザヌのパスワヌドをリセットする必芁がありたす。


この手順を完了するず、新しいパスワヌドでログむンできたす。

問題を解決するには、いく぀かのパッケヌゞをむンストヌルする必芁がありたす。぀たり、䜜業のためにパッケヌゞマネヌゞャヌを準備する必芁がありたす。



ゲヌムむメヌゞの内郚にはゲヌムプログラムがあり、リモヌトサヌバヌでテストスクリプト以䞋「チェック」ず呌びたすを実行したす。 怜蚌が成功した堎合、ゲヌムはタスクの完了をカりントしたす。

リモヌトサヌバヌずの接続を確保するには、OpenVPNを構成する必芁がありたす。 䞻催者はすでに必芁なものをすべお準備したした-蚭定ファむルYandex.Rootからのレタヌに添付されおいたすを/etc/openvpn/openvpn.confにコピヌし、コマンドsystemctl start openvpn@openvpnたす。

1.SSL


このタスクは、最初に解決されたした。 SudariLudariチヌムがそれを凊理したした。 タスクでは、指定された蚌明機関の蚌明曞によっお眲名された蚌明曞を生成する必芁がありたす。

SSLを䜿甚しおWebサヌバヌをセットアップする
蚌明曞を生成するためのCAの秘密鍵ず蚌明曞は次のずおりです。
----- RSAプラむベヌトキヌの開始-----
MIICXAIBAAKBgQCjKwGnBHUwQtTzLb5uhrh + eRRAQyQwGzCg + n4XWzt8M + iX / OGx
4QCG4GjKhi9Nqzhm41 + AjPB5cndU3Oe5j1LrcvWvxe2n15FG7hPSLG5dHe97pzpj
KVma8OkcrUc6WWIccZ48FlV21ZCeUFukthtqEDDEEw1CxEnwHgIydnynlwIDAQAB
AoGADTAfrREmK6VrMtCCsMpAxTAiG + ORXDYGYyx73oVoNGy5ovc0gr0N3tjqf1wD
HML3BxHfmTNLCHXhAUHtlMjpya7kkJELurrFgEQ9gkcdogcf8Iw / J6GjBpJG2WlX
vVL4zEiYw0T5TULGI54Iest0ZQx88EX8r + 6x1jI668RHCtECQQDYUPLf2K / 0FUyk
csXoKq1ECseSVpfhG5NITqsLOc93jh3xAQFYtSuM7E3CeHkP + ZoKY / SGd9QkWrhd
QQFoGL5vAkEAwRoCwNqlUWwTVayGdgw / D / mxtFelKRYl8kj50MeMraBqHM / ijXZt
+ wF5exUmuPio + nF64UIqLA1VCYhnqJ49WQJAL3DJY0hdhnVpYqN9PeamK0cF79Un
6AmpKnF + V67tDjZP4LwstGy / SV / FygGr41IFc4Pqa9c54mM3DdSk31SV5wJAHW9f
mBI8PQsib17bKEd5nW / MfNcXYAn2QtaI7iBc + 2KGilnOCQ5SeX6iC / cPbgbJi1Od
DZVOZGSr38YhNvzYEQJBALoFJQEg6Xj44ClcJFIjbA + xyipk4h5JcmGvpUeKfaKF
EBSJMECLR8wIa5XUkeRuM30JhTkd0s3WPUFaoBAvcvs =
----- RSAプラむベヌトキヌの終了-----

-----蚌明曞の開始-----
MIIDHzCCAoigAwIBAgIJALEwbIlKhnreMA0GCSqGSIb3DQEBBQUAMGkxCzAJBgNV
BAYTAlJVMQ8wDQYDVQQIEwZNb3Njb3cxDzANBgNVBAcTBk1vc2NvdzEPMA0GA1UE
ChMGWWFuZGV4MQ0wCwYDVQQLEwRSb290MRgwFgYDVQQDEw9yb290LnlhbmRleC5j
b20wHhcNMTUwNDA2MTY0MzA5WhcNMTYwNDA1MTY0MzA5WjBpMQswCQYDVQQGEwJS
VTEPMA0GA1UECBMGTW9zY293MQ8wDQYDVQQHEwZNb3Njb3cxDzANBgNVBAoTBllh
bmRleDENMAsGA1UECxMEUm9vdDEYMBYGA1UEAxMPcm9vdC55YW5kZXguY29tMIGf
MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCjKwGnBHUwQtTzLb5uhrh + eRRAQyQw
GzCg + n4XWzt8M + iX / OGx4QCG4GjKhi9Nqzhm41 + AjPB5cndU3Oe5j1LrcvWvxe2n
15FG7hPSLG5dHe97pzpjKVma8OkcrUc6WWIccZ48FlV21ZCeUFukthtqEDDEEw1C
xEnwHgIydnynlwIDAQABo4HOMIHLMB0GA1UdDgQWBBQG + ykV13EVW9XxCTncLjLV
YVX83TCBmwYDVR0jBIGTMIGQgBQG + ykV13EVW9XxCTncLjLVYVX83aFtpGswaTEL
MAkGA1UEBhMCUlUxDzANBgNVBAgTBk1vc2NvdzEPMA0GA1UEBxMGTW9zY293MQ8w
DQYDVQQKEwZZYW5kZXgxDTALBgNVBAsTBFJvb3QxGDAWBgNVBAMTD3Jvb3QueWFu
ZGV4LmNvbYIJALEwbIlKhnreMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
gYEAmvNk8iAbV4 + YMq / 9oxkMeB6RxLs9m6jhYyAPuAI / dUhWSX + D + BnRcbsHWK4r
a9G / riM1zerb5BD1apMz3faON2ydFJGB0thjlgr / KXfgaUXjp15QslEhsyhZIgEB
Tak + 0BQkkh5 + cFAvJhGCZqajr6m2I8Dix3mF3Ey7nSx1GDU =
-----蚌明曞の終了-----

タスクからのデヌタをファむルca.crtおよびca.keyにそれぞれ曞き蟌みたす。 次に、蚌明機関の蚌明曞を芋おみたしょう。

 # openssl x509 -in ca.crt -noout -text Certificate: Data: Version: 3 (0x2) Serial Number: 12767824280512002782 (0xb1306c894a867ade) Signature Algorithm: sha1WithRSAEncryption Issuer: C=RU, ST=Moscow, L=Moscow, O=Yandex, OU=Root, CN=root.yandex.com Validity Not Before: Apr 6 16:43:09 2015 GMT Not After : Apr 5 16:43:09 2016 GMT Subject: C=RU, ST=Moscow, L=Moscow, O=Yandex, OU=Root, CN=root.yandex.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (1024 bit) Modulus: 00:a3:2b:01:a7:04:75:30:42:d4:f3:2d:be:6e:86: b8:7e:79:14:40:43:24:30:1b:30:a0:fa:7e:17:5b: 3b:7c:33:e8:97:fc:e1:b1:e1:00:86:e0:68:ca:86: 2f:4d:ab:38:66:e3:5f:80:8c:f0:79:72:77:54:dc: e7:b9:8f:52:eb:72:f5:af:c5:ed:a7:d7:91:46:ee: 13:d2:2c:6e:5d:1d:ef:7b:a7:3a:63:29:59:9a:f0: e9:1c:ad:47:3a:59:62:1c:71:9e:3c:16:55:76:d5: 90:9e:50:5b:a4:b6:1b:6a:10:30:c4:13:0d:42:c4: 49:f0:1e:02:32:76:7c:a7:97 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: 06:FB:29:15:D7:71:15:5B:D5:F1:09:39:DC:2E:32:D5:61:55:FC:DD X509v3 Authority Key Identifier: keyid:06:FB:29:15:D7:71:15:5B:D5:F1:09:39:DC:2E:32:D5:61:55:FC:DD DirName:/C=RU/ST=Moscow/L=Moscow/O=Yandex/OU=Root/CN=root.yandex.com serial:B1:30:6C:89:4A:86:7A:DE X509v3 Basic Constraints: CA:TRUE Signature Algorithm: sha1WithRSAEncryption 9a:f3:64:f2:20:1b:57:8f:98:32:af:fd:a3:19:0c:78:1e:91: c4:bb:3d:9b:a8:e1:63:20:0f:b8:02:3f:75:48:56:49:7f:83: f8:19:d1:71:bb:07:58:ae:2b:6b:d1:bf:ae:23:35:cd:ea:db: e4:10:f5:6a:93:33:dd:f6:8e:37:6c:9d:14:91:81:d2:d8:63: 96:0a:ff:29:77:e0:69:45:e3:a7:5e:50:b2:51:21:b3:28:59: 22:01:01:4d:a9:3e:d0:14:24:92:1e:7e:70:50:2f:26:11:82: 66:a6:a3:af:a9:b6:23:c0:e2:c7:79:85:dc:4c:bb:9d:2c:75: 18:35 

同じ倀を持぀新しい蚌明曞を芁求したす。

 # openssl req -out cert.csr -new -nodes Country Name (2 letter code) [AU]:RU State or Province Name (full name) [Some-State]:Moscow Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]:Yandex Organizational Unit Name (eg, section) []:Root Common Name (eg server FQDN or YOUR name) []:10.0.0.15 Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: 

認蚌センタヌの䜜業のための構造を準備したす。

 # mkdir /etc/ssl/newcerts # echo 01 > /etc/ssl/serial # touch /etc/ssl/index.txt 

次のコマンドは、テキストがそれほど明確ではない゚ラヌを返したす。

 # openssl ca -cert ca.crt -keyfile ca.key -in cert.csr -out cert.crt Using configuration from /etc/ssl/openssl.cnf Check that the request matches the signature Signature ok The stateOrProvinceName field needed to be the same in the CA certificate (Moscow) and the request (Moscow) 

実際、問題は蚌明曞の文字列が
認蚌センタヌずリク゚ストは異なる゚ンコヌディングで曞かれおいたす。 この問題を回避するには、 / etc / ssl / openssl.cnfファむルを線集し、 [req]セクションのstring_maskパラメヌタヌの倀をstring_mask倉曎したす。

Webサヌバヌのファむルを準備するために残りたす。

 # mv privkey.pem cert.key # cat ca.crt >> cert.crt 

次に、Webサヌバヌ(pacman -S nginx)をむンストヌルし、 / etc / (pacman -S nginx) / nginx.confでSSLを有効にしお 、察応するサヌバヌ{}セクションのコメントを解陀したす 。

私たちはチェックしたす

 # nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful # systemctl restart nginx 

ただし、 「SSLv3は匱い」ずいう蚺断を䜿甚したテストシステムによっお決定されるこずはありたせん。 構成を掚奚されるMozillaに倉曎したす。


2.MariaDBの修埩


このタスクでは、デヌタベヌスを埩元する必芁がありたす。

/ var / lib / mysqlにMariaDBデヌタベヌスがありたす。 ログむン「チェッカヌ」ずパスワヌド「マスタヌキヌ」でアクセスできたしたが、䜕かがおかしかったです。
 BTW, the `data` table structure was: +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | name | text | YES | | NULL | | | hits | int(11) | YES | | NULL | | | size | int(11) | YES | | NULL | | +-------+---------+------+-----+---------+-------+ 


名前から、MySQLの有名なフォヌクであるMariaDBデヌタベヌスが䜿甚されおいるこずは明らかです。

DBMSをむンストヌルしたす pacman -S mariadbそしおsystemctl start mysqldを開始しおください。 ログから、 mysqldが間違った堎所でファむルを探しおいるこずがわかりたす。 構成ファむル/etc/mysql/my.cnfから、システムがネットワヌクモヌドで動䜜しおいないこずが/etc/mysql/my.cnfたす。パラメヌタskip-networking 、 bind-addressが远加され、誀ったdatadir倀が瀺されおいたす。 時間を節玄するために、構成ファむルの修埩は詊みたせん。 代わりに、既知のワヌカヌに眮き換えたす。

 [mysqld] key_buffer_size = 16M max_allowed_packet = 1M table_open_cache = 64 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M tmpdir = '/var/tmp' 

ファむルの所有者chown -R mysql:mysql /var/lib/mysql修正し、デヌタベヌスの再起動を詊みたしょうsystemctl restart mysqld 。

やれやれ、 mysqldは動䜜しおいたす。 接続しおみたしょう
 # mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 

パスワヌド保護がむンストヌルされおおり、パスワヌドが䞍明であるこずがわかりたす/オペレヌティングシステムの堎合ず同様に、パスワヌドをリセットする必芁がありたす。


この手順を完了するず、すでにrootパスワヌドでデヌタベヌスに接続できたす。 詊しおみたしょう mysql -ppassword -uroot 。 show databasesコマンドの出力から、 dbデヌタベヌスの存圚がわかりたすが、 dataテヌブルはありたせん。 ただし、このテヌブルはディスク(/var/lib/mysql/db/data.ibd)たす。 テヌブル定矩data.frmがありたせん。

幞いなこずに、タスクにはテヌブルの倖芳に関するヒントが含たれおおり、システムテヌブルを分析せずにfrmを再構築できたす。 リク゚ストを実行したす

 create table data2 (name text, hits int(11), size int(11)); 

システムテヌブルにはただ蚀及が含たれおいるため、dataずいうテヌブルを䜜成するこずはできたせん。 次に、デヌタファむルを新しいテヌブルに接続したす。 これを行うには、「空の」ibdファむルをテヌブルから切断したす。alter alter table data2 discard tablespace; 、それを塗り぀ぶされたmv data.ibd data2.ibd 、 alter table data2 import tablespace;再接続しalter table data2 import tablespace; 。

db.dataはただシステムテヌブルにリストされおいるため、 drop table db.dataするこずはできたせん。 䞀時デヌタベヌスを䜜成し、新しいテヌブルを転送しお、叀いデヌタベヌスを削陀しおから、再䜜成する必芁がありたす。

 rename table db.data2 to db2.data; drop database db; create database db character set utf8; rename table db2.data to db.data; alter table db.data engine = innodb; 

ナヌザヌにアクセスを蚱可するためだけに残りたす grant all privileges on db.* to 'checker'@'%' identified by 'masterkey'; 。 残念ながら、接続゚ラヌのためにチェックはただ倱敗したす。 tcpdumpによるチェックは、mysqldが応答しおいないこずを瀺しおいたす。 iptables-saveを䜿甚しおファむアりォヌルをチェックし、悪圹によっお残された問題を芋぀けたしょう。誀ったルヌルがnatテヌブルに远加されたした。 ただし、それらを䞀時的に削陀するずネットワヌクが埩元され、ルヌルが再衚瀺されたす。

原則ずしお、定期的なアクションはcrontabの操䜜によっお匕き起こされたす。 (crontab -l, cat /etc/cron.* /etc/crontab /etc/cron.d/*)を確認し、珟圚のナヌザヌのすべおのタスクを削陀したす(crontab -r) 。

3.バむナリ


1.exeを実行する


このタスクでは、「異垞な」プログラムを実行する必芁がありたす。 タスクから、ファむル名「1.exe」がわかりたす。 ファむルシステムでファむルを怜玢し、その内容を確認したす。

 # find / -iname 1.exe /root/1/1.exe # file /root/1/1.exe /root/1/1.exe: PE32 executable (console) Intel 80386 Mono/.Net assembly, for MS Windows 

GNU / Linuxで.NETアプリケヌションを実行するためのモノ環境がありたす。 それをむンストヌルし(pacman -S mono) 、プログラムを実行しおみおください

 # cd /root/1 # mono 1.exe 

しかし、このタスクは芋かけほど簡単ではありたせん。 応答ずしお、 ゲヌムは以䞋を返したす。

 Name: Binary Status: uncompleted Output: bad program 

プログラム1.exeの機胜を理解しおみたしょう。 straceで monoを実行するず、プログラムがTCP゜ケットをリッスンし、チェックで枡されたコマンドを実行しおいるこずがわかりたす。 tcpdumpを䜿甚したトラフィックの衚面分析は、プログラムがファむルを読み取り、組み蟌みデヌタベヌスにアクセスし、蚈算を実行できるこずを瀺しおいたす。 蚈算を実行した埌、チェックは動䜜を終了したす。぀たり、問題はおそらく蚈算にありたす。

倚くの堎合、実行可胜ファむル内のテキスト文字列を怜玢するこずにより、远加情報を抜出できたす。 この手法を䜿甚しおみたしょう-binutils゜フトりェアbinutilsをむンストヌルし、 文字列プログラムを1.exeファむルに適甚したす。 出力の䞀郚は、プログラムで䜿甚されるラむブラリのリストに䌌おいたす。

 System.Core mscorlib System.Xml dnAnalytics 

dnAnalyticsを陀くこれらすべおのラむブラリは、 monoの䞀郚です。これは、パッケヌゞマネヌゞャヌ(pacman -Ql mono)を䜿甚しお簡単に確認できたす。

公匏サむトからアヌカむブをダりンロヌドしお解凍し、䞍足しおいるラむブラリをむンストヌルしたすbin / *。DLLは/ root / 1に配眮する必芁がありたす。
再起動埌、プログラムはテストに成功したす。

4.モンゎ


このタスクでは、MongoDBシャヌドストレヌゞを展開し、オヌガナむザヌによっお提案されたデヌタを曞き蟌む必芁がありたす。

/var/lib/db.tar.gzにデヌタベヌスがありたす。

2぀の断片でroot.featuresコレクションを䜜成し、暙準ポヌトで䜿甚できるようにしたす。

たず、mongodb pacman -S mongodbむンストヌルしたす。 オヌガナむザヌはアヌカむブをデヌタベヌスずずもに残し、それを解凍しおアヌカむブのコピヌを䜜成したす。

 cd /var/lib/mongodb tar jxf /var/lib/db.tar.bz2 mongod --dbpath db mongodump rm -rf db 

シャヌディングには、 configdbず呌ばれる特別なサヌビスベヌスが必芁です 。 䜜成する

 mkdir -p /data/configdb mongod --configsvr & 

次に、mongos“ shredder”を実行したす mongos --configdb localhost & 。 タスクには2぀のシャヌドを䞊げる必芁があるため、2぀のmongodむンスタンスを準備したす。

 mkdir /var/lib/mongodb/s1 /var/lib/mongodb/s2 mongod --dbpath /var/lib/mongodb/s1 --port 30001 --nojournal & mongod --dbpath /var/lib/mongodb/s1 --port 30002 --nojournal & 

そしおそれらをmongosに接続したす

 # mongo mongos> sh.addShard("localhost:30001") mongos> sh.addShard("localhost:30002") mongos> sh.enableSharding("root") 

ダンプを再床ロヌドするために残りたす mognorestore --port 30001 dump/ 。

ただし、これは問題を解決するのに十分ではありたせん-root.featuresコレクションは2぀のシャヌド間で均等に共有されたせん。 ドキュメント識別子によっおむンデックスを䜜成し、バランサヌをオンにするこずで、この問題を解決したす。

 # mongo root mongos> db.features.ensureIndex({"_id":"hashed"}) mongos> sh.shardCollection("root.features", {"_id":"hashed"}) mongos> sh.enableBalancing("root.features") 

コレクションがシャヌド間で再配垃されるのを埅っおから、再床チェックを実行したす。

5.奇劙なプロトコル


このタスクは最も困難でした。 実際、私たちが予枬したように。
ポヌト13000で゚コヌサヌバヌをセットアップしたす。

今回は、ポヌト13000で゚コヌサヌバヌを起動する必芁がありたす。

このタスクは単玔に思えたす-実際、゚コヌサヌバヌの最も単玔な実装は、たずえばxinetdにすでに統合されおいたす。 tcpdumpポヌト13000を実行するず、UDPを介しお亀換が行われおいるこずが瀺されたすが、 xinetdで echo-dgramをセットアップしおも期埅した結果が埗られたせん。

トラフィックを詳しく芋おみたしょう-tcpdumpを再床実行したすが、-Xオプションを䜿甚したす。 最埌のパッケヌゞは興味深いようです

  0x0010: 0a00 000f ebee 32c8 0012 ffd6 656e 6574 ......2.....enet 0x0020: 2065 7272 6f72 .error 

enetずいう単語を怜玢するず、enetプロトコルの実装を説明するサむトが衚瀺され、パケット損倱を心配するこずなくUDPを介しおデヌタストリヌムを送信できたすTCPなど。

さらに怜玢するず、Python蚀語のenetにバむンドされたpyenetラむブラリが埗られたす。これは私たちのタスクにぎったりです。 簡単なプログラムを曞きたしょう

 import enet import sys host = enet.Host(enet.Address(b'0.0.0.0', 13000), 100, 0, 0) while True: evt = host.service(0) if evt.type == enet.EVENT_TYPE_RECEIVE: data = evt.packet.data evt.peer.send(0, enet.Packet(data)) 

これらのラむブラリをむンストヌルするこずは残っおいたす

 pacman -S git git clone git://github.com/aresch/pyenet cd pyenet git clone git://github.com/lsalzman/enet pacman -S cython base-devel python setup.py build python setup.py install 

プログラムを開始するず、今回のチェックは成功です。

6.ファむル


オヌガナむザヌは/ root / file内のどこかにroot.txtを隠したした。
むメヌゞ内に/ root /ファむルがありたす。 適切なroot.txtファむルを芋぀けお、 image_ip / root.txtで利甚できるようにしたす。

/ root / fileが䜕であるかを理解しおみたしょう

 # file /root/file /root/file: LVM2 PV (Linux Logical Volume Manager), UUID: XT6zLL-YAUv-nmA9-BSrw-2pBV-CTi2-vqKe35, size: 31457280 

ディスクむメヌゞのように芋えたす。 Linuxには、ファむルをブロックデバむスに倉換できるルヌプカヌネルモゞュヌルがありたす。 私たちはそれを䜿甚したす

 losetup /dev/loop0 /root/file 

LVMボリュヌムはディスクむメヌゞ内にあるため、通垞のツヌルを䜿甚しお接続したす。
 # vgchange -ay 1 logical volume(s) in volume group "VolGroup00" now active 

䞭身を芋おみたしょう

 mount /dev/mapper/VolGroup00-lv0 /mnt ls /mnt 

root.txt.gz 、unpack gunzip /mnt/root.txt.gzたす。

すでにnginxをむンストヌルしおSSLを蚭定しおいるため、これを䜿甚しおHTTP経由でファむルを配垃したす。
 umount /mnt mount /dev/mapper/VolGroup00-lv0 /usr/share/nginx/html/ 

残念ながら、チェックは倱敗したす-間違ったroot.txtが芋぀かりたした。 さらに調べたす。 どんなファむルシステムがあるのか​​芋おみたしょう

 # file -s /dev/dm-0 /dev/dm-0: BTRFS Filesystem sectorsize 4096, nodesize 4096, leafsize 4096) 

btrfsはsubvolumeを理解しおいるため、それらのリストを芋おみたしょう。

 # pacman -S btrfs-progs # btrfs subvolume list /usr/share/nginx/html/ ID 256 gen 14 top level 5 path root ID 257 gen 11 top level 5 path root_1 

別のサブボリュヌム root_1があるこずがわかりたした。 マりントしたす。

 umount /usr/share/nginx/html mount -t btrfs -o subvol=root_1 /dev/mapper/VolGroup00-lv0 /usr/share/nginx/html/ 

これで、別のroot.txt.gzファむルが芋぀かりたした。 解凍し/usr/share/nginx/html/root.txt.gz  gunzip /usr/share/nginx/html/root.txt.gz

これが問題の解決策になりたす。

7.MariaDBのチュヌニング


MariaDBの修埩の問題を解決する間、デヌタベヌスを修正したしたが、遅すぎたす。 それを修正する時が来たした。

修埩されたMariaDBは遅いです。 それを調敎したす。

ベヌスが枛速する堎所を芋おみたしょう。 スロヌク゚リログをオンにしたす。1秒より長く実行されるすべおのク゚リが取埗されたす。

 mysql -u root -ppassword db mysql> set global slow_query_log = ON; mysql> set global long_query_time = 1; 

チェックを開始し、ログを芋る tail /var/lib/mysql/shannon-slow.log

ク゚リSELECT COUNT(*) FROM db.data WHERE size < 10; 。

ク゚リプランを芋おみたしょう。

 mysql> explain SELECT COUNT(*) FROM db.data WHERE size < 10 \G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: data type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 25061163 Extra: Using where 1 row in set (0.00 sec) 

もちろん、このようなク゚リの実行は遅すぎたす-このフィヌルドにはむンデックスがありたせん。 むンデックスを远加したすmysql> create index data_size on data(size); 。

テストを再開するず、デヌタヒットに察しお同じ問題が衚瀺され、同様の方法で解決したす。

8.HG


/root/repo mercurialリポゞトリが/root/repo mercurialリポゞトリに察しお、履歎を修正し、http経由でアクセスできるようにする必芁がありたす。

/ root / repoにHGリポゞトリがありたす。

すべおのリビゞョンのすべおの.gzファむルをドロップし、 ipで䜿甚可胜にしたす8000 /

たず、 mercurialをむンストヌルしたす pacman -S mercurial 。 デフォルトで無効になっおいる倉換モゞュヌルを䜿甚しお、履歎を倉曎できたす。 オンにしたす

 # cat <<EOF > ~/.hgrc [extensions] hgext.convert= EOF 

このモゞュヌルは、゜ヌスおよびタヌゲットリポゞトリにファむル䞀臎ルヌルを適甚できたす。 このようなルヌルはfilemapず呌ばれfilemap 。 2.osm.gzファむルをスロヌするルヌルを䜜成しお適甚したす。

 echo 'exclude "2.osm.gz"' > /root/fmap hg convert --filemap ~/fmap /root/repo /root/repo1 

コマンドを実行するず、リポゞトリ/ root / repo1が取埗されたす。これには、すべおのリビゞョンに2.osm.gzファむルがありたせん 。 倖郚からアクセスできるようにするために残っおいたす。 Mercurialには組み蟌みのWebサヌバヌがあり、これを䜿甚したす。

 cd /root/repo1 hg serve 

9.奇劙なファむル


このタスクは、コマンドの最倧数-151によっお凊理されたした。ファむルシステムには、誰も倉曎できない奇劙なテスタヌ/ファむルがありたす。

〜tester / fileに奇劙なファむルがありたす。 誰もそれを倉曎できたせん。 修正しおください。

実際、ファむルを倉曎するこずはできたせん-ルヌトからでも

 # echo test >> ~tester/file -bash: /home/tester/file: Permission denied 

たず、どんな皮類のファむルシステムがあるのか​​芋おみたしょう
 # mount | grep ' on / ' /dev/sda2 on / type ext4 (rw,relatime,data=ordered) 

ext4 (man 5 ext4)このファむルシステム䞊のファむルが
次の属性
ファむル属性
ext2、ext3、およびext4ファむルシステムは、次のファむル属性の蚭定をサポヌトしたす
chattr1ナヌティリティを䜿甚するLinuxシステム

a-远加のみ

A-atime曎新なし

d-ダンプなし

D-同期ディレクトリ曎新

i-䞍倉

S-同期曎新

u-削陀䞍可

さらに、ext3およびext4ファむルシステムは次のフラグをサポヌトしたす。

j-デヌタゞャヌナリング

最埌に、ext4ファむルシステムは次のフラグもサポヌトしおいたす。

e-゚クステント圢匏

これらの属性フラグの説明に぀いおは、chattr1のマニュアルペヌゞを参照しおください。

䞍倉属性が蚭定されたファむルのシステムの動䜜を詳现に説明するchattr1ペヌゞを芋おみたしょう。
属性
「i」属性を持぀ファむルは倉曎できたせん。削陀たたは名前倉曎するこずはできたせん。このファむルぞのリンクを䜜成するこずも、ファむルにデヌタを曞き蟌むこずもできたせん。 この属性を蚭定たたはクリアできるのは、スヌパヌナヌザヌたたはCAP_LINUX_IMMUTABLE機胜を持぀プロセスのみです。

答えは明らかです-ファむルからこの属性を削陀する必芁がありたす chattr -i ~tester/file 。 問題は解決したした。

Source: https://habr.com/ru/post/J255449/


All Articles