問題タブ [rootfs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - NFS rootfs の Busybox SUID
Beagle Bone ボード用の Linux システムを下から構築しています。バニラ カーネルをコンパイルし、基本的なルート ファイル システムを構築しましbusybox
た。システムは U-boot で起動されますが、rootfs
は Linux PC 上にあり、NFS 経由でエクスポートされます。
U ブートbootargs
は次のとおりです。
su
root 以外のユーザーのために作業しようとしたときに問題が発生しました。問題を回避するために、インターネット上の人々はバイナリのsuid
ビットを設定することを提案しています。busybox
その後:
および検証:
エラーが発生しました。カーネルが起動し、通常のメッセージがすべて表示されますが、最後にスタックしてlogin
行が表示されません。ブート シーケンスの最後の数行を次に示します。
フラグを削除すると、正常に戻ります。
Beagle Bone ボード自体で実行中のシェル内からフラグを設定すると、実行直後にシェルが応答を停止しchmod
ます。NFS が rootfs をエクスポートする方法に関係していると思われますが、推測にすぎないため、適切な説明と可能な解決策が役立つでしょう。
linux - switch_root ビジーボックスの初期化の問題?
私は、ビジーボックスを備えた組み込み Linux 環境にいます。switch_rootの使用方法を学ぼうとするいくつかの 投稿を読みました。私はこれを試しました:
switch_root
ヘルプが表示され、新しいログインが表示されます。
ログインすると、newrootが読み込まれておらず、古いものがまだ残っています。これは、ある種の init スクリプトからではなく、コマンド ラインから直接このコマンドを実行しているためですか?
この記事を読んだところ、実行する前に他の手順を実行していることがわかりましたswitch_root
。
まず、これは私を混乱させます。を実行する前にこれらのコマンドを実行する必要があるのはなぜswitch_root
ですか? 私のためにこれをしませswitch_root
んか?
とにかく、先に進んで、最初にそれらを実行してから、switch_root
コマンドを実行してみました。ただし、これは物事を完全にホースでつなぎます。
dev のマウントを移動したため、init が実行され、シリアル ポートに getty を配置しようとすると、見つからないように見えますか? 錯乱........
ここで何か基本的なことが欠けていswitch_root
ますか? または、単にコマンドラインの変更が必要ですか?
docker - Docker 1.6.0以降のホストマシンのコンテナのrootfsはどこにありますか
Docker v1.4.1では、ホスト マシン上のコンテナーのrootfsを見つけることができます。例えば:
しかし、Docker v1.6.0/var/lib/docker/devicemapper/mnt/911d7ac8fca78b2beca8752ec89d80c06a1ea1dd8a65099d074ed40eec0c6cce
では、それが空であることがわかりました。
v1.6.0はどこにありますか?
すでに使用されているデバイスマッパー
linux - ルート ファイルシステムの同期
いくつかのテスト用コンピューターがあり、それらのルート ファイルシステムのコンテンツを自動的に同期したいと考えています。それを行うにはどのような方法がありますか?ユーザー空間のアプリケーションとデータだけでなく、カーネルも変更されます。
deb - クロスコンパイルされたdebianパッケージをインストールして、dpkgで「footfs」を偽装する
私が持っているセットアップは次のようなものです: amd64 (pc) とarmelx (ARM) 用にコンパイルされたライブラリの 2 つのセットがあります。どちらも、ビルド マシンで一部のソフトウェアをクロスコンパイルするために使用されます。
最初のもの (amd64) は、apt-repository を更新apt-get install
してビルド マシンで使用することにより、問題なく更新できます。ただし、ARM 用のパッケージは、別のディレクトリへのインストールをサポートしていないため、apt でインストールしたくありません。デフォルトのディレクトリにインストールすると、バージョンが共存できませんでした。右?
dpkg -x
これまでのところ、パッケージの新しいバージョンが存在するたびに、専用の「偽の」footfsディレクトリに展開するだけで、ビルド マシンが手動で更新されていました。これは、コンパイラが他の SW をクロスコンパイルするときにも参照する場所です。問題は、これらの抽出されたパッケージまたはそのバージョンに関する情報がシステムのどこにもないことですよね? ステータスファイルにあるはずです。
私の考えは、これらのパッケージをこの footfs dir にインストールすることでしたdpkg -i <package.deb> --root=<rootfs>
。これは機能しますか?debパッケージにはpost/pre-remove/installスクリプトがないため、そうではないと感じています。また、これが初めてでも機能するためには、 rootfsディレクトリ構造はどのように見える必要があり、何を含める必要がありますか? これを支援するツールはありますか?
ありがとう。
linux - デバイス マッピングが変更されたときに rootfs の正しい bootargs を作成する方法
SDカードまたはemmcを使用して起動できるimx.6 sabresdボードを使用しています。u-boot を使用して両方で Linux を正しく起動し、適切な bootargs に rootfs の正しい場所を指定できます。ただし、eMMC を使用して Linux を起動すると、デバイス名は、sd カードが挿入されている場合は /dev/mmcblk1 から、sd カードが挿入されていない場合は /dev/mmcblk0 に変更されます。
使用するデバイスがわからない場合、bootargs パラメーターを使用して、u-boot で正しい root= を指定するにはどうすればよいですか?
もちろん、u-boot でいくつかのテストを実行して、sd カードが挿入されているかどうかを確認し、bootargs パラメータを変更することもできます (単なるアイデアですが、まだテストされていません)。助言がありますか?
docker - Dockerコンテナのrootfsサイズはどのように決定されますか?
あるシステムでは、Docker コンテナーのディスク サイズは次のようになります。
rootfs のサイズが 99G であることがわかります。別のシステムでは、Docker コンテナーのディスク サイズは次のようになります。
rootfs のサイズはわずか 9.8G です。
Dockerコンテナのrootfsサイズはどのように決定されますか? rootfs サイズの値を変更するにはどうすればよいですか?
linux - busybox を BFLT 実行可能ファイルとしてコンパイルする
no-mmu アーキテクチャ用の busybox rootfs をコンパイルしています。このコンパイルからの出力は、ELF 32 ビット LSB 実行可能ファイルです。
file _install/bin/busybox:
ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.32,
BFLT 実行可能ファイル (uclinux と同じ) が必要です。ELF を BFLT に変換したり、busybox から BFLT ファイルを生成するにはどうすればよいですか?
Buildrootなしでこれを行うことは可能ですか?
追加情報:
- ツールチェーン arm-none-linux-gnueabi を使用しています
- 静的実行可能ファイルとしてビルド
- オプション強制NOMMUビルド有効