再起動後、/opt/etc/profile ファイルの内容をロードします。

再起動後、/opt/etc/profile ファイルの内容をロードします。

OpenWrtリポジトリが接続されているBusyBox v1.19.4を実行しているZyXEL NAS326ネットワークドライブがあります。再起動するたびに、システムはOpenWrtバイナリパスを表示できず、コマンド履歴も覚えていません。コマンドを実行. /opt/etc/profileして再起動しても、コマンド履歴はなく、OpenWrtバイナリへのパスもありません。このNASのデフォルトコンソールはashです。コンソールに常にアクティブなコマンド履歴があり、パスからOpenWrt bianriumにアクセスできるようにシステムを設定するにはどうすればよいですか?

答え1

したがって、最初にbusybox / ashが履歴を保存するかどうかはコンパイル時オプションです。つまり、.ash_history少なくとも1つのコマンドを実行した後にホームディレクトリにファイルがなければできることはあまりありません。実際にその機能を持っているもう一つのシェルです。私はこれがとにかくあなたのユースケースに合理的であるかもしれないと言いたいと思います。 「コマンドを記録したい」は、「何かを修正するためにこのシェルを何度も使用しました」と言いますash。薄くて軽くなるためのものであり、デスクトップケースを完全に置き換えるためのものではありません!

それから:

コマンドを使用して/home/test.txtファイルを生成しtouch /home/test.txt、その中に12345の内容を入力しました。再起動後にファイルが消える

ホームディレクトリが永続的ではないので、実際にシェル履歴を保存する場所はありません! (通常はに保存されますが~/.ash_history、ご存知のように永続ストレージに書き込まれず、RAMオーバーレイに残っている可能性があり、再起動時に保存できません。)

幸いなことに、ほとんどのシェルではHISTFILE環境を使用して異なる場所を設定できます。 Busyboxはこれを文書化しませんが、少なくとも現在のバージョンのコードでは変数を尊重します。しかし、NASでどのバージョンとオプションが実行されているかは誰も知りません! (このようなシステムでは、zshのように単純化されていないシェルを実行したいかもしれないというもう1つのシグナルです。)

コンソールに常にアクティブなコマンド履歴があり、パスからOpenWrt bianriumにアクセスできるようにシステムを設定するにはどうすればよいですか?

/ etcに継続的に書き込むこともできないので同意します。そうすることができず、どうすればよいのかを理解するまでは、おそらくできないことになるでしょう。 (再起動時にルートファイルシステムが同じ工場状態にあることを常に知っている場合は、消費者デバイスの信頼性が低下し、セキュリティの脆弱性が公開された後に絶えず不正アクセスを取得することがより困難になる可能性があります。明らかにNASはそうではありません。しなければならないターミナルサーバーになろう! )

このopenwrtリポジトリがどのように機能するのかわかりませんが、独自のドキュメントがあります。この方法でインストールされたソフトウェアは/etcの代わりに/opt/etcを見る可能性が高いので、ユーザーのシェルを変更できる場合(使用chsh)、openwrtを介して/opt/binに何かがインストールされている場合は、少なくとも構成できます。

それ以外に、あなたができることは、SSHサーバー(またはログインに使用するすべてのもの)で2つの環境変数(たとえば、HISTFILEユーザーがアクセスできる場所を指す)を指定し、それが持続することを望むだけです。再起動し、実行したいコマンド - その後、次のことができます。

env 'HISTFILE=/path/to/persistent/storage/on/NAS/.zsh_history' \
    ssh \
      -o SendEnv=HISTFILE \
      -t \
      youruser@NAS_hostname_or_IP_address \
      /path/to/openwrt-installed/zsh/on/NAS/zsh

お使いのコンピュータで 1. openwrt と共にインストールされた「正しい」シェルを使用していることを確認します。zshこれは確かに記録を保存します。 2. 履歴を保存するために永続パスを使用します。


問題は、/etc/profileファイルテンプレートがどこから来たかです。最初はPATHセクションにエントリがあり、PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:${BASE_PATH}/sbin:/usr/local/zy-pkgs/bin:${BASE_PATH}/htp修正後に次のように見えました。PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:${BASE_PATH}/sbin:/usr/local/zy-pkgs/bin:${BASE_PATH}/htp:/opt/bin再起動後、すべてが以前の状態に戻りました。

Zyxelがオペレーティングシステムイメージを構築する方法を確認する必要があります。チャンスを取ったのはまさにあなたです。できる同じことを行い、必要な修正を加えてください!

これマーベルデモ(SoC(NASの基盤となる中央処理装置)を構築する会社であるMarvellは、OpenEmbedded/Yoctoツリー全体を提供することで、インテグレータ(Zyxelなど)が正確なユースケースに合わせたLinuxディストリビューションを構築できると述べています。これを使用し、必要なレイヤーを修正し、独自のソフトウェアを追加し、それを使用してイメージを構築する可能性はほとんどありません。上記のケースには非常に良い理由があります。署名されたファームウェアのみを起動できるように、SecureBootをロックした可能性が高いです。ないシステムを区別できます。

したがって、修正された/ etcを使用してこのようなイメージをビルドすると、署名できないため、起動できない可能性があります。それはすべてZyxelがどのようにシステムにロックされているかに依存します。


正直なところ、私はそうです。いいえ小型NASデバイスのルートシステムは、私が望むシェルの記録は正しいですか?完全なデスクトップと同様に、インタラクティブシェルを実行できるように、ベンダーのアプリストアにコンテナまたは類似の隔離された環境をインストールできるかどうかを理解しようとしているようです。しかし。正直に言う。 RAMはわずか512MBの1.3GHzシングルコアARMv7です(ストレージデバイスに比べて非常に小さい)。 ZyxelがDMAネットワークを介したストレージアクセスの最適化に多くの努力をしたことを願っています。それ以外の場合は、すでにファイルにアクセスするときに通常のネットワーク速度のバランスを取る必要がある重い負担を抱いており、これがあなたが選ぶプラットフォームだとは思わないでしょう。 。走りたい何もない他の人。


1将来の組み込み開発の読者のために独自のビジボックスをコンパイルします。コンパイル時間オプションはですENABLE_FEATURE_EDITING_SAVEHISTORY

関連情報