LINUX.ORG.RU
ФорумAdmin

Apple libc и вообще apple environment на Linux

 , , , ,


1

1

Значит учусь я в «школе 21», мы там кодим на маках, но в условиях ковида нам можно сдавать проекты удаленно.

Проблема заключается в том что по хорошему проект перед сдачей нужно тестировать на маке, что бы удостовериться что он нормально функционирует в его среде. Дома у меня мака нет, и хакинтош я не хочу, меня более чем устраивает линукс. Виртуалка для макоси выглядит костыльно, ибо headless она работать не умеет, да и при условии что контейнеры для меня на текущий момент темный лес - это отличная возможность в них разобраться.

В общем появилась у меня идея с помощью systemd-nspawn создать контейнер, в котором будет среда максимально напоминающая мак. То есть установить маковскую libc, а так же ar, make, clang и прочие тулзы тех же версий что на маке. И мне кажется что это должно сработать, ведь никаких библиотек кроме стандартной мы не используем, а утилиты будут такие же.

Но т.к. я не очень опытен у меня есть пара вопросов. Как найти/собрать/где взять маковскую стандартную либу для си и плюсов? Чего я не учел и почему оно не даст ожидаемого эффекта?



Последнее исправление: juf (всего исправлений: 1)

Ответ на: комментарий от Stanson

За ссылку спасибо, если не найду контейнерного решения - присмотрюсь. Но хотелось бы все-таки сделать это контейнером, потому что так я смогу изучить контейнеры (systemd-nspawn в частности) и то из чего состоит окружение необходимое для разработки.

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

juf
() автор топика
Последнее исправление: juf (всего исправлений: 1)

Ничего тебе не надо, libc стандартизирована. Ты же должен сдавать код, а не бинарник. Если Твоя программа на сях / плюсях работает по разному на разных libc то твоя программа неверная или libc кривая. Весь вопрос в версиях одни и тебе версии clang/gcc/ar/make на разных платформах это одно и тоже. Вас же там не учат писать специфичный для макоси код? Если так, сомнительное обучение конечно, но тогда как выше сказали виртуалку и всё. Хотя вот у меня хрен запускается.(года 2 назад пробовал)

Но если уж так то наверное тебе нужен darwin https://ru.wikipedia.org/wiki/Darwin.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от LINUX-ORG-RU

Да, нас то не учат писать код специфичный для макоси, но например в проекте libft (суть которого переписать часть стандартных функций вроде atoi и memmove) пиры (ученики), которые должны проверить твой проект перед автоматической системой не редко снижают оценку или ставят 0, если твоя функция работает не так же как системная, даже если это UB. Я пытаюсь просветить пиров, но пока не очень успешно. Кроме того в том же проекте нужно сделать мейкфайл, который должен собирать либу, но не релинкаться и добавлять в архив только измененные файлы, для чего нужно у ar отключить детерминистичный режим, что на линуксе делается опцией U, а в макоси является режимом по умолчанию, и опции U у ar там вовсе нет.

Что бы избежать подобных проблем я все это и задумал.

Так же есть история с тем, что если в макоси с помощью touch создать пустой файл, то потом ar напрочь отказывается складировать в него объектники, что на линуксе работает без каких-либо проблем. Я думаю что это связанно с тем как линукс и макось определяет тип файла и я не знаю как это решить.

juf
() автор топика
Последнее исправление: juf (всего исправлений: 2)
Ответ на: комментарий от juf

автоматической системой

Аааа, вон оно чего. Ну тут да фигово конечно что не челобрек проверяет.

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

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Не знаю как сейчас, но N лет назад с виртуалками было не всё так просто. У мака ограниченный набор железа, самый простой способ поднять vm было найти уже готовый вариант с перепиленными дровами.

anc ★★★★★
()

ибо headless она работать не умеет

Вы про macOS ? Если да, то ещё как умеет, vnc+ssh из каробки.

anc ★★★★★
()

мы там кодим на маках

🐵

кодить нужно в ide, а не на маках

anonymous
()

Проблема заключается в том что по хорошему проект перед сдачей нужно тестировать на маке… Дома у меня мака нет

Значит не нужно. Не надо решать административные проблемы техническими средствами.

t184256 ★★★★★
()
Ответ на: комментарий от wandrien

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

t184256 ★★★★★
()
Ответ на: комментарий от anonymous

Так Deprecated. Cказано же было осенью 2020, что за два года перейдём на ARM.

А что, для ARM они libc что-ли свою полностью переписали, что-ли?

Проще уж Mac Mini купить - фапабельгая штука.

Ну так вроде топикстартеру не дрочить надо, а проверить работоспособность софтины. Нафига на это деньги тратить?

Stanson ★★★★★
()
Ответ на: комментарий от anonymous

Так Deprecated. Cказано же было осенью 2020, что за два года перейдём на ARM.

1. И от этого все остальные маки превратились в тыкву.
2. Они rosetta 2 запилили.

Проще уж Mac Mini купить - фапабельгая штука.

Вы для полета в «турцию» всегда самолёт себе прикупаете? А что - «фапабельгая штука».
Если уж говорить про миньку, то нифига «фапабельного» там нэма. Крузис и то не потянет.

anc ★★★★★
()
Ответ на: комментарий от anc

Вот я и говорю что у меня не получилось запустить. Но выше советуют, так что пусть попробует.

LINUX-ORG-RU ★★★★★
()

Как ты вообще бассейн прошёл с таким уровнем?!? Марш читать Таненбаума!!111адин

Шучу.

Чего я не учел и почему оно не даст ожидаемого эффекта?

Контейнеры — это по сути запуск другого user-mode окружения под тем же ядром.

MacOS использует ядро Darwin (построенное на архитектуре BSD), которое, очевидно, не Linux.

libc — это библиотека, выставляющая наружу именованные стандартизованные функции (POSIX), и внутри вызывающая функции ядра (SYSCALL). Но при этом ничего не мешает другим приложениям уровня пользователя (в т.ч. другим системным библиотекам и приложениям) дёргать сисколлы напрямую.

Если ты возьмёшь libc и утилиты от мака, они будут использовать ядерные вызовы от darwin. Которые вовсе не обязаны соответствовать линуксовым.

Таким образом, для запуска в контейнере понадобится некая прослойка, эмулирующая для пользовательского окружения интерфейс Darwin, и переводящая его системные вызовы в нативные для запущенного ядра. Примерно так и работает одиозная WSL.

Итого: если это не исследовательский проект, а просто необходимость работать с мак-окружением — тебе нужна полноценная виртуализация (KVM, гипервизоры, qemu, ит.д.), либо готовые решения на её основе.

anonymous
()
Ответ на: комментарий от xmikex

Доступ есть, и она запускается на школьных маках удаленно. Но это заключительный этап проверки. Сначала ты должен проверить 3 пиров, потом тебя должны проверить трое (на этом этапе ты потратил уже как минимум 3 часа) и только потом тебя один раз проверяет система.

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

juf
() автор топика
Ответ на: комментарий от anonymous

А вот и то чего я не учел) Спасибо! Тогда пойду внимательнее присмотрюсь к виртуалкам.

Ты тоже учишься здесь? Может ник скинешь?)

juf
() автор топика
Ответ на: комментарий от juf

Ты тоже учишься здесь?

Нет, но наслышан. Много талантливых ребят берутся подтягивать сишку, чтобы попытать свои силы, доводилось общаться.

Успехов в учёбе!)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.