Это может быть немного надумано, но для меня это выводит одну точку:
vim -En '+a|.x' '+s/x//' '+p' '+q!' -
(Вы упомянули гольф, так что, возможно, это не сработает для вас, так как добавляет относительно большое количество символов , Обязательно подробно опишите любые конкретные ограничения, если они у вас есть.)
Два возможных пути. Первый вариант проще, но не тестировался:
Ошибка в этом случае возникает во время чистой установки неподдерживаемой ] версия MySQL. Это происходит при запуске команды emerge --config
, которая запускается после чистой установки, а не после обновления. Поэтому самый простой обходной путь - это, вероятно, сначала установить более старую поддерживаемую версию MySQL из основного репозитория; затем обновите его до более поздней неподдерживаемой версии из оверлея. Итак:
$ emerge --ask --verbose dev-db/mysql
Убедитесь, что он запрашивает установку поддерживаемой версии. Дайте ему поработать, затем завершите установку в соответствии с инструкциями:
$ emerge --config =dev-db/mysql-SUPPORTED.VERSION
Теперь снимите маску с более поздней неподдерживаемой версии из оверлейного репозитория и обновитесь до нее:
$ emerge --ask --verbose dev-db/mysql
Проверьте версию, которую она предлагает, и снова дайте ей поработать. Это должно сработать, хотя я это не тестировал; вместо этого я сделал это трудным путем.
В руководстве разработчика сказано : «Если 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
для чего-то более полезного, чем смерть, а затем повторите последнюю команду выше, вы увидите, что он по-прежнему умирает с тем же сообщением. Кеш Portage остается проблемой. Но поскольку это файл ebuild
, а не экласс
, и поскольку он находится в вашем собственном локальном оверлее, вы можете легко обойти кеш, используя правильный 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
Я не совсем понимаю, что вы здесь делаете, но следует отметить важный момент:
Если вы не появляетесь повторно mysql перед запуском - config
, конфигурация, которую вы используете, будет считана не из любого из ваших эклассов в оверлее, а из файлов в / var / db / pkg / * / * / environment.bz2
При установке пакета можно сделать несколько действительно забавных трюков, например, если вы напишете ebuild и экспортируете переменную в src_compile
... эта переменная, скорее всего, все еще будет доступна во время pkg_config
Если вы попробуете найти этот файл environment.bz2
, вы увидите все встроенные функции mysql eclass.
Следовательно, как вы указали в своем другом ответе, обновление, похоже, исправляет это.
Но он исправляет это, заменяя установленные копии кода eclass :)