The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Представлен Blink, эмулятор x86-64, опережающий QEMU по производительности, opennews (ok), 05-Янв-23, (0) [смотреть все] +1

Сообщения [Сортировка по времени | RSS]


2. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  –4 +/
Сообщение от Аноним (2), 05-Янв-23, 09:31 
> По функциональности blink напоминает команду qemu-x86_64, но отличается
> от QEMU

тем что умеет запускать только бинарники linoops - причем загадочные "статически собранные приложения" (статической сборки в glibc нет уже двадцать лет).

О прочих "преимуществах" после этого можно было уже и не писать.
(Безусловно, программа которая абсолютно ничего не умеет, будет быстрее и компактнее полноценного эмулятора реальной аппаратуры. Быстро и компактно делая ничего.)

Чудо-отладчик, естественно, работает только для x86.

Хорошая поделка для гика, которому нечем заняться в новогодние каникулы, но пользы от нее - никому и никакой.


Ответить | Правка | Наверх | Cообщить модератору

6. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +3 +/
Сообщение от Аноним (6), 05-Янв-23, 09:46 
> статической сборки в glibc нет уже двадцать лет

Да что ты говоришь, родной... Правда, что ли? Пойду расскажу коллегам по подвалу, а то "мужики-то не знают".

Ответить | Правка | Наверх | Cообщить модератору

12. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +2 +/
Сообщение от Аноним (11), 05-Янв-23, 10:36 
>Да что ты говоришь, родной... Правда, что ли? Пойду расскажу коллегам по подвалу, а то "мужики-то не знают".

Расскажи. Заодно расскажи мужикам про dlopen(), который в glibc дёргается на каждый чих.

Ответить | Правка | Наверх | Cообщить модератору

28. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +3 +/
Сообщение от Аноним (27), 05-Янв-23, 11:52 
Это тебе кто такую чушь рассказал, или сам нафантазировал?
Ответить | Правка | Наверх | Cообщить модератору

34. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +3 +/
Сообщение от Аноним (34), 05-Янв-23, 12:28 
намекаешь, что нужно использовать glibc без nss, iconv и чего-то там еще
Ответить | Правка | Наверх | Cообщить модератору

70. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +2 +/
Сообщение от GOrilla (?), 05-Янв-23, 16:53 
Здрасьте приехали. Это новое поколение? Тебе сколько лет?
Ответить | Правка | К родителю #12 | Наверх | Cообщить модератору

144. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от OpenEcho (?), 05-Янв-23, 23:57 
> Здрасьте приехали. Это новое поколение? Тебе сколько лет?

Судя по всему с линуксом давненько не работали... чувак правду говорит, под линуксом х86_64 glibc не компилится статически, если там что чуть посложней  ХелоВорлд, Я чуть ниже предложил Урри потренироваться на кошках/sqlite3, можете обьеденить усилия и доказать что есть еще порох в штанах

Ответить | Правка | Наверх | Cообщить модератору

163. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +1 +/
Сообщение от OpenEcho (?), 06-Янв-23, 10:15 
Судя по минусам, убеждаюсь еще раз в "глубоких" знаниях "спецов" опеннета...

Ответить | Правка | Наверх | Cообщить модератору

177. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от GOrilla (?), 06-Янв-23, 12:17 
>> Здрасьте приехали. Это новое поколение? Тебе сколько лет?
> Судя по всему с линуксом давненько не работали... чувак правду говорит, под
> линуксом х86_64 glibc не компилится статически, если там что чуть посложней
>  ХелоВорлд, Я чуть ниже предложил Урри потренироваться на кошках/sqlite3, можете
> обьеденить усилия и доказать что есть еще порох в штанах

Ну что же, вызов принят.

Ответить | Правка | К родителю #144 | Наверх | Cообщить модератору

182. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от GOrilla (?), 06-Янв-23, 13:07 
http://www.tinyware.ru/garbage/sqlite3-3.34.1.tar.gz

Собрано на Debian bullseye 64. Собрано почти по рецепту, полностью не разбирался, пакет отлаживать лень. Не собрано csv.so ну и понятно это .so.

Ответить | Правка | К родителю #144 | Наверх | Cообщить модератору

240. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от OpenEcho (?), 07-Янв-23, 20:37 
> http://www.tinyware.ru/garbage/sqlite3-3.34.1.tar.gz
> Собрано на Debian bullseye 64. Собрано почти по рецепту, полностью не разбирался,
> пакет отлаживать лень. Не собрано csv.so ну и понятно это .so.

Сорри, но это обрубыш, которым пользоваться будет трудно (без readline, ncurses ), я чуть ниже предложил опции для компиляции, более сложный пример (и наверное боллее подходящий в контексте дискуссии) - статический php-cli с маст хэв extensions

Ответить | Правка | Наверх | Cообщить модератору

247. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от GOrilla (?), 08-Янв-23, 13:26 
Там в папке рядом деб пакеты и rules как я собирал. Tar gz это фигня.
Ответить | Правка | Наверх | Cообщить модератору

256. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от OpenEcho (?), 10-Янв-23, 02:15 
> Там в папке рядом деб пакеты и rules как я собирал. Tar
> gz это фигня.

Вот простой исходник:

#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netdb.h>
#include <string.h>

int main(int argc, char const *argv[]) {
    struct addrinfo hints;
    struct addrinfo *res, *tmp;
    char host[256];

    memset(&hints, 0, sizeof(struct addrinfo));
    hints.ai_family = AF_INET;

    if (argc != 2) {
        fprintf(stderr, "%s string\n", argv[0]);
        exit(EXIT_FAILURE);
    }

    int ret = getaddrinfo(argv[1], NULL, &hints, &res);
    if (ret != 0) {
        fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(ret));
        exit(EXIT_FAILURE);
    }

    for (tmp = res; tmp != NULL; tmp = tmp->ai_next) {
        getnameinfo(tmp->ai_addr, tmp->ai_addrlen, host, sizeof(host), NULL, 0, NI_NUMERICHOST);
        puts(host);
    }

    freeaddrinfo(res);
    exit(EXIT_SUCCESS);
}


Компилим:
    gcc -Wall -static  -static-libgcc -o getaddrinfo  getaddrinfo.c

Читаем:

    getaddrinfo.c:(.text+0x8c): warning: Using 'getaddrinfo' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

делаем

   ldd getaddrinfo
    not a dynamic executable

котoрый вроде успокаивает, но теперь переносим бинарник на Alpine Linux и обламываемся потому как все написанно в предупреждении. В более сложных случаях, даже на системах с glibc но с более старой версией будет такой же облом потому как это фейк статика

Ответить | Правка | Наверх | Cообщить модератору

140. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Урри (ok), 05-Янв-23, 23:41 
Хм.

```
$ cat helloworld.c
#include <stdio.h>

int main()
{
    printf("Hello, World!\n");
    return 42;
}

$ gcc helloworld.c -static -static-libgcc

$ ls
a.out helloworld.c

$ readelf -d a.out
There is no dynamic section in this file.

$ ./a.out
Hello, World!
```

Ответить | Правка | К родителю #12 | Наверх | Cообщить модератору

143. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  –1 +/
Сообщение от OpenEcho (?), 05-Янв-23, 23:46 
А теперь, чуть посложней пожалуйста -  sqlite3 для х86_64 под линь, плыз
Ответить | Правка | Наверх | Cообщить модератору

206. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  –2 +/
Сообщение от Урри (ok), 06-Янв-23, 20:48 
> А теперь, чуть посложней пожалуйста -  sqlite3 для х86_64 под линь,
> плыз

Писос ты бездарь... Самому сложно было трайнуть? Даже гуглить не надо, все выше написано.
Да без проблем. Минута времени:

$ uname -a
Linux PC 5.13.0-39-generic #44~20.04.1-Ubuntu SMP Thu Mar 24 16:43:35 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

$ wget https://www.sqlite.org/2022/sqlite-amalgamation-3400100.zip
$ unzip ./sqlite-amalgamation-3400100.zip
$ cd sqlite-amalgamation-3400100

$ gcc -DSQLITE_OMIT_LOAD_EXTENSION ./sqlite3.c ./shell.c -pthread -static -static-libgcc

$ readelf -d a.out
There is no dynamic section in this file.

$ ./a.out
SQLite version 3.40.1 2022-12-28 14:03:47
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> create table noob (id integer primary key);
sqlite> insert into noob (id) values (NULL) returning id;
1
sqlite> .exit

--
А теперь просим выступить на бис с заявлением "извините, коллеги, облажался. написал фигню, но вы мне убедительно показали что был не прав.".

Ответить | Правка | Наверх | Cообщить модератору

225. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  –1 +/
Сообщение от Аноним (-), 07-Янв-23, 08:23 
> $ gcc -DSQLITE_OMIT_LOAD_EXTENSION ./sqlite3.c ./shell.c -pthread -static -static-libgcc

Так и знал что Урри найдет amalgamation и таки покажет лабуху мастеркласс. Зачетно.

Ответить | Правка | Наверх | Cообщить модератору

235. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от OpenEcho (?), 07-Янв-23, 19:51 
>> $ gcc -DSQLITE_OMIT_LOAD_EXTENSION ./sqlite3.c ./shell.c -pthread -static -static-libgcc
> Так и знал что Урри найдет amalgamation и таки покажет лабуху мастеркласс.
> Зачетно.

Подшакалил ? Зачетно ! Лизни еще, а потом попробуй компильнуть ПЫХ или питон статически, не голяк, а экстеншенами с readline, json, xml...

Ответить | Правка | Наверх | Cообщить модератору

233. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от OpenEcho (?), 07-Янв-23, 19:42 
Откуда бLять у вас здесь столько желчи у всех?! В этом здесь большинство первоклассные спецы... "так держать !"


> gcc -DSQLITE_OMIT_LOAD_EXTENSION ./sqlite3.c ./shell.c -pthread -static -static-libgcc

/usr/bin/ld: /tmp/ccdxr656.o: in function `find_home_dir':
shell.c:(.text+0x283f2): warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

Ответить | Правка | К родителю #206 | Наверх | Cообщить модератору

250. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от пох. (?), 08-Янв-23, 20:25 
о, ну хоть один попался если не грамотный то умеющих хотя бы прочитать выхлоп компилятора.

А сколько еще тебя ждет открытий чудных, если ты ЭТО еще и запускать вздумаешь...

Ответить | Правка | Наверх | Cообщить модератору

255. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от OpenEcho (?), 10-Янв-23, 02:11 
> о, ну хоть один попался если не грамотный то умеющих хотя бы прочитать выхлоп компилятора.

Да куда нам грешым до "вашего величества" :)

> А сколько еще тебя ждет открытий чудных, если ты ЭТО еще и запускать вздумаешь...

Это не ко мне, это к народу свято верующим в чудо что glibc можно компилить статически

Ответить | Правка | Наверх | Cообщить модератору

265. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +1 +/
Сообщение от пох. (?), 10-Янв-23, 20:40 
> Это не ко мне, это к народу свято верующим в чудо что
> glibc можно компилить статически

На самом деле они правильное веруют - компилить - можно ;-) Только потом ничего кроме хеловротов не работает.

Я уж не знаю что такое надо придумать, чтоб не зацепить хотя бы nsswitch, а это в современных версиях еще далеко не все.

Ответить | Правка | Наверх | Cообщить модератору

241. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  –1 +/
Сообщение от OpenEcho (?), 07-Янв-23, 22:13 
> А теперь просим выступить на бис с заявлением "извините, коллеги, облажался. написал
> фигню, но вы мне убедительно показали что был не прав.".

У меня проблем нет быть признательным и признавать свои ошибки, буду только рад если кто-то поправит, но только не на примерах ХелоВорлд. На сегодняшний день полагаться на то, что можно сложный проект слинковать с glibc без сюрпризов - не реально. Попробуйте собрать статически пых с расширениями(!), потом поговорим


Ответить | Правка | К родителю #206 | Наверх | Cообщить модератору

257. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от OpenEcho (?), 10-Янв-23, 02:19 
> Писос ты бездарь... Самому сложно было трайнуть? Даже гуглить не надо, все
> выше написано.
> Да без проблем. Минута времени:

Ну давай, "не" писос, попробуй:

https://www.opennet.me/openforum/vsluhforumID3/129432.html#256

> А теперь просим выступить на бис с заявлением "извините, коллеги, облажался. написал
> фигню, но вы мне убедительно показали что был не прав.".

^^^

Ответить | Правка | К родителю #206 | Наверх | Cообщить модератору

211. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от pavlinux (ok), 06-Янв-23, 21:56 
> А теперь, чуть посложней пожалуйста

https://github.com/pavlinux/ctorrents-plx


...
LIBS :=-L. -static-libstdc++ -static-libgcc -Wl,-Bstatic -lssl -Wl,-Bstatic -lcrypto

Ответить | Правка | К родителю #143 | Наверх | Cообщить модератору

226. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Аноним (226), 07-Янв-23, 08:54 
> https://github.com/pavlinux/ctorrents-plx

Хренакс, у каркуши даже что-то дельное в репах было.

Ответить | Правка | Наверх | Cообщить модератору

237. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от OpenEcho (?), 07-Янв-23, 19:57 
>> А теперь, чуть посложней пожалуйста
> https://github.com/pavlinux/ctorrents-plx
> ...
> LIBS :=-L. -static-libstdc++ -static-libgcc -Wl,-Bstatic -lssl -Wl,-Bstatic -lcrypto

ldd ctorrent
    linux-vdso.so.1 (0x00007ffc64275000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc1cff00000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc1cfd7d000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc1cfbbd000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fc1cff9f000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc1cfb9c000)

Это - НЕ СТАТИКА

Должно быть: not a dynamic executable

Ответить | Правка | К родителю #211 | Наверх | Cообщить модератору

249. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от pavlinux (ok), 08-Янв-23, 19:58 
>[оверквотинг удален]
>> LIBS :=-L. -static-libstdc++ -static-libgcc -Wl,-Bstatic -lssl -Wl,-Bstatic -lcrypto
> ldd ctorrent
>  linux-vdso.so.1 (0x00007ffc64275000)
>  librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc1cff00000)
>  libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc1cfd7d000)
>  libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc1cfbbd000)
>  /lib64/ld-linux-x86-64.so.2 (0x00007fc1cff9f000)
>  libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc1cfb9c000)
> Это - НЕ СТАТИКА
> Должно быть: not a dynamic executable

Давно это было, задача была от libstdc++ избавиться.
libc статиком - не проблема, только нафига если она
в системе юзается другими.


Ответить | Правка | Наверх | Cообщить модератору

258. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от OpenEcho (?), 10-Янв-23, 02:24 
>только нафига если она
> в системе юзается другими.

Далеко не везде есть glibc, как самый яркий пример Alpine Linux, где даже правильно скомпилированный статически исходник ликнутый с glibc работаь не будет, в то время когда настоящий статический бинарник будет работать на всех версиях внутри платформы


Пример: https://www.opennet.me/openforum/vsluhforumID3/129432.html#256

Ответить | Правка | Наверх | Cообщить модератору

266. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Аноним (266), 10-Янв-23, 23:20 
> libc статиком - не проблема, только нафига если она
> в системе юзается другими

Банально — к примеру, у меня есть сборочный хост с glibc 2.32 и я хочу собирать на нём один портативный бинарник, который бы будет запускаться на любом LTS линуксе.

Собираю и получаю падение на CentOS 7, потому что символы всё равно берутся из glibc, но версия символов не совпадает с рантаймом.

Ответить | Правка | К родителю #249 | Наверх | Cообщить модератору

141. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  –1 +/
Сообщение от OpenEcho (?), 05-Янв-23, 23:43 
> Да что ты говоришь, родной... Правда, что ли? Пойду расскажу коллегам по подвалу, а то "мужики-то не знают".

Ну скомпилируйте там, сообща, sqlite3 к примеру для х86_64 под линолиум ;)
Не забудьте похвастать как получится

Ответить | Правка | К родителю #6 | Наверх | Cообщить модератору

166. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Хм... (?), 06-Янв-23, 10:42 
В чем проблема?

test@test:~/test$ cat test.c
#include <sqlite3.h>
#include <stdio.h>

int main(void) {
    printf("%s\n", sqlite3_libversion());
    return 0;
}
test@test:~/WORK/test$ cc test.c -I sqlite3/include -l sqlite3 -L sqlite3/lib -static  -static-libgcc -pthread -ldl -lm
/usr/bin/ld: sqlite3/lib/libsqlite3.a(sqlite3.o): in function `unixDlOpen':
~/test/sqlite-autoconf-3400100/sqlite3.c:43242: warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
test@test:~/test$ ./a.out
3.40.1
test@test:~/test$  readelf -d a.out

There is no dynamic section in this file.

Ответить | Правка | Наверх | Cообщить модератору

167. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +1 +/
Сообщение от Аноним (34), 06-Янв-23, 10:57 
> В чем проблема?

может в этом?
> warning: Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

оно у тебя статическое в плане формата бинарника, но dlopen немного мешает. Например в зависимости от конфигов хоста glibc будет подгружать модули с хоста и эти модули могут не подойти

Ответить | Правка | Наверх | Cообщить модератору

169. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Хм... (?), 06-Янв-23, 11:17 
В чем проблема взять статически собранную libc и залинковать?
ну да бинарник будет толстый :))
Ответить | Правка | Наверх | Cообщить модератору

172. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +1 +/
Сообщение от Аноним (34), 06-Янв-23, 11:29 
а можно еще вырезать поддержку модулей.

Проблема в том, что ты не сможешь залинковать все модули. Например у пользователя более свежая версия libc и там появилось несколько новых модулей, которых нет в бинарнике или у него вообще свой модуль. Загрузить мы их не можем, будем игнорировать настройки системы и станем работать с тем, что есть?

т.е. приходим к тому, что libc в общем случае получается не совсем статическая и надо либо ее резать, либо впихивать в нее какой-то набор модулей и работать только с ним в нарушение настроек.

Ответить | Правка | Наверх | Cообщить модератору

173. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Хм... (?), 06-Янв-23, 11:33 
Вам шашечки? или ехать?
если ехать то статический бинарник который работает везде, либо окружение с shared библиотеками которым нужно только ядро...


Ответить | Правка | Наверх | Cообщить модератору

174. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +3 +/
Сообщение от Аноним (34), 06-Янв-23, 11:54 
я просто говорю, что в общем случае получить "статический бинарник который работает везде" с glibc нельзя. Если мы что-то колдуем с модулями, то это уже не "общий" случай и оно все равно может не заработать везде.
Ответить | Правка | Наверх | Cообщить модератору

176. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Хм... (?), 06-Янв-23, 12:00 
еще раз задаем вопрос.
почему нельзя взять статический libc с тем что тебе нужно????
религия не позволяет??
Ответить | Правка | Наверх | Cообщить модератору

179. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Аноним (34), 06-Янв-23, 12:28 
на хосте используется libnss_ldap:
1. ты про него забыл. Твой "статический бинарник который работает везде" продолжит работу с непонятным результатом или завершится?
2. ты про него не забыл, но он бесполезен, т.к. на хосте настройки для более новой версии. Твой "статический бинарник который работает везде" продолжит работу с непонятным результатом или завершится?

а теперь представим, что на хосте используется лютая экзотическая проприетарщина libnss_wtf, исходников для которой нет. Как будем поступать?

> почему нельзя взять статический libc с тем что тебе нужно????

потому что ты должен взять статический libc с тем, что нужно пользователю.
Если пользователь ты и окружение, где исполняется бинарник, под твоим контролем, то проблем нет.

Ответить | Правка | Наверх | Cообщить модератору

180. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Хм... (?), 06-Янв-23, 12:39 
ну так бы и сказал, сферический конь в вакууме скорее всего не поедет...
Ответить | Правка | Наверх | Cообщить модератору

181. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Аноним (34), 06-Янв-23, 12:52 
ну я и говорил, про "общий случай"
но тут не конь в вакууме. glibc такой и задумана — она использует модули в зависимости от конфигов хоста.

Я даже не уверен, что в более частном случае, например при использовании libnss_systemd, получится добиться успеха при разных версиях systemd

Ответить | Правка | Наверх | Cообщить модератору

184. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от GOrilla (?), 06-Янв-23, 14:59 
glibc сама не использует dlopen. А что есть в статическом бинарнике дак то и есть.
Ответить | Правка | К родителю #181 | Наверх | Cообщить модератору

187. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Аноним (34), 06-Янв-23, 16:44 
> glibc сама не использует dlopen

просто грепом по исходникам:
inet/idna.c
nss/nss_module.c
iconv/gconv_dl.c

даже твой статический sqlite3 смотрит в /etc/nsswitch.conf, а потом ищет и открывает libnss_files или libnss_sss. (да, я запускаю бинарники от анонимов)

Ответить | Правка | К родителю #184 | Наверх | Cообщить модератору

188. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от GOrilla (?), 06-Янв-23, 17:05 
>> glibc сама не использует dlopen
> просто грепом по исходникам:
> inet/idna.c
> nss/nss_module.c
> iconv/gconv_dl.c
> даже твой статический sqlite3 смотрит в /etc/nsswitch.conf, а потом ищет и открывает
> libnss_files или libnss_sss. (да, я запускаю бинарники от анонимов)

Я все равно не понимаю тебя. В общем случае для программы, использующей плагины, тащи их и их полный рантайм в LD_LIBRARY_PATH. На сам статический бинарник это не влияет.

Ответить | Правка | К родителю #187 | Наверх | Cообщить модератору

190. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +1 +/
Сообщение от Аноним (34), 06-Янв-23, 17:28 
> для программы, использующей плагины

glibc сама по себе использует плагины, поэтому любая программа слинкованная с glibc использует плагины glibc. Какие плагины будут использованы зависит от вызываемых функций и настроек хоста пользователя. На хосте может быть установлен и настроен произвольный набор плагинов glibc, которые твой статический бинарник не сможет использовать или сможет, но результат непредсказуем (segfault например).

предупреждение как раз об этом — в общем случае статический бинарник с glibc не самодостаточен

Ответить | Правка | К родителю #188 | Наверх | Cообщить модератору

191. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от GOrilla (?), 06-Янв-23, 17:33 
>> для программы, использующей плагины
> glibc сама по себе использует плагины, поэтому любая программа слинкованная с glibc
> использует плагины glibc. Какие плагины будут использованы зависит от вызываемых функций
> и настроек хоста пользователя. На хосте может быть установлен и настроен
> произвольный набор плагинов glibc, которые твой статический бинарник не сможет использовать
> или сможет, но результат непредсказуем (segfault например).
> предупреждение как раз об этом — в общем случае статический бинарник с
> glibc не самодостаточен

Статическая версия glibc.a не использует плагины, Вы заблуждаетесь. Нужно только плагин программы и его зависимости. Об этом и предупреждают.

Ответить | Правка | К родителю #190 | Наверх | Cообщить модератору

193. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от GOrilla (?), 06-Янв-23, 17:35 
>>> для программы, использующей плагины
>> glibc сама по себе использует плагины, поэтому любая программа слинкованная с glibc
>> использует плагины glibc. Какие плагины будут использованы зависит от вызываемых функций
>> и настроек хоста пользователя. На хосте может быть установлен и настроен
>> произвольный набор плагинов glibc, которые твой статический бинарник не сможет использовать
>> или сможет, но результат непредсказуем (segfault например).
>> предупреждение как раз об этом — в общем случае статический бинарник с
>> glibc не самодостаточен
> Статическая версия glibc.a не использует плагины, Вы заблуждаетесь. Нужно только плагин
> программы и его зависимости. Об этом и предупреждают.

Смотрите код, там или явные ifdef, или "откроем библиотеку, а если нет, поищем и без неё в самом бинаре".

Ответить | Правка | К родителю #191 | Наверх | Cообщить модератору

195. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Аноним (34), 06-Янв-23, 17:40 
так "не использует плагины" или "откроем библиотеку"?

> поищем и без неё в самом бинаре".

и что произойдет, если в бинаре нет подходящей?

Ответить | Правка | К родителю #193 | Наверх | Cообщить модератору

189. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от GOrilla (?), 06-Янв-23, 17:19 
>> glibc сама не использует dlopen
> просто грепом по исходникам:
> inet/idna.c
> nss/nss_module.c
> iconv/gconv_dl.c
> даже твой статический sqlite3 смотрит в /etc/nsswitch.conf, а потом ищет и открывает
> libnss_files или libnss_sss. (да, я запускаю бинарники от анонимов)

Нет, не вводи нас в заблуждение, при статической линковке там обходные пути.

Ответить | Правка | К родителю #187 | Наверх | Cообщить модератору

192. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Аноним (34), 06-Янв-23, 17:33 
какие?

$ strace 2>&1 ./sqlite3 | grep ^open
openat(AT_FDCWD, "/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/lib64/ld-linux-x86-64.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
openat(AT_FDCWD, "/user/.sqliterc", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/user/.sqlite_history", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/share/terminfo/x/xterm", O_RDONLY) = 3
openat(AT_FDCWD, "/user/.inputrc", O_RDONLY) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/inputrc", O_RDONLY) = 3

Ответить | Правка | К родителю #189 | Наверх | Cообщить модератору

194. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от GOrilla (?), 06-Янв-23, 17:37 
>[оверквотинг удален]
> openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
> openat(AT_FDCWD, "/lib64/libnss_files.so.2", O_RDONLY|O_CLOEXEC) = 3
> openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
> openat(AT_FDCWD, "/lib64/ld-linux-x86-64.so.2", O_RDONLY|O_CLOEXEC) = 3
> open("/etc/passwd", O_RDONLY|O_CLOEXEC) = 3
> openat(AT_FDCWD, "/user/.sqliterc", O_RDONLY) = -1 ENOENT (No such file or directory)
> openat(AT_FDCWD, "/user/.sqlite_history", O_RDONLY) = -1 ENOENT (No such file or directory)
> openat(AT_FDCWD, "/usr/share/terminfo/x/xterm", O_RDONLY) = 3
> openat(AT_FDCWD, "/user/.inputrc", O_RDONLY) = -1 ENOENT (No such file or directory)
> openat(AT_FDCWD, "/etc/inputrc", O_RDONLY) = 3

file ./sqlite3 ?

Ответить | Правка | К родителю #192 | Наверх | Cообщить модератору

196. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Аноним (34), 06-Янв-23, 17:42 
вы же сами можете запустить файл из своего поста. Там таки вирус? :)

$ file ./sqlite3
./sqlite3: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=40a90728237f33e18647d91a31e9c9f4209c9773, for GNU/Linux 3.2.0, not stripped

Ответить | Правка | К родителю #194 | Наверх | Cообщить модератору

197. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от GOrilla (?), 06-Янв-23, 17:48 
> вы же сами можете запустить файл из своего поста. Там таки вирус?
> :)
> $ file ./sqlite3
> ./sqlite3: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked,
> BuildID[sha1]=40a90728237f33e18647d91a31e9c9f4209c9773, for GNU/Linux 3.2.0, not
> stripped

Не нервничай, истина того стоит. Открыват если есть.


sudo chroot . ./sqlite3
SQLite version 3.34.1 2021-01-20 14:10:07
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>

Вот ему неоткуда взять, и что это для нас означает?

Ответить | Правка | К родителю #196 | Наверх | Cообщить модератору

199. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Аноним (34), 06-Янв-23, 18:01 
это означает, что sqlite не использует nss, по крайней мере при простом запуске, а обращение к библиотекам происходит из-за инициализации частей самой glibc

Вряд ли sqlite вызывает getaddrinfo или что-то подобное. Вообще на мой взгляд пример неудачный, т.к. взаимодействия с чем-либо кроме файлов там вроде нет. /etc/passwd оно конечно прочитало, но я не знаю, есть ли в sqlite функции связанные с пользователями системы

Ответить | Правка | К родителю #197 | Наверх | Cообщить модератору

200. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от GOrilla (?), 06-Янв-23, 18:09 
Ну и пусть, на этой остановке я пожалуй сойду. Просто нет такой помойки в Linux чтобы libnss* с собой таскать.
Ответить | Правка | К родителю #199 | Наверх | Cообщить модератору

185. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от GOrilla (?), 06-Янв-23, 15:22 
Это предупреждение как я понял из экспериментов говорит о том, что загружаемя dlopen библиотека все равно потянет свой рантайм своих ldd зависимостей. Это не значит что мы должны переносить рантайм с бюилд системы.
Ответить | Правка | К родителю #181 | Наверх | Cообщить модератору

232. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от OpenEcho (?), 07-Янв-23, 18:29 
> Это предупреждение как я понял из экспериментов говорит о том, что загружаемя
> dlopen библиотека все равно потянет свой рантайм своих ldd зависимостей. Это
> не значит что мы должны переносить рантайм с бюилд системы.

Если не использовать читинг с мюслями, то c glibc это облом

```
    wget https://www.sqlite.org/2022/sqlite-amalgamation-3400100.zip && unzip ./sqlite-amalgamation-3400100.zip
    cd ./sqlite-amalgamation-3400100

    gcc  -O2                \
      -DHAVE_USLEEP         \
      -DSQLITE_DQS=0        \
      -DHAVE_READLINE       \
      -DSQLITE_USE_ALLOCA   \
      -DSQLITE_THREADSAFE=0 \
      -DSQLITE_ENABLE_FTS4  \
      -DSQLITE_ENABLE_FTS5  \
      -DSQLITE_ENABLE_JSON1 \
      -DSQLITE_ENABLE_RTREE \
      -DSQLITE_ENABLE_EXPLAIN_COMMENTS \
      -DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
      shell.c sqlite3.c  -static -lpthread -ldl -lm -lreadline -lncursesw -o sqlite3
```

сикля простой пример, но если добавить сетку, то с glibc будет еще веселей.

LD_LIBRARY_PATH тоже проблемно, побробуйте компильнуть PHP как статический CLI бинарник используя glibc, естественно не голый, а хотя бы с

bcmath
calendar
ctype
curl
dom
filter
gd
hash
iconv
inotify
json
libxml
mbstring
mongodb
mysqlnd
openssl
pcntl
pdo
pdo_mysql
phar
posix
redis
simplexml
sockets
sqlite3
pdo_sqlite
swoole
tokenizer
xml
xmlreader
xmlwriter
zlib

Ответить | Правка | К родителю #185 | Наверх | Cообщить модератору

202. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от OpenEcho (?), 06-Янв-23, 19:35 
> В чем проблема?

Можно глянуть на uname -a ?

И: ldd sqlite3

Ответить | Правка | К родителю #166 | Наверх | Cообщить модератору

203. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Хмм... (?), 06-Янв-23, 20:08 
>> В чем проблема?
> Можно глянуть на uname -a ?
> И: ldd sqlite3

$ uname -a
Linux whyberg 5.16.0-0.bpo.3-amd64 #1 SMP PREEMPT Debian 5.16.11-1~bpo11+1 (2022-03-02) x86_64 GNU/Linux


$ ldd ./sqlite3
        linux-vdso.so.1 (0x00007fff5ebab000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fbb1363d000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fbb134f9000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fbb134f3000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fbb134d1000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbb132fc000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fbb1381f000)

Ответить | Правка | Наверх | Cообщить модератору

231. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от OpenEcho (?), 07-Янв-23, 18:01 
вот когда  ldd ./sqlite3 начнет выводить для той же самой строки компиляции:

```
    not a dynamic executable
```

вот тогда можно будет смело сказать что компиляция статическая и бинарник можно таскать в пределах платформы и не нарываться на облом что glibc не совместима

Ответить | Правка | Наверх | Cообщить модератору

251. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Хм...email (?), 09-Янв-23, 14:08 
и че дальше :) ?
$ ldd sqlite3
not a dynamic executable


> вот когда  ldd ./sqlite3 начнет выводить для той же самой строки
> компиляции:
> ```
>     not a dynamic executable
> ```
> вот тогда можно будет смело сказать что компиляция статическая и бинарник можно
> таскать в пределах платформы и не нарываться на облом что glibc
> не совместима

Ответить | Правка | Наверх | Cообщить модератору

254. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от OpenEcho (?), 10-Янв-23, 02:08 
> и че дальше :) ?

А слабо самому (ну или "других мужиков с подвала" попросить) попробывать на Alpine Linux и убедится - Работать, не будет

Ответить | Правка | Наверх | Cообщить модератору

259. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Хм...email (?), 10-Янв-23, 11:41 
Alpine Linux принципиально?

$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
$ uname -a
Linux cbttest 3.10.0-957.27.2.el7.x86_64 #1 SMP Mon Jul 29 17:46:05 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
$./sqlite3
SQLite version 3.40.1 2022-12-28 14:03:47
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>

напомню что собиралось все на машине вот такой
$ uname -a
Linux sqlitetest 5.16.0-0.bpo.3-amd64 #1 SMP PREEMPT Debian 5.16.11-1~bpo11+1 (2022-03-02) x86_64 GNU/Linux

ну и вишенкой оно и в chroot(пустой каталог с бинарником sqlite3) работает...

Ответить | Правка | Наверх | Cообщить модератору

264. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от OpenEcho (?), 10-Янв-23, 20:31 
> Alpine Linux принципиально?

Да, в силу того что он основой в докерах, а еще есть QNX, Void, Oasis, Chimera, Dragora, KISS... a еще чтобы не нарваться в лямбде на облом типа Opps, Glibc 2.xx not found

> cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)

на нем есть glibc,  поэтому и работает. В предупреждениях компилятора явно говорится что такая "статика" будет работать только там где есть glibc в системе, т.е. тоже самое что и с динамикой, - зависимость от внешей либы.

Я единстенное, что призаню, что пример с sqlite был плохой идеей (хотя если нацеплять на него полезные плагины, то он загнется тоже 100%)

В chroot оно работает только потому, что там нужна только функция поиска домашнего каталога, на что сикля ложет просто балалайку.

Весь смысл разговора был в том, - что с современным glibc нельзя сделать полноценный статический бинарник, и мой пример с getaddrinfo наглядно это показывает, выкручивайтесь как хотите с ключами для компилятора, но в системах где нет glibc - оно работать не будет

Ответить | Правка | Наверх | Cообщить модератору

267. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от OpenEcho (?), 12-Янв-23, 16:25 
Для любителей ставить минусы, - домашняя задачка:

https://www.opennet.me/openforum/vsluhforumID3/129432.html#256

Компильте со "статической glibc", а потом поробуйте резолвнуть ваш любимый сайт запуская бинарник поd Alpine Linux


Ответить | Правка | К родителю #141 | Наверх | Cообщить модератору

207. "Представлен Blink, эмулятор x86-64, опережающий QEMU по прои..."  +/
Сообщение от Аноним (207), 06-Янв-23, 20:50 
У нас в подвале pthreads при статической сборке на свежей убунте отвалились. Какой-нибудь join теперь пустышка, и нормально не подхватывается.
Ответить | Правка | К родителю #6 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру