Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Проблема с freebsd-update #351

Closed
Peter2121 opened this issue Nov 12, 2018 · 17 comments
Assignees

Comments

@Peter2121
Copy link

@Peter2121 Peter2121 commented Nov 12, 2018

FreeBSD version ( uname -a ): FreeBSD 11.2-RELEASE-p4
CBSD version ( cbsd version ): 11.2.1

Имеется jail c baserw=1 и версией 11.0-RELEASE-p1.
Следую процедуре https://www.bsdstore.ru/en/12.0.x/wf_jupgrade_ssi.html, захожу в jail и пытаюсь сделать freebsd-update fetch
С удивлением вижу, что программа пытается обновить не 11.0, а 11.2 :

freebsd-update fetch

src component not installed, skipped
Looking up update.FreeBSD.org mirrors... 2 mirrors found.
Fetching metadata signature for 11.2-RELEASE from update4.freebsd.org... done.
Fetching metadata index... done.
Inspecting system... done.
Preparing to download files... done.

The following files will be updated as part of updating to 11.2-RELEASE-p4:
/bin/freebsd-version
/usr/include/netinet6/in6.h
/usr/include/netinet6/ip6_var.h
/usr/include/x86/specialreg.h
/usr/sbin/wpa_supplicant
/usr/share/man/man4/inet.4.gz
/usr/share/man/man4/inet6.4.gz
/usr/share/man/man4/tcp.4.gz
/usr/share/man/mandoc.db

Аналогичная ситуация в случае запуска freebsd-update -b /cbsd/jails-data/jail1-data ...
Кто виноват и что делать?

@olevole olevole self-assigned this Nov 12, 2018
@olevole

This comment has been minimized.

Copy link
Collaborator

@olevole olevole commented Nov 12, 2018

видимо утилита freebsd-update ориентируется на uname, что нехорошо для jail ;-( Надо подумать, можно ли тут что-то сделать, кроме как написать об этом на страничке про обновления.

@Peter2121

This comment has been minimized.

Copy link
Author

@Peter2121 Peter2121 commented Nov 12, 2018

И как же теперь обновлять jails c baserw=1? У меня их десятка полтора...
:(

@Peter2121

This comment has been minimized.

Copy link
Author

@Peter2121 Peter2121 commented Nov 12, 2018

А не исчезла ли в jails переменная окружения UNAME_r?
https://www.freebsd.org/cgi/man.cgi?query=uname&sektion=3&n=1
Логично было бы устанавливать ее при старте в значение, соответствующее версии базы jail...

@olevole

This comment has been minimized.

Copy link
Collaborator

@olevole olevole commented Nov 12, 2018

Так-с, что там в /etc/make.conf контейнера?

У меня как я вспомнил, 100 лет как работает следующая логика (при applytpl=1)

a) если хостер и контейнер разные, применяем правку в make.conf

Об этом свидетельствует запись при старте контейнера вида:

Applying /usr/ports/CHANGES -A28 ^20140930 work-around

и результат работы выглядит в контейнере, в файле /etc/make.conf:

$ root@gizmo:~ # uname -a
FreeBSD gizmo.my.domain 13.0-CURRENT FreeBSD 13.0-CURRENT r340319 GENERIC_CBSD  amd64

$ cbsd jls display=jname,ver
NODENAME              JNAME       VER
gizmo.my.domain       consul      13      
gizmo.my.domain       db          13      
gizmo.my.domain       jail1       11.2
...

% cbsd jlogin jail1

jail1:/root@[2:24] # uname -a
FreeBSD jail1.my.domain 11.2-RELEASE FreeBSD 11.2-RELEASE amd64

jail1:/root@[2:24] # cat /etc/make.conf
WRKDIRPREFIX=/tmp


OSVERSION+= 1102000                     # CBSD autotpl for CHANGES 20140930
UNAME_ENV+= OSVERSION=1102000           # CBSD autotpl for CHANGES 20140930
UNAME_ENV+= UNAME_s=FreeBSD                     # CBSD autotpl for CHANGES 20140930
UNAME_ENV+= UNAME_r=11.2-RELEASE                        # CBSD autotpl for CHANGES 20140930
UNAME_ENV+= UNAME_v="${UNAME_s} ${UNAME_r}"     # CBSD autotpl for CHANGES 20140930
.MAKEFLAGS: ${UNAME_ENV}                        # CBSD autotpl for CHANGES 20140930
MAKE_ENV+= ${UNAME_ENV}                 # CBSD autotpl for CHANGES 20140930
CONFIGURE_ENV+= ${UNAME_ENV}                    # CBSD autotpl for CHANGES 20140930
SCRIPTS_ENV+= ${UNAME_ENV}                      # CBSD autotpl for CHANGES 20140930

@Peter2121

This comment has been minimized.

Copy link
Author

@Peter2121 Peter2121 commented Nov 13, 2018

[root@bsdjail ~]# uname -a
FreeBSD bsdjail.bimp.fr 11.2-RELEASE-p4 FreeBSD 11.2-RELEASE-p4 #0: Thu Sep 27 08:16:24 UTC 2018 root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC amd64
[root@bsdjail ~]# cbsd jlogin jail1
Last login: Mon Nov 12 18:01:14 on pts/3
FreeBSD 11.2-RELEASE-p4 (GENERIC) #0: Thu Sep 27 08:16:24 UTC 2018
jail1:/root@[10:31] # uname -a
FreeBSD jail1.domain.local 11.2-RELEASE-p4 FreeBSD 11.2-RELEASE-p4 #0: Thu Sep 27 08:16:24 UTC 2018 root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC amd64
jail1:/root@[10:31] # freebsd-version
11.0-RELEASE-p1
jail1:/root@[10:31] # cat /etc/make.conf
WRKDIRPREFIX=/tmp

@olevole

This comment has been minimized.

Copy link
Collaborator

@olevole olevole commented Nov 13, 2018

@Peter2121 а есть клетки с baserw=0 ?

Дай, плз,вывод этих команд:

  1. cbsd jls display=jname,baserw,ver,applytpl

  2. cbsd jexec jname='*' file -s /bin/sh

  3. cbsd jexec jname='*' uname -r

@olevole

This comment has been minimized.

Copy link
Collaborator

@olevole olevole commented Nov 13, 2018

есть подозрение, что это baserw=1 специфик, тк там не менеджерится база и надо по ELF version анализировать, например с /bin/sh

@Peter2121

This comment has been minimized.

Copy link
Author

@Peter2121 Peter2121 commented Nov 13, 2018

Все те которые baserw=0 имеют одинаковые версии с хостами, они на других серверах.

  1. JNAME BASERW VER APPLYTPL
    jail1 1 11.0 1
  2. /bin/sh: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 11.0 (1100122), FreeBSD-style, stripped
    3.11.2-RELEASE-p4

Корректно показывает версию /bin/freebsd-version :
11.0-RELEASE-p1

@Peter2121

This comment has been minimized.

Copy link
Author

@Peter2121 Peter2121 commented Nov 16, 2018

Ну пока что обхожу проблему с помощью
freebsd-update -b /iocage/tags/rmailclone/root --currently-running 11.1-RELEASE-p15 -r 11.2-RELEASE upgrade

@olevole

This comment has been minimized.

Copy link
Collaborator

@olevole olevole commented Nov 16, 2018

Я так-то понял что можно сделать, нужно ориентироваться по $data/bin/sh у клеток с baserw=1, иначе не понять что там за версия базы. И прыгать от нее. Поправлю наверное в районе выхов, пока руки не доходят

@olevole

This comment has been minimized.

Copy link
Collaborator

@olevole olevole commented Nov 16, 2018

Что-то типа

% file -s ~cbsd/jails-data/jail1-data/bin/sh
/bin/sh: ELF 64-bit LSB executable, x86-64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 13.0 (1300002), FreeBSD-style, stripped

вот 1300002 - это ELF версия. Или по-CBSD-шному:

~cbsd/misc/elf_tables --ver ~cbsd/jails-data/jail1-data/bin/sh
~cbsd/misc/elf_tables --freebsdver ~cbsd/jails-data/jail1-data/bin/sh

соотв, если ELF != хостер версии, значит внутри baserw базы контейнер по мажорной версии не совпадает с ядром и надо применять правку в make.conf

olevole added a commit that referenced this issue Nov 17, 2018
Probably fixes for Issue #351
@olevole

This comment has been minimized.

Copy link
Collaborator

@olevole olevole commented Nov 17, 2018

@Peter2121 оказывается, все так и работало, через elf. Единственное, что у меня проверялась мажорная версия. Учитывая что у вас хостер 11 версии и клетка, этот код делал return:

https://github.com/cbsd/cbsd/blob/develop/sudoexec/jstart#L154-L155

Попробуй проверить изменение по
943fd4d

Это файл /usr/local/cbsd/misc/src/elf_tables.c

после изменения, сделать cbsd initenv

и попробовать зарестартить какой-нибудь jail

@olevole

This comment has been minimized.

Copy link
Collaborator

@olevole olevole commented Nov 17, 2018

Впрочем я уже сам проверил, работает. Засабмитил в порты как 12.0.1, https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=233271 . Надо ждать пока подхватят.

@olevole olevole closed this Nov 17, 2018
@olevole

This comment has been minimized.

Copy link
Collaborator

@olevole olevole commented Nov 17, 2018

доступно в портах

@Peter2121

This comment has been minimized.

Copy link
Author

@Peter2121 Peter2121 commented Nov 17, 2018

Супер, спасибо, буду проверять на неделе.
Остался один вопрос - почему версия проверяется по /bin/sh хотя есть как бы специально на это заточенная /bin/freebsd-version?

@olevole

This comment has been minimized.

Copy link
Collaborator

@olevole olevole commented Nov 17, 2018

sh есть везде и всегда, даже если там linux или любое другое окружение. А freebsd-version - не факт, возможно какие-то KNOBS или freebsd-in-package могут и не приносить. Впрочем, я не изучал - этот код писался в 2014 году, freebsd-version появилась позже, в F10

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants
You can’t perform that action at this time.