メディアセンターの改革方法について

Raspberry Pi 3モデルB







新しいテレビの買収に伴い、どのプレフィックスを使用するかという疑問が生じました。 Chromecastの機能はすでに不足していたため、Kodiにある本格的なメディアセンターが必要でした。 SmartTVでテレビを購入することは選択肢ではありません-KodiはAndroid(SmartTVプラットフォームから)にしかインストールできません。また、私はそれをあまり愛情なく扱っています。 さて、フルサイズのAndroidを必要とし、そのすべてのサービスとプログラムが仮想マシンにあり、完全なGNU / Linux環境がなく、ほとんどの場合、更新がありません。 同じ理由で、Xiaomiからの同じ接頭辞はかなり良いものの、Androidの多数の既製のメディアセンターも注目されました。 TizenOS上のSmartTVについて考える人もいるかもしれませんが、Kodiはありません。







このような要件があり、これが私の最初のシングルボードコンピューターであるという事実にもかかわらず、選択は明白です-Raspberry Pi、具体的にはRPi 3モデルBを採用しました。







Raspbianのインストールと事前構成



Debianユーザーとして、私はすぐにRaspbianをインストールし、新しいシステムで遊び始めました。 ダウンロードしたシステムイメージは、 Etcherプログラムを使用して、またはコンソールから記録できます。







まず、カードの内容をクリアし、ゼロで埋めます...







sudo dd if=/dev/zero of=/dev/mmcblk0 bs=512 count=2047
      
      





その後、画像を記録します...







 sudo dd if=/path/to/raspbian.img of=/dev/mmcblk0
      
      





Raspbianでraspberryを起動すると、Kodiのインストールは非常に簡単です-コマンドを使用して







 sudo apt update && sudo apt install kodi
      
      





raspberryをオンにしたときにメディアセンターを開始するには、 / home / pi / .config / lxsession / LXDE-pi / autostartファイルに行を追加する必要があります







 @kodi -fs
      
      





Raspberry Piの魅力にもかかわらず、1つの重要な欠点があります:突然の停電により、データの一部のみがSDカードに上書きされる可能性があり、そのためメモリカードが長時間使用されず、平均して故障する可能性があります。 追加のエネルギー源(たとえば、コンデンサー)でこの問題を解決する市場にはソリューションがあります。 また、SDカードには書き換え回数に制限があるため、メモリカードの寿命を延ばすために、これらの書き換え回数を減らすことが重要です。







不要なプログラムをアンインストールする



メモリカードのリソースを消費するスワップファイルを削除するためにdphys-swapfileを削除し、少なくとも私にとってはさまざまなおもちゃや完全に不要なプログラムも削除しました。







 sudo apt purge dphys-swapfile wolfram-engine logrotate nodejs nodered minecraft-pi oracle-java8-jdk openjdk-7-jre oracle-java7-jdk openjdk-8-jre sudo apt autoremove --purge
      
      





ログマネージャーの交換



ログを記録するサービスも変更しました。







 sudo apt install busybox-syslogd sudo dpkg --purge rsyslog
      
      





これで、ログはRAMにあるリングバッファーに書き込まれますlogread



コマンドでログを見ることができます。







パワーダウン中の信頼性の向上



最も論理的なステップは、システムのパーティションを読み取り専用にすることです。そして、定義上、記録がないため、記録時に問題はありません。 しかし、Raspbianは、書き込みが完全に禁止されているパーティションでは動作できない本格的なシステムです。 少なくとも/ var / log/ var / tmp 、および/ tmptmpfsに移動する必要があります。つまり、これらのフォルダーの内容をRAMに保存します。 しかし、実際に使用するには、 さらに多くの変更を加える必要があります







別の方法で行うことにしました。メモリカードに保存されているベースを読み取り専用にし、システムに加えられたすべての変更をRAMに保存する多層ファイルシステムを作成します。 したがって、電源をオフにするとすべての変更がリセットされ、誰にも害はありません。 このアプローチは新しいものではなく、たとえばルーターでよく使用され、 overlayfsの使用非常に簡単に実装できます。







UnionFS使用した同様のソリューションへのリンクは既にgiktimsで公開されていますが、公開以来、 UnionFSおよびAUFSのより進歩的な代替としてSUSEによって開発されたOverlayFSファイルシステムのサポートがLinuxカーネルに追加されたため、少し異なって設定されています。







メモリカードのシステムパーティションは読み取り専用モードでマウントされ、すべての変更はRAMにある上位層に保存されます。 ところで、このスクリプトはAUFSもサポートしています。







インストールは非常に簡単です。







  1. / etc / initramfs-tools / scripts / init-bottom /フォルダーにroot-roファイルを作成し、そこにスクリプトの内容を入れます







     cd /etc/initramfs-tools/scripts/init-bottom && sudo wget https://gist.github.com/sbonfert/7044eced553ea5c5c2346bcde6bb12e7/raw/7ef62bd5553faae1cb2d2eb79d84dde5197e8c56/root-ro
          
          





  2. スクリプトのアクセス許可を変更します。







     sudo chmod 0755 /etc/initramfs-tools/scripts/init-bottom/root-ro
          
          





  3. initramfsにロードされるモジュールのリストにオーバーレイを追加します







     sudo echo "overlay" >> /etc/initramfs-tools/modules
          
          





  4. initramfsイメージを再作成します。







     mkinitramfs -o /boot/initrd
          
          





  5. パラメータroot-ro-driver=overlay



    をブートローダーのファイル/boot/cmdline.txtに追加します







  6. /boot/config.txtのブートローダー設定にさらに3行を追加します。

     initramfs initrd followkernel ramfsfile=initrd ramfsaddr=-1
          
          





/boot/cmdline.txtdisable-root-ro=true



を追加disable-root-ro=true



か、ファイルシステムのルートにdisable-root-roファイルを作成することにより、読み取り専用モードをdisable-root-ro=true



にできます。







Debian(それぞれ、Raspbian)には、このスクリプトとほぼ同じことを行うbilibop-lockfsパッケージがあります。 ただし、 bilibopはインストールに使用できますが、RaspbianブートローダーではなくGRUBと連動するように設計されています。 Raspbianのx86バージョンでは、正しく動作します。 おそらく読者はRaspberry Pi用にパッチを当てることができるでしょう。







メモリ内ファイルシステムのオーバーフロー保護



tmpfsの場合 、デフォルトでは、RAMの半分が割り当てられ、ルートファイルシステムへの変更が制限に達すると、メモリが制限されるためです。 システムを再起動するだけでクリアできます。このため、 / etc / crontabに次の行を追加します。







 #        (100%)  . * * * * * root /bin/df -h | /bin/grep /$ | /usr/bin/awk '{if ($5=="100%") system ("/sbin/shutdown -r now")}'
      
      





cronを再起動します







 sudo service cron restart
      
      





これにより、1分以内に問題に対応できます。







別々にルーツ、別々にハムスター



私はしばらくこの構成を使用しましたが、Kodiの設定とプラグインを失うことにうんざりしていましたが、事前にすべてを構成しなかったため、ルートシステムを読み取り専用モードのままにして、ホームフォルダーをそのままにしておくことにしました。 。







当然、パーティションもF2FS( SSDおよびその他のフラッシュドライブ用に最適化されたファイルシステム)の下にある必要があります。 すでに述べたように、メモリカードには2つの問題があります。記録中にデータの一部が失われる確率と、サポートされるセルの上書きが比較的少ないことです。 F2FSは、コピーオンライト(コピーオンライト)の概念を使用するファイルシステムを指します。つまり、新しいデータは同じセルに上書きされず、新しい場所に書き込まれます。操作が正常に完了すると、古いメディア領域へのリンクが削除されます。







F2FSを使用するには、ラズベリーpiと新しいパーティションが作成されるシステムの両方にf2fs-toolsパッケージをインストールする必要があります。 Debianライク(Raspbianを含む)の場合、コマンドを実行する必要があります







 sudo apt install f2fs-tools
      
      





GPartedを使用して半分を切り捨て、F2FSパーティションを作成すると同時に、パーティションにアクセスしやすくするためにラベルhomeを付与しました。







gparted homeセクション







その後、彼は/ etc / fstabに変更を加え、行を追加しました







 LABEL=home /home f2fs rw,noatime,defaults 0 1
      
      





すべて順調ですが、今すぐアップデートをインストールする方法は?



また、Ubuntu Core Snappyプロジェクトを思い出して、これについて考えました。 他のすべての人が読み取り可能な2つのセクションの存在を提供します。 システムの更新は、非アクティブなパーティションにアトミックに書き込まれ、更新されたパーティションを使用してシステムが再起動されます。 System-a / bのこれら2つのセクションでは、アップグレードに問題がある場合に運用環境にロールバックすることもできます。







Ubuntuコアパーティションのパーティション構造







同様に、システムパーティションを2つの等しいパーティションに分割しました。 以前は、もちろん、メモリカードからコンピューターにデータをコピーしていました。 これを行うには、rsyncファイルコピーユーティリティを使用すると便利です。 例:







 sudo rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/var/backups/*","/var/cache/apt/*","/var/lock/*","/var/tmp/*","/lost+found", "/home"} /media/user/folder /home/user/backup_raspbian
      
      





上記のコマンドを分割し、各引数が何をするかを確認します。









合計で4つのセクションがあり、最初のセクションにはブートローダーが含まれ、次の2つにはサイズが同じで、ファイルシステムのコピーが含まれています(便宜上、それぞれroot1fsおよびroot2fsと呼びます)。最後のセクションにはユーザーデータがあります。







分割されたセクション







バックアップをコンピューターからメモリーカードの両方のセクションにコピーし、 fstabとブートローダーで変更を登録するために残ります。







ルートがマウントされている行の/ etc / fstabファイルroot1fsセクションで、行を次のように変更します。







 LABEL=root1fs / ext4 defaults,noatime 0 1
      
      





およびroot2fsのそれぞれroot2fsセクション







/boot/cmdline.txtに変更を加えることは残っています

root=PARTUUID=…



パラメータroot=PARTUUID=…



を見つけて、 root=LABEL=root1fs



またはroot=LABEL=root2fs



必要があります。これは、ブートが実行されるパーティションに依存します。







準備が完了しました。システムの最初の更新を実行できます。

バックアップを保存したコンピューターに、 prootおよびqemu-systemパッケージをインストールする必要があります。 Debianライクの場合:







 sudo apt install proot qemu-system
      
      





これで、保存されたバックアップでtwitを作成できます...







 sudo proot -q qemu-arm -S /home/user/backup_raspbian
      
      





必要な変更を加えます。 たとえば、上記で実行することを提案した同じ更新。







 apt update && apt upgrade
      
      





アップデートをダウンロードしてインストールした後、 exit



シュートを終了し、メモリカードと同期できます。







 sudo rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/var/backups/*","/var/cache/apt/*","/var/lock/*","/var/tmp/*","/lost+found", "/home", "/etc/fstab"} /home/user/backup_raspbian /media/user/root2fs
      
      





このファイルはすでに各パーティションで個別に構成されているため、前述のrsyncコマンドに/ etc / fstab同期例外を追加したことに注意してください。







この場合、変更は2番目のパーティション(root2fs)と同期されます。 /boot/cmdline.txtでアクティブなパーティションを選択することにより、システムの元のバージョンと更新されたバージョンの両方から起動することができます。







そして、ネットワークを介して動作中のラズベリーと同期するのと同様に、このような同期をいじるのは面白かったですが、別のデバイスから制御する必要は不便です。 ミニコンピューターの立場を持っている場合、または配布キットを使用することを提案した場合は、もちろん、そのような事前原子の更新は非常に便利ですが、1つのデバイスの規模では意味がありません。 そして、スクリプトが自動的に更新されるのか、それともRaspbianから直接いくつかのスクリプトが2番目のパーティションにジャンプして更新し、ブートパーティションを変更するのかを考え始めましたが、その前に、既存のディストリビューションを検討することにしましたKodiでのメディアセンターの展開。 そして...







XBianの幸せ



xbianロゴ

XBianでどのように行ったのかはわかりませんが、これがまさに私が必要としているものです。 最初にインストールされたソフトウェアの数のバリエーションであるKodiの他のディストリビューションとは異なり、多くの最適化がメディアセンターとして機能するために特に適用されるのはXBianです。 XBianは、私が望んでいたものをリリースしました。







XBianはDebianに基づいており、Debianがローリングリリースを使用するように、パッケージは常に最新です。 さらに-テストブランチに更新して、安定したブランチに戻ることができます。







システムはBtrfsファイルシステムのパーティション上にあり、 F2FSと同様、コピーオンライトメカニズムを使用しますが、スナップショットの作成もサポートします。XBianメニューには、スナップショットを管理する便利なユーティリティと、スナップショットを自動的に作成する設定があります。 それでも同じように、一部のファイルが破損した場合、 Btrfsは即座にシステムを読み取り専用モードにしてシステムへのさらなる損傷を防ぎ、作業バージョンに復元およびロールバックする手段を提供します。 この場合、 Btrfsはシステムパーティションに最適な選択肢だと思います。RaspberryPiに接続されたファイルを含むフラッシュドライブでF2FSを使用することにしました。 フラッシュドライブにスナップショットは必要ありませんが、 Btrfsとは異なり、 F2FSのデータ厳密にシーケンシャルに書き込まれます。フラグメンテーションを心配することなく、セルにより均一な負荷を与えます。







XBianでは、サービスは最小量のmicroSD書き込み用に構成されているため、読み取り専用セクションがないことは無視できます。 最終的に、ストアは、もしあれば、メモリーカードの10年間の保証を与えてくれました-それを変更してください。







私にとって唯一の欠点は、XBianが初期化システムとしてupstartを使用することです。 systemdをscるのが習慣であり、私は冗談としてscりましたが、私はそれをはるかに快適に思っています。 ただし、これについて心配する必要はありません。開発者が初期化システムを変更しなければならない2014年以降、 upstartは開発されていません。







それから、Quadiと呼ばれるKodiのすばらしいプラグインを見つけました。 さまざまなトップから選択したり、目的の映画やシリーズを見つけてトレントテクノロジーを使用して視聴を開始したりできます。プラグインを見ると、この映画やシリーズをライブラリに保存できます。 さらに、ダウンロードしたファイルとそのリンクの両方を保存できます。作品をクリックすると、トレントからのダウンロードが開始されます。







Quasar Burstは、コンテンツの検索に使用するトレントトラッカーの設定を含むQuasarアドオンです。 既に人気のあるロシアのトレントトラッカー、たとえばrutorやrutrackerが既にあるため、ロシア語を話すユーザーにはQuasarが絶対に適しています。







UP: コメントでは、開発を止めたクエーサーのフォークElementum 推奨しました。 試してみることをお勧めします。







ロックバイパス



しかし、すべてが私たちが望むほど良くありません。 ご存知のように、Roskomnadzorはプロバイダーに、Minecraftまたはトレントトラッカーでダイナマイトを作成するためのレシピの形式でサイトのヒープをブロックすることを要求します。ブラウザーのアドオンの1つをインストールしてデスクトップ上のブロックをバイパスする必要がある場合、これはメディアセンターにとってそれほど単純ではありません。







すべてのトラフィックがTor、VPN、またはプロキシを介して送信される場合、これはダウンロード速度に影響します。 特にTorの場合。 したがって、ブロックされたアドレスのみのブロックをバイパスし、他のトレントユーザーに直接接続する必要があります。







信頼性と複雑さの度合いが異なるさまざまな回避策を見つけることができます。すべてのトラフィックではなく、特別に指定されたアドレスのリストに対してVPNを使用することにしました。







VPNサーバーを使用するか、どこかで購入するか、サービスantizapret.prostovpn.orgを使用できます。 このVPNをインストールするとき、このサイトがブロックされたもののリストにない場合、サイトへのトラフィックは直接行くはずですが、何らかの理由で私のRaspberry PiですべてのトラフィックがVPNをバイパスするため、私はそれを使用するアドレスを強制的に示しました少し後で。







OpenVPNをインストールするコマンド:







 sudo apt install openvpn
      
      





次に、OpenVPNを機能させるために、システムの起動時にtunカーネルモジュールを起動に追加する必要があります







 sudo echo "tun" >> /etc/modules
      
      





初めて手動でロードする







 sudo modprobe tun
      
      





antizapretからVPNを使用する場合、そこに保存されているantizapret.ovpnファイルをダウンロードし、 / etc / openvpn / client.confファイルとして保存し、VPN経由で送信する必要があるアドレスを追加しました







 route 195.82.146.214 255.255.255.255 vpn_gateway # rutracker route 185.112.157.181 255.255.255.255 vpn_gateway # nnm-club route 104.27.140.149 255.255.255.255 vpn_gateway # rutor route 104.24.106.53 255.255.255.255 vpn_gateway # kinozal
      
      





設定にredirect-gateway



で始まる行がないことが重要です。そうしないと、すべてのトラフィックがVPNを通過します。







ファイル/ etc / default / openvpnで、 OpenVPNの起動時にデフォルトで起動される構成を構成します。 AUTOSTART="all"



コメントをAUTOSTART="all"



か、 すべて指定clientの代わりに、つまり作成した構成で十分です。







OpenVPNを起動します。







 sudo service openvpn start
      
      





自動起動に追加する:







 sudo update-rc.d openvpn enable
      
      





また、サービストラッカーのブロックをバイパスするには、.t-ru.orgがコンソールでコマンドを実行し、 `exit



/etc/rc.local*に追加して 、ブート時にコマンドを自動的に実行します。







 iptables -t nat -A PREROUTING -p tcp -m tcp --dport 80 -d 195.82.146.120/30 -j DNAT --to-destination 163.172.167.207:3128
      
      





それはすべてのようですか? しかし、ありません。 ブロックされたリソースのIPアドレスを要求すると、Googleでアドレス8.8.4.4にアドレス指定されたDNSクエリがインターセプトされて変更されるため、プロバイダーが扱いにくいことが判明しました。 nslookupから得られるものを次に示します。







 nslookup rutracker.org Server:         8.8.4.4 Address:        8.8.4.4#53 Non-authoritative answer: Name:   rutracker.org Address: <ip >
      
      





さて、DNSCryptに切り替えるべき時が来ました。 このユーティリティは暗号化されたチャネルを介してDNSサーバーに接続するため、プロバイダーまたは別のMitMはパケットをリッスン、置換、またはフィルターできません。 ルーターにDNSCryptをインストールして起動し、すべてがゴージャスになりました。







その結果、最高の(少なくとも私の推測では)技術に基づいた膨大な量の利用可能なコンテンツを備えた素晴らしいメディアセンターを手に入れ、Raspberry Piを使用することでカスタマイズの大きな機会が開かれました。 HDMI-CECをサポートしていないテレビに接続している場合でも、リモコンを使用してメディアセンターを制御する赤外線レシーバーをインストールしたり、ジョイスティックを接続して古いゲームをプレイしたり、メディアセンターから別のデバイスに完全に変換したりできます。








All Articles