Gentooオーバーレイのeclassファイルのエラーを解決するには?

Gentooオーバーレイのeclassファイルのエラーを解決するには?

   (次からクロスポストGentooフォーラム)

エラーを修正するためにファイルを編集してみました.eclassが、どこかのキャッシュで編集内容が失敗したようです。emerge --config =dev-db/mysql-5.7.12MySQLバージョンのインストールを完了するために実行する必要があるコマンドを実行すると、初期エラーが発生します。コマンドは次のように失敗します/var/log/mysql/mysqld.err

[ERROR] Too many arguments (first extra is
  ''--init-file=/var/tmp/portage/dev-db/mysql-5.7.12/temp/tmp.COaXRiJpf9'').

私のシステムはこのファイルの2つのバージョンを見つけましたmysql-multilib-r1.eclass。 1つはデフォルトのGentooリポジトリ(優先順位-1000)にあり、/usr/portage/eclass/もう1つはオーバーレイリポジトリ(+50)にあります。カバレッジストアは次のように保持されます。素人オーバーレイ名は 'mysql'。 - 私はこれをMySQL 5.7にアクセスするために使用します。まだデフォルトのリポジトリに達していません。。 - 特に953行でエラーを追跡しました。上書きされたファイルのバージョン、またはメジャーバージョンの場合は945:

initialize_options="--initialize-insecure  '--init-file=${sqltmp}'"

たぶん一重引用符--init-fileはオプションが正しい引数として解釈される可能性があります。ただ削除すればいいです。しかし、これは何も機能しません。このファイルの編集内容(編集したバージョンに関係ありません)は無視されます。そこにキャッシュされたコンテンツがある場合に備えてコンテンツを削除するように注意を払いました/var/tmp/portage。また、ストレージの同期を試みました。

layman --sync ALL
emerge --sync

同期しようとしています。今後ファイルの両方のバージョンとポスト編集の両方を編集します。この場合、デフォルトバージョンの編集内容は削除されますが(異常に)バージョンは上書きされません。どちらも役に立ちませんでした。

これGentoo開発マニュアルの推奨事項「オーバーレイeclassを更新した後、すべての関連オーバーレイファイルを手動でタッチする」必要があるかもしれません。私はまた、次のディレクトリの下のすべてのファイルに触れました。

/usr/portage/dev-db
/usr/portage/eclass
/usr/portage/virtual/mysql
/var/lib/layman/mysql/dev-db
/var/lib/layman/mysql/eclass
/var/lib/layman/mysql/metadata
/var/lib/layman/mysql/profiles
/var/lib/layman/mysql/virtual

emerge次にコマンドを実行すると、まず次のものが出力されます。

Performing Global Updates
(Could take a couple of minutes if you have a lot of binary packages.)
  .='update pass'  *='binary update'  #='/var/db update'  @='/var/db move'
  s='/var/db SLOT move'  %='binary move'  S='binary SLOT move'
  p='update /etc/portage/package.*'
/var/lib/layman/mysql/profiles/updates/3Q-2014.

しかし、まだ私の編集内容は無視されました。 -.eclass編集内容を実際に適用するには、このファイルをどのように編集しますか?または、このようなエラーをどのように修正できますか?

ベストアンサー1

2つの可能な方法。最初は簡単ですが、テストされていません。

簡単な方法:サポートされているバージョンをインストールしてサポートされていないバージョンにアップグレードする

この場合、エラーは次のように発生します。きれいワンインストールサポートされていませんMySQLのバージョン。emerge --configこれは、新規インストール(アップグレードではない)の後に実行されたコマンドを実行したときに発生します。したがって、最も簡単な解決策は次のとおりです。最初デフォルトリポジトリでサポートされている以前のバージョンのMySQLをインストールし、オーバーレイでサポートされていない最新バージョンにアップグレードします。だから:

$ emerge --ask --verbose dev-db/mysql

サポートされているバージョンをインストールする必要があることを確認してください。実行し、指示に従ってインストールを完了します。

$ emerge --config =dev-db/mysql-SUPPORTED.VERSION

これで、オーバーレイストアでサポートされていない最新バージョンのブロックを解除し、そのバージョンにアップグレードします。

$ emerge --ask --verbose dev-db/mysql

提供されているバージョンを確認してやり直してください。まだテストしていませんが、難しい方法で行いました。

難しい方法: eclass オーバーライドとエラー処理

これ開発者マニュアルには次のように記載されています。、 'ebuildがエクスポートした関数を定義している場合、その関数はすべてのeclassバージョンよりも優先順位が高くなります。これは、eclassで定義されたデフォルト値をオーバーライドするために使用できます。だからコピーmysql-5.7.12.ebuild「mysql」オーバーレイからローカルオーバーレイ(私の場合は優先順位+1000)まで変更し、オーバーレイを追加します。

pkg_config() { # test override of mysql-multilib-r1_pkg_config
    die "ebuild override works!";
}

Portageがebuildを実行していることを確認してください:

$ equery which dev-db/mysql
/usr/local/portage/dev-db/mysql/mysql-5.7.12.ebuild

それからテストしてみてください。

$ emerge --ask --unmerge dev-db/mysql
$ rm --recursive /var/lib/mysql/* # clean away any remnants
$ emerge --ask --verbose dev-db/mysql
    ⋮                                     # waiting while it compiles …
$ emerge --config =dev-db/mysql-5.7.12

もちろん、「ebuild override Works!」というメッセージで終了します。

これでebuild、ファイルを編集して死ぬよりも便利な操作を実行し、上記の最後のコマンドをもう一度実行すると、次のようになります。まだ死も同じメッセージで来る。 Fortageのキャッシュはまだ問題です。ただし、これはebuildファイルであり、独自のローカルオーバーレイにあるため、eclass適切なリビジョンを使用してキャッシュの問題を簡単に解決できます。ebuild

$ pwd
/usr/local/portage/dev-db/mysql
$ cp mysql-5.7.12.ebuild mysql-5.7.12-r1.ebuild

実際の修正のためにリビジョンファイルをmysql-5.7.12-r1.ebuild編集します。pkg_config

pkg_config() { # modified from mysql-multilib-r1.eclass
               # of http://gpo.zugaina.org/Overlays/mysql
    einfo "Overriding mysql-multilib-r1_pkg_config from this ebuild"
  # initialize_options="--initialize-insecure  '--init-file=${sqltmp}'" # fix:
    initialize_options="--initialize-insecure   --init-file=${sqltmp} "
}

その後、もう一度テストしてください。

$ rm --recursive /var/lib/mysql/* # clean away any remnants
$ emerge --ask --verbose dev-db/mysql
    ⋮                                     # waiting while it recompiles …
$ emerge --config =dev-db/mysql-5.7.12-r1

pkg_configそれでもエラーがあることがわかりました。

[ERROR] Failed to open the bootstrap file /var/tmp/portage/ … tmp.PD6hqOe8kA
[ERROR] 1105  Bootstrap file error, return code (0). Nearest query: …

ファイル権限の問題かもしれません。とにかく、失敗したコマンドをrootとして再実行すると機能します。

$ /usr/sbin/mysqld --basedir=/usr \
  --loose-skip-grant-tables --loose-skip-host-cache --loose-skip-name-resolve \
  --loose-skip-networking --loose-skip-slave-start --loose-skip-ssl \
  --loose-skip-log-bin --loose-skip-relay-log --loose-skip-slow-query-log \
  --loose-skip-external-locking --loose-skip-log-slave-updates \
  --user=mysql --datadir=/var/lib/mysql --tmpdir=/tmp/ --initialize-insecure \
  --init-file=/var/tmp/portage/dev-db/mysql-5.7.12-r1/temp/tmp.PD6hqOe8kA

次に、Pythonコードを手動で解釈して実行します。

$ chown -R mysql:mysql /var/lib/mysql
$ chmod 0750 /var/lib/mysql
$ /usr/sbin/mysqld
  --loose-skip-grant-tables --loose-skip-host-cache --loose-skip-name-resolve \
  --loose-skip-networking --loose-skip-slave-start --loose-skip-ssl \
  --loose-skip-log-bin --loose-skip-relay-log --loose-skip-slow-query-log \
  --loose-skip-external-locking --loose-skip-log-slave-updates \
  --user=mysql --log-warnings=0 --basedir=/usr --datadir=/var/lib/mysql \
  --max_allowed_packet=8M --net_buffer_length=16K \
  --default-storage-engine=MyISAM \
  --socket=/var/run/mysqld/mysqld99.sock \
  --pid-file=/var/run/mysqld/mysqld99.pid \
  --tmpdir=/tmp/ &

ソケットファイル(上記)が作成されたことを確認してください。それから:

$ /usr/bin/mysql --socket=/var/run/mysqld/mysqld99.sock -hlocalhost -e \
  "UPDATE mysql.user SET Password = PASSWORD('your-password-here') WHERE USER='root'; FLUSH PRIVILEGES"

ここでは失敗します。

ERROR 1054 (42S22) at line 1: Unknown column 'Password' in 'field list'

修正が見つかりました。スタックオーバーフロー:

$ /usr/bin/mysql --socket=/var/run/mysqld/mysqld99.sock -hlocalhost -e \
  "UPDATE mysql.user SET authentication_string = PASSWORD('your-password-here') WHERE USER='root'; FLUSH PRIVILEGES"

最後に終了しますmysqld

$ kill $(< /var/run/mysqld/mysqld99.pid ) # from the --pid-file above

それはすべてです。 MySQLをランレベルに追加したり、手動で起動および停止したりできます。

$ /etc/init.d/mysql start
$ /etc/init.d/mysql stop

おすすめ記事