(다음에서 교차 게시됨젠투 포럼)
오류를 수정하기 위해 파일을 편집해 보았 .eclass
으나 어딘가의 캐시에 의해 편집 내용이 실패한 것 같습니다. emerge --config =dev-db/mysql-5.7.12
MySQL 버전 설치를 완료하기 위해 실행해야 하는 명령을 실행할 때 초기 오류가 발생합니다 . 명령이 다음과 같이 실패합니다 /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'').
내 시스템에서 이 파일의 두 가지 버전을 찾았습니다 mysql-multilib-r1.eclass
. 하나는 기본 Gentoo 저장소(우선순위 -1000)에 있고 /usr/portage/eclass/
다른 하나는 오버레이 저장소(+50)에 있습니다. 적용 범위 저장소는 다음에 의해 유지됩니다.평신도오버레이 이름은 'mysql'. — 저는 이것을 MySQL 5.7에 액세스하는 데 사용합니다.아직 기본 저장소에 도달하지 않았습니다.. — 특히 953행에서 오류를 추적했습니다.덮어쓴 파일 버전, 또는 메이저 버전의 경우 945:
initialize_options="--initialize-insecure '--init-file=${sqltmp}'"
어쩌면 작은따옴표로 인해 --init-file
옵션이 올바른 인수로 해석될 수도 있습니다. 그냥 삭제하면 돼요. 하지만 이렇게 하면 아무 것도 작동하지 않습니다. 이 파일에 대한 편집 내용(편집한 버전에 관계 없음)은 무시됩니다. 거기에 캐시된 콘텐츠가 있을 경우를 대비해 콘텐츠를 삭제하도록 주의를 기울였습니다 /var/tmp/portage
. 또한 저장소 동기화를 시도했습니다.
layman --sync ALL
emerge --sync
동기화하려고 하는데앞으로파일의 두 버전과 사후 편집을 모두 편집합니다. 이 경우 기본 버전에 대한 편집 내용이 삭제되지만 (이상하게도) 버전을 덮어쓰지는 않습니다. 둘 다 도움이 되지 않았습니다.
이것젠투 개발 매뉴얼 권장사항"오버레이 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
두 가지 가능한 방법. 첫 번째는 더 쉽지만 테스트되지 않았습니다.
쉬운 방법: 지원되는 버전을 설치하고 지원되지 않는 버전으로 업그레이드
이 경우 오류는 다음에서 발생합니다.깨끗한하나 설치지원되지 않음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
파일을 편집하여 죽는 것보다 더 유용한 작업을 수행한 다음 위의 마지막 명령을 다시 실행하면 다음을 볼 수 있습니다.아직죽음도 같은 메시지와 함께 온다. 포티지 캐싱은 여전히 문제입니다. 그러나 이것은 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: …
파일 권한 문제일 수 있습니다. 어쨌든 실패한 명령을 루트로 다시 실행하면 작동합니다.
$ /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
답변2
여기서 무엇을 하고 있는지 완전히 확신할 수는 없지만 중요한 점은 다음과 같습니다.
실행하기 전에 mysql을 다시 시작하지 않으면 --config
사용하는 구성을 오버레이의 eclass에서 읽지 않지만파일에서/var/db/pkg/*/*/environment.bz2
패키지를 설치하는 데는 정말 귀여운 트릭이 있습니다. 예를 들어 ebuild를 작성하고 변수를 내보내는 경우 src_compile
... 해당 변수는 여전히 사용할 수 있습니다.pkg_config
파일 을 자세히 살펴보면 environment.bz2
모든 mysql eclass 함수가 인라인으로 표시됩니다.
따라서 다른 답변에서 언급했듯이 업그레이드하면 문제가 해결되는 것 같습니다.
하지만 설치된 eclass 코드 사본을 교체하면 문제가 해결됩니다. :)