Несоответствие между glib и gcc после понижения версии gcc

Я не думаю, что вы легко отделаетесь без петли:

cmd=()
for i ($argv[1,-2]) cmd+=(ssh -t $i)
$cmd tailf /pathtofile/$argv[-1]/log.log

Строго говоря, поскольку это командная строка оболочки, которую вы передаете в ssh, если вы хотите иметь возможность поддерживать произвольные значения для этих $1, $2, вам нужно заключить эти аргументы в кавычки и добавить дополнительный уровень цитирования для каждого ssh.

Здесь предполагается, что оболочка входа пользователя на всех хостах — Bourne -, например:

cmd=(tailf /pathtofile/$argv[-1]/log.log)
argv[-1]=()
while (($#argv)) {
  cmd=(ssh -t "$argv[-1]" ${(j: :)${(qq)cmd}})
  argv[-1]=()
}

Это должно заставить его работать при вызове как

that-script host1 host2 'dir with spaces and other nasty characters'
0
14.06.2021, 21:39
1 ответ

Документация, на которую вы ссылаетесь, указывает:

Warning: Downgrading packages will almost always leave you in an unsupported partial upgrade state. These instructions are intended for advanced users who understand the consequences of downgrading packages

и именно это здесь и произошло; теперь у вас есть зависимости (, вероятно, даже не glibc, а другие ), которые несовместимы с установленным вами программным обеспечением. Так что пришлось откатиться.

Как сказал А.Б.:

Nowadays, you just fire a container running older software (older gcc etc) so the host doesn't get this kind of problem. Btw, don't confuse gcc-libs, glibc2 or stdlibc++ with GLib.

Теперь на манджаро вы можете использовать dockerили podman; оба делают одно и то же :запускают контейнеры , которые по сути являются системами Linux «в коробке», хорошо изолированными от остальной части вашей системы. podmanнемного современнее и лучше работает без привилегий суперпользователя, но поддерживает те же команды и параметры, что и docker (, где это возможно ).

Например, после установки podman(sudo pacman -S podman)вы можете запустить

podman run --name myfirstcontainer -it  -v /home/maxemilian:/data:Z manjarolinux/base

и он загрузит и runизображение манджаро , даст вам интерактивную оболочку на нем (-it), привяжет то, что у вас есть под /home/maxemilianкак volume, видимый в контейнере как/data(используя собственные владенияZ). Ваш контейнер сохраняется после выхода (проверкиpodman ps -a)и может быть запущен снова с помощью podman start --attach myfirstcontainer.

Вы можете сделать даунгрейд внутри этого контейнера и ничего не трогать снаружи. Через том ваш контейнер может получить доступ к исходным файлам, которые вам нужно скомпилировать!

Очень часто компилятор distccзапускается как "серверный" внутри контейнера. Вам нужно добавить --publish 3632для этого, и,на вашей машине разработки (, то есть на вашем «нормальном» манджаро ), вместо использования, например. gccв качестве компилятора используйте distcc.

podman run -it --publish 3632 --name buildserver manjarolinux/base #установить gcc, distcc distccd --демон

Попробуйте! Сделать файлtest.c:

#include <stdio.h>
int main() {
  printf("GCC %d.%d.%d", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
  return 0;
}

Выполнить

export CC=distcc
export DISTCC_HOSTS=localhost
$CC -o test test.c
./test
1
28.07.2021, 11:24

Теги

Похожие вопросы