LINUXTALKS.CO

FreeBSD install update upgrade [ основной тред по FreeBSD ]

 ,

L


0

1

@odalist, ты любишь такие посты, так что держи.

Прожив годик на F12, освоился и понял, что аналога LVM+cryptsetup+XFS на ней нет. Решил переехать на ZFS (который теперь взят из ZFS на Linux и благодаря этому появилось шифрование). Так что вот последних несколько дней занимался апдейтом основной домашней машины с 12.4 на 13.1 и просидел без Хов в голой консоли.

Первый день, еще в тот четверг, переносил данные.

>>> cut tech detail 
Хотелось мне выяснить, как лучше выравнивать чанки ZFS на хардварном рейде (хорошо, что у нас не нет @iZEN, а то его опять бы кондрашка хватила). Пробовал задавать геометрию штратными олд-скульными UNIX-средствами, пробовал создавать zpool сразу с разными ashift. У меня была классная теория, что чанки ZFS размером 128k нужно бить кусками по количеству страйпов...
Пробовал отключать чексумы...
<<< cut

В итоге оказалось, что все мои теории - это все фигня. Зато я обнаружил, что год назад выключил кеши на запись на контроллере и поэтому у меня все тормозит. Так что могу гордо заявить, что решил свою проблему:

всеравно у меня звук на FreeBSD лагает:( фиг знает, в чем дело.

@JamesHolden, звук в порядке.

@odalist, заодно решил проблему, когда у меня из-за тормозов дисковой системы переполнялся журнал (не ZFS! одно из изобретений FreeBSD в махровые дни) на диске и машина падала. официально defined поведение [ развел лапами ]

Пока я с этим упражнялся на удаленной машине все три дня копилировались пакеты. Под это дело пришлось добавить еще 16Gb swap: rust, llvm…

@cocucka классический OOM на FreeBSD отстреливает любые соседний процессы, отсюда жалобы на форум, я думаю. Зачем вы, программисты, с нами это делаете и придумываете такие алгоритмы? … [ развел лапами ]

@odalist, кстати, chrome вообще сутки собирался. И это на 3.4Ghz!

Вцелом все проапдейтилось и что мне нравится на FreeBSD, с точками отката.

witch ~ # bectl list
BE                                Active Mountpoint Space Created
12.4-RELEASE_2023-02-12_010451    NR     /          13.7G 2023-02-12 01:04
12.4-RELEASE_2023-02-16_145134    -      -          91.0M 2023-02-16 14:51
13.1-RELEASE-p6_2023-02-16_145625 -      -          3.97M 2023-02-16 14:56
13.1-RELEASE-p6_2023-02-18_123041 -      -          4.54M 2023-02-18 12:30

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

Что сломалось?

Ну, во-первых, сломался ping! Это теперь программа с двумя ключами -4/-6, но если не задать ни один, она работать не может. Без гугла это никак не выяснить:( Так что обходился без пинга. Теперь вот придется делать обвзяку из альясов, выяснять версию FreeBSD, добавлять ключ… Можно еще багрепорт отправить…

Самое главное сломался OpenVPN. Почему он не может теперь создавать интерфейс, я так и не понял. Но так как я не догадался сначала установить nvidia video driver, а начал компилять все пакеты одной пачкой, то три дня прожил без гугла.

И вообще OpenVPN меня всегда (лет 15+ примерно) подбешивал кучей опций и сложностью настроек на разных платформах, но WG (@Kaschenko) во FreeBSD еще не появился. Но, когда сидишь без интернета, плюс в том, что начинаешь читать мануалы. Я случайно увидел простой man по подянитю IPSec … и поднял!

А чего? Как работает IPSec я имел представление, но мне всегда казалось тупостью два его возможных режима работы. А вышло довольно круто! Если OpenVPN необходим хендшейк для установления сессии, то здесь все выглядит элегантно.

ipsec0: flags=8151<UP,POINTOPOINT,RUNNING,PROMISC,MULTICAST> metric 0 mtu 1400
	tunnel inet XX.XX.XX.XX --> YY.YY.YY.YY
	inet AA.AA.AA.AA --> BB.BB.BB.BB netmask 0xffffff00
	groups: ipsec
	reqid: 200
	fib: 1
	nd6 options=9<PERFORMNUD,IFDISABLED>

FreeBSD тут сразу радует, что можно из ifconfig сразу дружить интерфейс с таблицами маршрутизации. И работать теоретически должно быстрей.

Авторы FreeBSD подложили грабли и засунулу sysctl хуков, которые изымают часть сетевых пакетов из оборота. Поотлаживав в свое удовольствие, я наконец догадался найти (а вы помните, что браузер еще компилируется, так что нашел сам без гугла, по логике вещей).

net.inet.ipsec.filtertunnel

Осталось перенести все данные и выяснить, насколько действительно проседает скорость ZFS, если заполнить весь диск.

★★☆☆☆
Ответ на: комментарий от JamesHolden

там автоматическая аллокация памяти? смысл ведь исключить человеческую ошибку в сложном коде, поручив управление памятью программе. и вот написали memory-safe алгоритм. он непротиворечивый и решает проблему выделения/освобождения памяти в стеке и в куче. чем ты недоволен?

почему алгоритм в java runtime тебя устраивает, а алгоритм, основанный на четкой логике в момент компиляции, нет. компилятор содержит счетчик аллокаций, отслеживает выделение памяти, сам следит, в какой момент ее безопасно освободить. находит твои попытки use-after-free и заставляет переписывать код безопасно.

компилятор c/c++ дает тебе свободу использования malloc/free, rust-компилятор берет это на себя и накладывает ограничения на использование переменных. в чем проблема???

crypt    
★★☆☆☆
Последнее исправление: crypt (всего исправлений: 8)

FreeBSD / Chrome
Ответ на: комментарий от JamesHolden

С++ делает для всех

Ага, щаз… никогда не видел сегфолтов в программах проекта КДЕ?

Чем он не устроил?

Самая большая претензия к языкам С/С++ это «Undefined behavior».

Minona    
★★★★★
Windows / Yandex
Ответ на: комментарий от crypt

там автоматическая аллокация памяти?

Да.

почему алгоритм в java runtime тебя устраивает

Потому что он работает в рантайме, и следовательно, он может решать эту задачу.

В компайлтайме это нормально не решается (иначе бы никто джавы с виртуальными машинами не делал). А ограниченно, в той же степени что и в расте - решено уже в C++ двадцать лет назад.

и накладывает ограничения

Чтобы написать программу, придется попросить его снять ограничения. И дальше все то же самое как в C++, только через зад.

JamesHolden    
★★★★★★
Android / Chrome
Ответ на: комментарий от JamesHolden

А ты никогда не видел учебника по C++

Как учебник может избавить от сегфолтов в КДЕ?

А почему у меня в джава сегфолты, например?

Потому что виртуальная машина жабы написана на С++ 😏

Minona    
★★★★★
Windows / Yandex
Ответ на: комментарий от JamesHolden

Да.

C++ позволяет dangling pointers или null pointers, а rust нет. таким образом C++ всеравно не является memory safe языком. у Rust приоритет на безопасности. чтобы точно было. rust более продвинут в этом отношении.

В компайлтайме это нормально не решается (иначе бы никто джавы с виртуальными машинами не делал).

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

Чтобы написать программу, придется попросить его снять ограничения.

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

crypt    
★★☆☆☆
Последнее исправление: crypt (всего исправлений: 3)

FreeBSD / Chrome
Ответ на: комментарий от Minona

Как учебник может избавить от сегфолтов в КДЕ?

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

Потому что виртуальная машина жабы написана на С++

А почему не на жабе?

JamesHolden    
★★★★★★
Android / Chrome
Ответ на: комментарий от JamesHolden
1: C++ allow you do anything, including weird things not advocated by its later pattern suggestions. C++ published many pattern and style books to try to tell you "don't do this" or "do things that way", but never set any hard boundary on the language and compiler itself.

2: Go give you freedom casue it doesn't know how to differentiate good or bad until it sees the results, so it follows you and clean your ass behind you, which takes computing resources.

3: Rust not only prevent you from doing wrong thing, but also prevent you from doing vague things. As long as you follow the strict rules, there is no need to clean your ass behind you.
crypt    
★★☆☆☆
FreeBSD / Chrome
Ответ на: комментарий от crypt

C++ позволяет dangling pointers или null pointers, а rust нет.

И раст позволяет. Иначе на нем нельзя было бы писать программы. Просто в расте это спрятано в «опасные» блоки, а в C++ на совести программиста не использовать указатели в прикладном коде (компилятор не запрещает, запрещает учебн к который никто не открывал).

Разница только в этом. В расте сделали, чтобы программист-обезьяна явно получал по рукам за то что обезьяна. В С++ программисту предлагается просто не быть обезьяной.

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

ищи способы не снимать ограничение

Их нет. Ты не можешь сделать нативный код безопасным, потому что в железе нет механизмов обеспечения этой безопасности.

JamesHolden    
★★★★★★
Android / Chrome
Ответ на: комментарий от JamesHolden

В своей докторской диссертации Ральф Юнг (англ. Ralph Jung) формально доказал потокобезопасность и безопасность управления памятью, использовав логику разделения в созданной им модели RustBelt и инструменте Iris
https://publikationen.sulb.uni-saarland.de/bitstream/20.500.11880/29647/2/thesis-screen.pdf

Для С++ таких доказательств нет.

Minona    
★★★★★
Windows / Yandex
Ответ на: комментарий от JamesHolden

И раст позволяет. Иначе на нем нельзя было бы писать программы. Просто в расте это спрятано в «опасные» блоки

у нас какой-то глупый разговор получается.

я говорю: тебе дали memory-safe инструмент.
ты: а я всеравно буду его использовать unsafe, потому что я так привык с с++!

знаешь, это не проблема языка сейчас…

@cocucka программист и он за rust.

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

FreeBSD / Chrome
Ответ на: комментарий от crypt

Собственно тут написано именно то о чем я говорю. В C++ надо знать букварь. В расте тебе, якобы, не так надо потому что компилятор не даст сделать опасное. Но на практике, тебе надо знать как бороться с ограничениями компилятора чтобы все-таки написать программу, вопреки ему. И для этого придется намного больше читать растовый букварь.

Что выигрывает программист - не понятно.

JamesHolden    
★★★★★★
Android / Chrome
Ответ на: комментарий от JamesHolden

читать растовый букварь.

читать вообще полезно. читай и пиши safe код.

Что выигрывает программист - не понятно.

выигрывает пользователь, когда программы перестают падать.

но есть dumb-ass программисты, которые всеравно будут считать себя невмеру крутыми, не совершающими ошибки и использующими unsafe язык:(((

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

crypt    
★★☆☆☆
Последнее исправление: crypt (всего исправлений: 3)

FreeBSD / Chrome
Ответ на: комментарий от JamesHolden

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

Зачем? Пиши тогда на С++.

Minona    
★★★★★
Windows / Yandex
Ответ на: комментарий от JamesHolden

В C++ надо знать букварь.

и ты всеравно можешь накосячить. более того, ты готов косячить

Просто в расте это спрятано в «опасные» блоки

даже на расте.:(

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

crypt    
★★☆☆☆
FreeBSD / Chrome
Ответ на: комментарий от crypt

Я тебе в десятый раз повторяю. Мне не могли дать мемори сейф инструмент, потому что на нем нельзя было бы написать программы.

Вот же я гад, правда? Хочу чтобы на языке еще и программы писать можно было, а не только дрочить на баззворды!

JamesHolden    
★★★★★★
Android / Chrome
Ответ на: комментарий от JamesHolden

да я на 100% уверен, что ты тоже не пишешь ядро ОС. поэтому твое отрицание Rust какое-то чисто религиозное: мне он не нравится, значит, он плохой.

crypt    
★★☆☆☆
FreeBSD / Chrome
Ответ на: комментарий от JamesHolden

на нем нельзя было бы написать программы.

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

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

FreeBSD / Chrome
Ответ на: комментарий от crypt

Ну вот пусть сосиска придет и пояснит, как написать стандартную библиотеку раста без использования unsafe. Я с интересом послушаю

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

Android / Chrome
Ответ на: комментарий от crypt

Никто не пишет. Там unsafe везде в стандартной библиотеке, о чем мы говорим вообще.

На чистом safe rust ничего написать нельзя кроме 2+2

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

Android / Chrome
Ответ на: комментарий от JamesHolden

Мне не могли дать мемори сейф инструмент, потому что на нем нельзя было бы написать программы.

А вот там в докторской написано что дали.
И на нём пишут программы.

Minona    
★★★★★
Windows / Yandex
Ответ на: комментарий от Minona

А на заборе написано одно, а за ним дрова. На safe rust целиком программ в природе нету. Ну или покажи их, посмотрим. Может в диссерах академические примеры есть.

JamesHolden    
★★★★★★
Последнее исправление: JamesHolden (всего исправлений: 2)

Android / Chrome
Ответ на: комментарий от JamesHolden

На чистом safe rust ничего написать нельзя кроме 2+2

fine by me

UNIX way rule number 2:

  1. small programs that do only one thing, but do it well
crypt    
★★☆☆☆
Последнее исправление: crypt (всего исправлений: 3)

FreeBSD / Chrome
Ответ на: комментарий от crypt

Чё? Джим и прав, и не прав насчёт unsafe.

Прав в том, что в расте в стандартной библиотеке полно unsafe. Да, много чего без этого не написать. Работа с памятью, вся хуйня.

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

cocucka    
★★★★★★★★★★
Ubuntu / Firefox
Ответ на: комментарий от cocucka

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

Я говорил что на чистом safe нельзя целиком сделать.

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

JamesHolden    
★★★★★★
Android / Chrome
Ответ на: комментарий от cocucka

Разница только в том, что в расте явный unsafe, а в плюсах ты якобы можешь плескануть указатель в любом месте. Но на это статический анализ есть, зачем целый новый язык ваять с кучей ограничений

JamesHolden    
★★★★★★
Android / Chrome
Ответ на: комментарий от JamesHolden

Я говорил что на чистом safe нельзя целиком сделать.

ну это то же что @cocucka и говорит

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

crypt    
★★☆☆☆
FreeBSD / Chrome
Ответ на: комментарий от cocucka

что в расте в стандартной библиотеке полно unsafe

она статически включается при компиляции в программу или как? когда эти куски участвуют?

crypt    
★★☆☆☆
FreeBSD / Chrome
Ответ на: комментарий от JamesHolden

зачем целый новый язык ваять с кучей ограничений

ограничения делают его safe, в отличие от с++, на котором ты «якобы можешь» писать безопасный код.

crypt    
★★☆☆☆
FreeBSD / Chrome
Ответ на: комментарий от crypt

В библиотеках unsafe, в твоем личном коде safe. Через библиотеки ты работаешь с ОС, с памятью, с внешними данными. То есть unsafe из них используется у тебя всегда, постоянно.

Но - ты его не писал, это стандартный код из библиотек. Твой прикладной код может быть safe.

JamesHolden    
★★★★★★
Android / Chrome
Ответ на: комментарий от JamesHolden

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

Да, именно. В с++ есть средства для написания безопасного кода, std::unique_ptr, RAII и т.д. Проблема только в том, что они опциональны. Семантика языка не поощряет их использование.

Раст же в этом плане более строг, ибо тебе придётся писать обёртки для любого небезопасного кода.

cocucka    
★★★★★★★★★★
Ubuntu / Firefox
Ответ на: комментарий от crypt

Ты не избавишься от легаси. Ты не можешь переписать весь мир с нуля на расте.

А взаимодействие любой safe песочницы с unsafe легаси средой сводит на нет всю безопасность.

Поэтому, как выше заметил @cocucka, и в джаве есть «unsafe» для работы с внешним миром. И как следствие, джава проекты точно так же сегфолтятся. Просто сегфолт будет локализован в unsafe блоке.

JamesHolden    
★★★★★★
Android / Chrome
Ответ на: комментарий от cocucka

Проблема только в том, что они опциональны. Семантика языка не поощряет их использование.

Еще раз. Примени статический анализатор сделай их обязательными.

Что мешает это сделать?

JamesHolden    
★★★★★★
Android / Chrome
Ответ на: комментарий от JamesHolden

Статический анализатор вещь хорошая, но это не панацея. Его всегда можно отключить/проигнорировать/неправильно настроить.

Вчера, вот, обсуждали с коллегами баг с NPE, который должен был выловить статический анализатор, но не выловил, собака. А если бы это был код на котлине (который заставляет тебя писать null-безопасный код), а не на чистой яве, то этого бага бы не было. Вот так же и с с++ vs rust.

cocucka    
★★★★★★★★★★
Ubuntu / Firefox
Ответ на: комментарий от JamesHolden

Всегда нужно исходить из аксиомы, что «все программисты – петухи» и чем больше у них препятствий к написанию небезопасного кода, тем лучше.

cocucka    
★★★★★★★★★★
Ubuntu / Firefox

@Minona

В реальной жизни, если мы говорим про наш десктоп - ты допустим пишешь на расте софтину, которая имеет GTK интерфейс. А GTK то библиотека, написанная на C. Значит, она сама, и вся растовая прослойка для взаимодействия с ней - небезопасны по определению. А дальше, в этой машинерии происходит сегфолт или переполнение буфера, и валит твое растовое приложение нафиг. Несмотря на то, что прикладной код у тебя safe.

Те же байки писали 25 лет назад про Java, что все будет безопасно, вы не можете переполнить буфер, не можете освободить дважды и далее по списку. Через 25 лет сосиска пишет, что они в чистой джаве статическим анализатором NPE ловят. Вот это теория/реальность.

Так же и с растом будет. Как невозможно все на свете переписать на чистой Java, так и на расте не перепишут.

JamesHolden    
★★★★★★
Linux / Chrome