2012-05-10 4 views
0

私たちは通常、システムのインストール後に新しいFreeBSDマシンをセットアップするためにカスタムスクリプトを使用します。これは、ポートツリーからツールをインストールし、システム環境を設定します。 また、新たにインストールされたFreeBSD-8.2マシンをfreebsd-updateによってFreeBSD-8.2p3に自動更新する必要があります。私が知っているように、freebsd-updateは "cron"オプションなしでシェルスクリプトから実行することはできません。だから私は、FreeBSD-更新カンニングするカスタムプログラムをプリロードしてみてください:この微調整でシェルスクリプトからfreebsd-updateをしようとしているときにttyにふりをする方法は?

${CAT} > /tmp/isatty.c  <<EOF                                               
int isatty(const int fd) { return 1; }                                            
EOF                                                     
${CC} -shared -fPIC -o /tmp/isatty.so  /tmp/isatty.c                                           
${ENV} LD_PRELOAD=/tmp/isatty.so LESS="-E" ${FREEBSD_UPDATE} fetch install < /dev/null 

を、私はsucessfully私のカスタムスクリプトからはFreeBSD-updateを実行することができますが、アップデートサーバからFreeBSDのインストーラ後にフェッチされたファイルは、Iこのエラーメッセージが表示されます:

Fetching metadata signature for 8.3-RELEASE from update5.FreeBSD.org... done. 
Fetching metadata index... done. 
Fetching 2 metadata files... gunzip: standard input is a terminal -- ignoring 
metadata is corrupt. 

私はこれを解決するチャンスがありますか?

+0

FreeBSDでこれが可能かどうか、または実際に役立つかどうかは不明ですが、Linuxでは '/ dev/tty'からスクリプトの入力をリダイレクトできます –

答えて

0

LD_PRELOADは、freebsd-update spawnを含むすべてのプロセスによっても選択されます。より良い解決策は、ユーザーの操作を必要とせずにコマンドラインから実行できるように、freebsd-updateという修正バージョンを作成することです。 empty - run processes and applications under pseudo-terminal (PTY)

この方法では、スクリプトからの可能な開始はFreeBSD-更新する必要があります:

0

このユーティリティは、何が必要かもしれません。

関連する問題