[Решено] LXD: проблемы сборки в 14.2 и current.

SLAX, Deep Style, ZenWalk

Модератор: Модераторы разделов

Аватара пользователя
UnixNoob
Сообщения: 578
ОС: Slackware

[Решено] LXD: проблемы сборки в 14.2 и current.

Сообщение UnixNoob »

Добрый день. Думал что проблема банальная, поэтому изначально по данному вопросу обратился к тому, кто гарантированно пользовался lxd/lxc, а именно к Hephaestus. Т.к часть проблем оказались исключительно моими, и как-то просто их решить не удалось, я подумал что этот вопрос может быть полезен еще кому-то. Может быть есть знающие google-go и смогут пояснить или подсказать куда копать.

Изначально я хотел собрать в current, но в процессе сборки получил следующее:

Код: Выделить всё

# github.com/lxc/lxd/shared/idmap
dist/src/github.com/lxc/lxd/shared/idmap/shift_linux.go:131:40: identifier "_Ctype_acl_type_t" may conflict with identifiers generated by cgo
# gopkg.in/lxc/go-lxc.v2
dist/src/gopkg.in/lxc/go-lxc.v2/container.go:843:12: identifier "_Ctype_char" may conflict with identifiers generated by cgo
Версия lxc,go в current следующие:

Код: Выделить всё

lxc-2.0.11_fad08f383-x86_64-5
google-go-lang-1.13.10-x86_64-1ponce
Версия lxd что в 14.2, что в current, которые я пытаюсь собрать одинаковые, а именно 3.0.1.
По данной проблеме единственное что мне удалось найти это вот это сообщение. LTS: unable to build with go 1.12 #5529
В нем указаны версии 1.12 и 3.0, но у меня подобная проблема и на версиях выше.
Мне опять же подсказали что при подобной проблеме требуется патч, но пока не понятно где мне его взять.

Т.к версии lxd собираются одинаковые, то я решил что это проблема свежих версий lxc в current и в 14.2 таких не будет.
В 14.2 версия lxc,go такие:

Код: Выделить всё

lxc-2.0.9_d3a03247-x86_64-1_slack14.2
google-go-lang-1.13.10-x86_64-1_SBo
И получаю я при сборке следующее:

Код: Выделить всё

ist/src/github.com/CanonicalLtd/go-sqlite3/sqlite3.go:139:2: cannot find package "context" in any of:
	/usr/src/context (from $GOROOT)
	/tmp/SBo/lxd-3.0.1/dist/src/context (from $GOPATH)
dist/src/github.com/stretchr/testify/assert/assertions.go:19:2: cannot find package "github.com/davecgh/go-spew/spew" in any of:
	/usr/src/github.com/davecgh/go-spew/spew (from $GOROOT)
	/tmp/SBo/lxd-3.0.1/dist/src/github.com/davecgh/go-spew/spew (from $GOPATH)
dist/src/github.com/gorilla/mux/context_gorilla.go:8:2: cannot find package "github.com/gorilla/context" in any of:
	/usr/src/github.com/gorilla/context (from $GOROOT)
	/tmp/SBo/lxd-3.0.1/dist/src/github.com/gorilla/context (from $GOPATH)
dist/src/github.com/stretchr/testify/assert/assertions.go:20:2: cannot find package "github.com/pmezard/go-difflib/difflib" in any of:
	/usr/src/github.com/pmezard/go-difflib/difflib (from $GOROOT)
	/tmp/SBo/lxd-3.0.1/dist/src/github.com/pmezard/go-difflib/difflib (from $GOPATH)
dist/src/github.com/cpuguy83/go-md2man/md2man/md2man.go:4:2: cannot find package "github.com/russross/blackfriday" in any of:
	/usr/src/github.com/russross/blackfriday (from $GOROOT)
	/tmp/SBo/lxd-3.0.1/dist/src/github.com/russross/blackfriday (from $GOPATH)
dist/src/golang.org/x/crypto/ssh/terminal/util.go:20:2: C source files not allowed when not using cgo: gccgo_c.c
В процессе разговора с Hephaestus было предложено проверить переменную GOROOT, на что система выдала следующее:

Код: Выделить всё

env |grep GOROOT
GOROOT=/usr/lib64/go1.13.10/go
Т.е казалось бы все верно.
При проверке что с переменными в слакбилде, при добавлении в него:

Код: Выделить всё

echo $GOROOT
echo $GOPATH
exit 1
я получаю вывод только о GOPATH

Код: Выделить всё

/tmp/SBo/lxd-3.0.1/dist
А должен ли быть GOROOT? Т.к в current я вижу точно так же отсутствие GOROOT.
Если запустить, не из под X, от root sbopkg, и проверить наличие переменных, то отображается обе, но при этом получаю по-прежнему ошибки о не найденых файлах.

Так же мне было предложено следующее:
Hephaestus писал:
21.01.2021 08:19
В командной строке делаем следующее:

0. Переходим в /tmp/
cd /tmp/

1.Копируем тарбол с исходниками, например, в /tmp/
cp /var/cache/sbopkg/lxd-3.0.1.tar.gz /tmp/

2. Распаковываем тарбол.
tar xvf lxd-3.0.1.tar.gz

3. Создаем временный каталог.
Например /tmp/00.
mkdir /tmp/00 (это будет наш PKG)

4. Устанавливаем переменную PKG
export PKG=/tmp/00

5. Устанавливаем переменную PREFIX
export PREFIX=/opt/lxd

6. Создаем bin (с учетом установленных переменных)
mkdir -p $PKG/$PREFIX/bin

7. Устанавливаем GOPATH (путь, куда распаковали исходники, подкаталог dist)
export GOPATH=/tmp/lxd-3.0.1/dist

8. Переходим в каталог с исходниками
cd /tmp/lxd-3.0.1

9. Запускаем команду сборки и на всякий случай смотрим код завершения
go build -o $PKG$PREFIX/bin/lxd github.com/lxc/lxd/lxd
echo $?

То есть это ровно те действия, которые выполняются в слакбилде,
с поправкой на TMP, PKG и явное указание PRGNAM-$VERSION.
В результате чего я снова получил информацию о том, что не найдены пакеты. Поискав в интернете похожие проблемы, я наткнулся на вариант проделать следующее:

Код: Выделить всё

cd $GOPATH
go get -u github.com/*то что он не может найти*
И в варианте ручной сборки это помогло, но осталась следующая проблема:

Код: Выделить всё

go build -o $PKG$PREFIX/bin/lxd github.com/lxc/lxd/lxd
dist/src/golang.org/x/crypto/ssh/terminal/util.go:20:2: C source files not allowed when not using cgo: gccgo_c.c

Хотелось бы разобраться что же не так, и как собрать lxd. Тяжеловато наверно будет понять эту тему тем, кто не пользуется Slackware, поэтому прошу прощения, не знаю как описать проще.
Удивляет еще немного что у мейнтейнера репозитория ponce есть настройки lxc контейнера под slackware, но по факту lxd не собирается, как-будто никто контейнерами не пользуется.
Последний раз редактировалось UnixNoob 24.01.2021 13:36, всего редактировалось 1 раз.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: LXD: проблемы сборки в 14.2 и current.

Сообщение Bizdelnick »

UnixNoob писал:
22.01.2021 14:57
Мне опять же подсказали что при подобной проблеме требуется патч, но пока не понятно где мне его взять.
В баге есть ссылка на коммит, который должен исправлять проблему.
UnixNoob писал:
22.01.2021 14:57
А должен ли быть GOROOT?
Вставьте в скрипт команду go env и посмотрите, что она выведет. Значения берутся не только из окружения.
UnixNoob писал:
22.01.2021 14:57
C source files not allowed when not using cgo
Обратите внимание на другие переменные в выводе go env, в частности CGO_ENABLED (должно быть 1) и CC (должна быть команда запуска установленного в системе компилятора C).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: LXD: проблемы сборки в 14.2 и current.

Сообщение Hephaestus »

Bizdelnick писал:
22.01.2021 16:10
В баге есть ссылка на коммит, который должен исправлять проблему.
Исправляет. Подтверждаю. Я это использовал. И мы это с ТС это даже уже обсуждали.
UnixNoob писал:
22.01.2021 14:57
А должен ли быть GOROOT?
Должен. Проверено. У меня из слакбилда выводятся обе переменные: и GOROOT, и GOPATH.
UnixNoob писал:
22.01.2021 14:57
И в варианте ручной сборки это помогло, но осталась следующая проблема:
Это та же самая проблема. Остатки.
Сейчас увидите.

Я воспроизвел вашу ситуацию. Очистил GOROOT.
И получил ровно такие же ошибки.
По совету Bizdelnick добавил go env в слакбилд.

И вот, пожалуйста:

Код:

GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/src/tmp/SBo/lxd-3.0.1/dist"
GORACE=""
GOROOT="/usr"
GOTOOLDIR="/usr/libexec/gcc/x86_64-slackware-linux/5.5.0"
CC="/usr/bin/gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="/usr/bin/g++"
CGO_ENABLED="1"
Обратите внимание на выделенную строку: это в точности Ваша ситуация, сравните:
UnixNoob писал:
22.01.2021 14:57
ist/src/github.com/CanonicalLtd/go-sqlite3/sqlite3.go:139:2: cannot find package "context" in any of:
/usr/src/context (from $GOROOT)
А вот когда GOROOT на месте, всё выглядит существенно иначе:

Код:

GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOENV="/root/.config/go/env"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/src/tmp/SBo/lxd-3.0.1/dist"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/lib64/go1.13.10/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/lib64/go1.13.10/go/pkg/tool/linux_amd64"
GCCGO="/usr/bin/gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/src/tmp/go-build110898589=/tmp/go-build -gno-record-gcc-switches"
Как видите,GOROOT уже имеет правильное значение и переменных уже больше, и в том числе выставлена GCCGO.
Упоминание gccgo у Вас было здесь:
UnixNoob писал:
22.01.2021 14:57
go build -o $PKG$PREFIX/bin/lxd github.com/lxc/lxd/lxd dist/src/golang.org/x/crypto/ssh/terminal/util.go:20:2: C source files not allowed when not using cgo: gccgo_c.c
Поэтому я и говорю, это всё части одной проблемы, а именно проблемы отсутствия GOROOT.

Теперь о том, что со всем этим делать.
GOROOT выставляется в одном-единственном месте: в /etc/profile.d/go.sh
Переменная GOROOT у Вас в окружении видна, стало быть, go.sh хоть когда-то выполняется, а выполняться он должен при логине.
Но здесь есть нюанс: В некоторых случаях считывается .bashrc, а в других .profile. Я сейчас боюсь напутать, кто из них когда считывается, но они считываются в разных ситуациях - это совершенно точно.
Где-то в bashrc есть комментарий:
# ~/.bashrc: executed by bash(1) for non-login shells
Скрипты в /etc/profile.d/* вызываются из /etc/profile, содержимое которого, в свою очередь, внедряется в .profile, таким образом при считывании .profile обрабатывается и /etc/profile, а значит выполняются скрипты. Затем Вы делаете echo $GOROOT из командной строки и видите значение переменной, потому что был нормальный логин.
Но когда слакбилд вызывается из sbopkg, там используется субшелл и, судя по всему, .profile не считывается, поэтому скрипты в /etc/profile.d не выполняются, как следствие, имеем пустую переменную. Насколько я понимаю, там считывается .bashrc. Здесь ещё нужно обратить внимание, что в данном случае .bashrc и .profile - это файлы рута, а не пользователя.

Я могу ошибаться, но похоже, что всё обстоит именно так.

Возникает вопрос: Почему же у меня всё работает?
А у меня уже давно всё настроено таким образом, что .bashrc и .profile всегда считываются оба. Я даже настраивал вывод сигнальных сообщений в терминал при логине, чтобы убедиться, что считались оба файла (эти сообщения у меня до сих пор выводятся).
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 578
ОС: Slackware

Re: LXD: проблемы сборки в 14.2 и current.

Сообщение UnixNoob »

Bizdelnick писал:
22.01.2021 16:10
В баге есть ссылка на коммит, который должен исправлять проблему.
Есть, но я c git пока знаком слабо. Мне нужно стянуть файл или открыть свой и внести отмеченные изменения?
Hephaestus писал:
22.01.2021 18:09
Исправляет. Подтверждаю. Я это использовал. И мы это с ТС это даже уже обсуждали.
Обсуждали, но до этого подробно не дошли, т.к пока решали проблему с 14.2.
Ну и как я написал выше, я не умею этим пользоваться.
Bizdelnick писал:
22.01.2021 16:10
go env и посмотрите, что она выведет. Значения берутся не только из окружения.
Спасибо за информацию. Получил следующее:

Код: Выделить всё

 
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/tmp/lxd-3.0.1/dist"
GORACE=""
GOROOT="/usr"
GOTOOLDIR="/usr/libexec/gcc/x86_64-slackware-linux/5.5.0"
CC="/usr/bin/gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="/usr/bin/g++"
CGO_ENABLED="1"
Hephaestus писал:
22.01.2021 18:09
Поэтому я и говорю, это всё части одной проблемы, а именно проблемы отсутствия GOROOT.
Я не спорю же с вами. :)
Я решил создать тему чтобы это могло пригодиться еще кому-то, а не потому, что вы не правы.
Hephaestus писал:
22.01.2021 18:09
Но здесь есть нюанс: В некоторых случаях считывается .bashrc, а в других .profile. Я сейчас боюсь напутать, кто из них когда считывается, но они считываются в разных ситуациях - это совершенно точно.
У меня в .profile что для root, что для пользователя прописано следующее:

Код: Выделить всё

 
 # Source a .bashrc if it exists:
 [[ -r ~/.bashrc ]] && . ~/.bashrc
Этого не достаточно или не правильно? Если не достаточно, как тогда это исправить? Я читал разницу между .profile, .bash_profile и .bashrc, когда только знакомился с Linux, но как это для sbopkg использовать я конечно не знаю.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: LXD: проблемы сборки в 14.2 и current.

Сообщение Bizdelnick »

Hephaestus писал:
22.01.2021 18:09
GOROOT выставляется в одном-единственном месте: в /etc/profile.d/go.sh
Вообще-то она там не обязательно должна выставляться. То, что по умолчанию в GOROOT записана фигня, следствие кривой сборки go. А то, что этот файл не цепляется из скрипта, абсолютно нормально: profile подгружается только в login shell, это и в man bash описано.
Добавлено (18:44):
UnixNoob писал:
22.01.2021 18:35
Этого не достаточно или не правильно? Если не достаточно, как тогда это исправить? Я читал разницу между .profile, .bash_profile и .bashrc, когда только знакомился с Linux, но как это для sbopkg использовать я конечно не знаю.
У Вас как раз всё правильно, это у Hephaestus настроено неправильно. Не стоит следовать его примеру: сборку этого пакета, может быть, и почините, но можете нажить неожиданные и трудно диагностируемые проблемы в будущем. Как вариант, запустите login shell для root (su -l) и оттуда — сборку пакета.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 578
ОС: Slackware

Re: LXD: проблемы сборки в 14.2 и current.

Сообщение UnixNoob »

При использовании от root (с переходом через su -) переменные следующие:

Код: Выделить всё

GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/tmp/lxd-3.0.1/dist"
GORACE=""
GOROOT="/usr/lib64/go1.13.10/go"
GOTOOLDIR="/usr/libexec/gcc/x86_64-slackware-linux/5.5.0"
CC="/usr/bin/gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="/usr/bin/g++"
CGO_ENABLED="1"
Получаем мы это:

Код: Выделить всё

dist/src/github.com/stretchr/testify/assert/assertions.go:19:2: cannot find package "github.com/davecgh/go-spew/spew" in any of:
	/usr/lib64/go1.13.10/go/src/github.com/davecgh/go-spew/spew (from $GOROOT)
	/tmp/SBo/lxd-3.0.1/dist/src/github.com/davecgh/go-spew/spew (from $GOPATH)
dist/src/github.com/gorilla/mux/context_gorilla.go:8:2: cannot find package "github.com/gorilla/context" in any of:
	/usr/lib64/go1.13.10/go/src/github.com/gorilla/context (from $GOROOT)
	/tmp/SBo/lxd-3.0.1/dist/src/github.com/gorilla/context (from $GOPATH)
dist/src/github.com/stretchr/testify/assert/assertions.go:20:2: cannot find package "github.com/pmezard/go-difflib/difflib" in any of:
	/usr/lib64/go1.13.10/go/src/github.com/pmezard/go-difflib/difflib (from $GOROOT)
	/tmp/SBo/lxd-3.0.1/dist/src/github.com/pmezard/go-difflib/difflib (from $GOPATH)
dist/src/github.com/cpuguy83/go-md2man/md2man/md2man.go:4:2: cannot find package "github.com/russross/blackfriday" in any of:
	/usr/lib64/go1.13.10/go/src/github.com/russross/blackfriday (from $GOROOT)
	/tmp/SBo/lxd-3.0.1/dist/src/github.com/russross/blackfriday (from $GOPATH)
dist/src/golang.org/x/crypto/ssh/terminal/util.go:20:2: C source files not allowed when not using cgo: gccgo_c.c

И этих файлов действительно нет.
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: LXD: проблемы сборки в 14.2 и current.

Сообщение Hephaestus »

Bizdelnick писал:
22.01.2021 18:42
Вообще-то она там не обязательно должна выставляться.
Я говорил в контексте содержимого пакета google-go-lang в Slackware.
В пакете лежит /etc/profile.d/go.sh,
в котором написано

Код: Выделить всё

#!/bin/sh
export GOROOT="/usr/lib64/go1.13.10/go"
export PATH="${GOROOT}/bin:${PATH}"
Больше GOROOT нигде не упоминается.
Bizdelnick писал:
22.01.2021 18:42
А то, что этот файл не цепляется из скрипта, абсолютно нормально: profile подгружается только в login shell, это и в man bash описано.
Похоже, он как раз цепляется.
Я попробовал отрубить все пользовательские .profile и .bashrc,
но мне не удалось получить ситуацию, когда /etc/profile.d/go.sh существует и имеет права на исполнение,
но при этом GOROOT в оболочке рута была бы пустой. От рута считывается всегда. И в скрипте тоже.
Единственный способ получить пустую GOROOT - это отрубить /etc/profile.d/go.sh, но тогда её не будет вообще,
а не только в скрипте.
Bizdelnick писал:
22.01.2021 18:42
это у Hephaestus настроено неправильно
Может, и неправильно, но по-другому не получилось.
Часть инструкций в .profile, часть в .bashrc.
Как получить и те, и другие? Продублировать?
А какой смысл дублировать, если можно просто считать файл?
Если мне кто-нибудь расскажет, как правильно, с интересом ознакомлюсь.
UnixNoob писал:
22.01.2021 18:35
Этого не достаточно или не правильно?
Не имеет значения. Гипотеза всё равно не подтвердилась.
UnixNoob писал:
22.01.2021 18:35
Обсуждали, но до этого подробно не дошли, т.к пока решали проблему с 14.2.
Ну и как я написал выше, я не умею этим пользоваться.
Патч я могу дать. Не вопрос.
lxd.patch
Кладется рядом со слакбилдом.
В слакбилде команда вставляется после распаковки исходников и перехода в каталог.
Между командами

Код: Выделить всё

.....
chown -R root:root .

patch -p1 <$CWD/lxd.patch

PREFIX=/opt/lxd
....
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Hephaestus 22.01.2021 20:46, всего редактировалось 1 раз.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: LXD: проблемы сборки в 14.2 и current.

Сообщение Bizdelnick »

UnixNoob писал:
22.01.2021 19:29
И этих файлов действительно нет.
Значит, надо получить эти пакеты. Сделайте go get -v github.com/lxc/lxd/lxd/... перед go build. (В Slackware ведь навряд ли заморачивались со сборкой динамических библиотек go?)
Ну это при условии, что Вы собираете версию из git, а не из тарбола (у Вас, как я понял, именно с ней проблема). Для тарбола используйте патч. И, кстати, мне непонятно, как и что Вы там в конечном итоге собираете в целом, но если часть компонентов окажется из гита, а часть — из тарбола, то в итоге может ничего не работать.
Hephaestus писал:
22.01.2021 19:58
Я говорил в контексте содержимого пакета google-go-lang в Slackware.
В пакете лежит /etc/profile.d/go.sh,
в котором написано
Ну вот в пакет google-go-lang в Slackware положили этот файл, чтобы объехать косяк кривой сборки, да объехали тоже криво в итоге. Оно так часто бывает, если бороться не с причиной проблемы, а с её следствиями.
Hephaestus писал:
22.01.2021 19:58
Часть инструкций в .profile, часть в .bashrc.
Как получить и те, и другие? Продублировать?
А Вы не задумывались о том, что этих файлов неслучайно два? Они сорсятся при разных условиях. Почитайте всё же ман, я не просто так ссылку на него давал.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: LXD: проблемы сборки в 14.2 и current.

Сообщение Hephaestus »

Bizdelnick писал:
22.01.2021 20:40
А Вы не задумывались о том, что этих файлов неслучайно два? Они сорсятся при разных условиях.
Вы уж совсем за идиота меня не держите. Я знаю, что они считываются в разных ситуациях, я же об этом писал выше.
Однако, замечу, во-первых, что этих файлов не всегда два.
В некоторых дистрах .profile мне не попадался, он там просто отсутствует начисто. В Debian он есть? Я не помню.

А во-вторых, я от скуки что ли начал возиться с этими файлами?
Я это начал делать, когда обнаружилось, что нужные переменные не считываются в определенных ситуациях.
Держать одинаковые определения одной и переменной в разных файлах показалось мне неправильным.
В результате пришел к тому варианту, который есть сейчас. Не самый хороший вариант, да.
Но другого не получилось.
Bizdelnick писал:
22.01.2021 20:40
Почитайте всё же ман, я не просто так ссылку на него давал.
Ман на русском языке - это хорошо.
Но к сожалению ответа на мой вопрос там нет, если бы был, я бы его и на английском нашёл.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: LXD: проблемы сборки в 14.2 и current.

Сообщение Bizdelnick »

Hephaestus писал:
22.01.2021 21:01
В некоторых дистрах .profile мне не попадался, он там просто отсутствует начисто.
Ну отсутствует — так отсутствует. Нигде и не сказано, что он обязан быть. Если создать вручную — должен подхватываться. В чём проблема-то?
Hephaestus писал:
22.01.2021 21:01
А во-вторых, я от скуки что ли начал возиться с этими файлами?
Я это начал делать, когда обнаружилось, что нужные переменные не считываются в определенных ситуациях.
Значит, либо прописаны они не там где надо, либо это Вы ожидаете их в тех ситуациях, где они не предусмотрены. Без подробностей ничего не могу об этом более сказать, да и офтопик это в данной теме.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 578
ОС: Slackware

Re: LXD: проблемы сборки в 14.2 и current.

Сообщение UnixNoob »

Hephaestus писал:
22.01.2021 19:58
Патч я могу дать. Не вопрос.
Патч помог, пакет собрался.
Вы его сами составляли с использованием diff и commit'a?

Одно меня смущает, что go env при этом такой:

Код: Выделить всё

GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/tmp/SBo/lxd-3.0.1/dist"
GOPROXY=""
GORACE=""
GOROOT="/usr"
GOTMPDIR=""
GOTOOLDIR="/usr/libexec/gcc/x86_64-slackware-linux/9.3.0"
GCCGO="/usr/bin/gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build245625422=/tmp/go-build -gno-record-gcc-switches -funwind-tables"
Т.е GOROOT нет и тут, как он его тогда собрал? Используя GOPATH? Так он (архив исходников) тот же что и в 14.2, в чем отличия?

C current решили более-менее.

А в 14.2 мы продолжаем разборки:
Bizdelnick писал:
22.01.2021 20:40
Значит, надо получить эти пакеты. Сделайте go get -v github.com/lxc/lxd/lxd/... перед go build. (В Slackware ведь навряд ли заморачивались со сборкой динамических библиотек go?)
Получить их не получается.
При go get -v:

Код: Выделить всё

import "context":import does not contain to slash
package "context":unrecognized import path "context"
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: LXD: проблемы сборки в 14.2 и current.

Сообщение Bizdelnick »

UnixNoob писал:
23.01.2021 00:56
При go get -v:

Код: Выделить всё

import "context":import does not contain to slash
package "context":unrecognized import path "context"
Значит, версия go слишком старая. Не помню точно, когда context в стандартной библиотеке появился, но сравнительно недавно. Собирайте релиз из тарбола, как в current.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 477
ОС: debian, fedora (i3-wm)

Re: LXD: проблемы сборки в 14.2 и current.

Сообщение olecya »

UnixNoob писал:
22.01.2021 14:57
cd $GOPATH
go get -u github.com/*то что он не может найти*
Bizdelnick писал:
22.01.2021 20:40
Значит, надо получить эти пакеты. Сделайте go get -v github.com/lxc/lxd/lxd/... перед go build
в 13 версии go вместо привязки по GOPATH используется механизм модулей. Это конечно не значит что нельзя собирать старым способом, а вдруг?
Надо посмотреть есть ли в сборочной директории файл go.mod если есть то выполнить: и все правильные зависимости подтянутся, если нет то так:

Код: Выделить всё

go mod init
go test
Спасибо сказали:

Аватара пользователя
olecya
Сообщения: 477
ОС: debian, fedora (i3-wm)

Re: LXD: проблемы сборки в 14.2 и current.

Сообщение olecya »

Ответила как то спонтанно и лучше поясню. Конечно механизм модулей на самом деле не имеет прямого отношения к GOPATH и даже при неопределенной переменной компилятор по умолчанию использует директорию ~/go для установки модулей. Если проект собирается в не корня ~/go, то при инициализации модуля необходимо указать и его имя. В данном случае можно использовать имя текущей директории или любое другое от фонаря:

Код: Выделить всё

go mod init otFonarya
Здесь не разрабатывается новый модуль, но этот механизм может многое упростить при сборке даже если изначально он не был применен
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 578
ОС: Slackware

Re: LXD: проблемы сборки в 14.2 и current.

Сообщение UnixNoob »

Bizdelnick писал:
23.01.2021 01:01
Значит, версия go слишком старая. Не помню точно, когда context в стандартной библиотеке появился, но сравнительно недавно. Собирайте релиз из тарбола, как в current.
Они по версиям, в обеих системах одинаковые. Разве что скрипт сборки чуть разный и то не факт.
olecya писала:
23.01.2021 09:10
Надо посмотреть есть ли в сборочной директории файл go.mod если есть то выполнить:
Спасибо, посмотрю.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 18483
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: LXD: проблемы сборки в 14.2 и current.

Сообщение Bizdelnick »

olecya писала:
23.01.2021 09:10
в 13 версии go вместо привязки по GOPATH используется механизм модулей. Это конечно не значит что нельзя собирать старым способом, а вдруг?
Надо посмотреть есть ли в сборочной директории файл go.mod если есть
Я смотрел, нет. ☺
UnixNoob писал:
23.01.2021 11:49
Они по версиям, в обеих системах одинаковые. Разве что скрипт сборки чуть разный и то не факт.
Но собираете-то Вы разные версии lxd, как я понял. В одном случае наложили патч на старый релиз, в другом стягиваете свежак с гитхаба. В более новой версии выше требования к версии go.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: LXD: проблемы сборки в 14.2 и current.

Сообщение Hephaestus »

UnixNoob писал:
23.01.2021 00:56
Вы его сами составляли с использованием diff и commit'a?
Я уже не помню. Больше года назад дело было.
Вроде бы я поправил сам, а уже потом набрел на этот коммит и просто сверил свои исправления.

Кстати, я Вам писал ранее, что ставил самосбором более новую версию LXD мимо SBo.
Это я перепутал. Я ставил более новую LXC. В слаке сначала была 0.9.0, потом 2.0.1, потом 2.0.9,
тут контейнер перестал запускаться и я после поисков решения в Сети, поставил самосбором 3.0.3.
А LXD я тоже ставил самосбором, да, но из-за патча, а не более новую версию.

Так что имейте в виду, у LXC могут быть проблемы с запуском.

UnixNoob писал:
23.01.2021 00:56
А в 14.2 мы продолжаем разборки:
В общем, так.
Чистая Slackware 14.2. Установлена в режиме full.
Никаких .bashrc и .profile нигде нет.
И тем не менее, осбуждаемых ошибок не возникает.
Единственный вариант, когда действительно возникает ошибка - это сборка и установка google-go-lang,
а следом сразу же - сборка lxd. В этом случае /etc/profile.d/go.sh не вызывается, переменная GOROOT не устанавливается, следовательно, сборка не удается. Начинает нормально работать после перелогина, что вполне ожидаемо.

Однако, будем исходить из того, что /etc/profile.d/go.sh у нас не работает. Совсем.
Ну вот не выставляются переменные - и всё тут.
Определить GOROOT вручную недостаточно.
Как выяснилось, в системе есть ещё один go - из пакета gcc-go-5.3.2 или gcc-go-5.5.0.
И когда делается go env при пустой GOROOT, мы видим именно его вывод.
И именно этот go вызывается из скрипта, и поэтому ничего не удается собрать.
В current, кстати, его версия более новая - gcc-go-10.2.0, вероятно, поэтому сборка проходит успешно даже при пустой GOROOT.
Для сборки на 14.2 кроме GOROOT нужно определить ещё и PATH (в /etc/profile.d/go.sh это есть, но я не придал этому значения, так как не знал, что в системе уже есть некий go).
Итак, нужно определить PATH, причем, go из /usr/lib64/go1.13.10/go должен вызываться раньше, чем имеющийся /usr/bin/go.

Таким образом, для сборки можно сделать следующее:
в терминале выполнить
export GOROOT=/usr/lib64/go1.13.10/go
export PATH=$GOROOT/bin:$PATH
(эти же команды выполняются в /etc/profile.d/go.sh)
и затем
sbopkg -kb lxd
Вроде бы срабатывает.

Если этот google-go-lang потребуется где-то ещё, нужно будет решать,
как обеспечить лучше экспорт этих переменных на постоянной основе.
Я склоняюсь к мысли, что в данном случае переменные не считываются из-за оболочки или DM.
Проверить все варианты я не могу, но при gdm всё срабатывает, при xdm и startx - тоже.
Возможно, при использовании slim что-то происходит иначе.
Последний раз редактировалось Hephaestus 27.01.2021 12:50, всего редактировалось 1 раз.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 578
ОС: Slackware

Re: LXD: проблемы сборки в 14.2 и current.

Сообщение UnixNoob »

Hephaestus писал:
23.01.2021 14:35
Это я перепутал. Я ставил более новую LXC. В слаке сначала была 0.9.0, потом 2.0.1, потом 2.0.9,
тут контейнер перестал запускаться и я после поисков решения в Сети, поставил самосбором 3.0.3.
А LXD я тоже ставил самосбором, да, но из-за патча, а не более новую версию.
В current у меня версия lxc 2.0.11.
Hephaestus писал:
23.01.2021 14:35
Так что имейте в виду, у LXC могут быть проблемы с запуском.
А что мне надо запускать то по факту? Во всех руководствах просто lxc пишут и вперед. У меня он так не работает.
Работает из /opt/lxd/bin/lxc это оно?
Hephaestus писал:
23.01.2021 14:35
Таким образом, для сборки можно сделать следующее:
в терминале выполнить
export GOROOT=/usr/lib64/go1.13.10/go
export PATH=$GOROOT/bin:$PATH
(эти же команды выполняются в /etc/profile.d/go.sh)
и затем
sbopkg -kb lxd
Вроде бы срабатывает.
Вы правы, так сработало и запросило патч, после применения которого оно собралось.
Спасибо, сам бы не разобрался.
Hephaestus писал:
23.01.2021 14:35
Я склоняюсь к мысли, что в данном случае переменные не считываются из-за оболочки или DM.
Проверить все варианты я не могу, но при gdm всё срабатывает, при xdm и startx - тоже.
Возможно, при использовании slim что-то происходит иначе.
Тут не знаю. Я не помню, я google-go в current ставил еще в KDE или уже в i3wm.
Сейчас у меня везде i3wm и slim. Ну и в current у меня стоят и KDE и XFCE и i3, а на ноутбуке с 14.2 DE нет совсем. Только i3wm и slim.
Пока только получается что в current оно отрабатывает, а в 14.2 - нет.
Спасибо сказали:

Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: LXD: проблемы сборки в 14.2 и current.

Сообщение Hephaestus »

UnixNoob писал:
23.01.2021 16:51
А что мне надо запускать то по факту?
Пока ничего.
Изучайте материалы по LXC/LXD.
Ссылки я вам давал.
Там есть, что поизучать. Не торопитесь.
UnixNoob писал:
23.01.2021 16:51
Во всех руководствах просто lxc пишут и вперед.
Это скорее всего пишут про lxc-контейнеры.
У Вас lxc в связке с lxd. Не забывайте.
UnixNoob писал:
23.01.2021 16:51
Работает из /opt/lxd/bin/lxc это оно?
Не совсем.
Вашими инструментами будут
lxc-start
lxc-stop
lxc-create
lxc-config
и т.п.
но сначала всё-таки почитайте статьи, иначе запутаетесь.

UnixNoob писал:
23.01.2021 16:51
на ноутбуке с 14.2 DE нет совсем. Только i3wm и slim.
Пока только получается что в current оно отрабатывает, а в 14.2 - нет.
Они разные.
В current штатный go (gcc-go) новее, вероятно, его достаточно.
В 14.2 понадобился тулчейн (google-go-lang),
но возникла проблема с переменными окружения.
Если переменная оказалась недоступна, возникают вопросы к slim и i3wm,
поскольку они могут влиять на доступность переменных.
На чистой системе (где нет slim и i3wm) всё отрабатывает, как нужно.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:

Аватара пользователя
UnixNoob
Сообщения: 578
ОС: Slackware

Re: [Решено] LXD: проблемы сборки в 14.2 и current.

Сообщение UnixNoob »

Как выяснилось, почти вся тема, за исключением патча, результат моей глупой ошибки.
У меня в .profile было внесение переменной PATH, но я вместо того, чтобы дописывать к имеющимся, затирал их.
Было вот так:

Код: Выделить всё

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
А нужно так:

Код: Выделить всё

export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Видимо мне очень везло не сталкиваться с этим ранее, в силу используемого софта.
Поэтому всем причастным огромное спасибо и извините.
Спасибо сказали: