Новый шрифт для кода и терминала
Зацените экспериментальный шрифт, сделанный на основе B612 mono и PT mono (шрифт рассчитан на использование со slight hinting).
Зацените экспериментальный шрифт, сделанный на основе B612 mono и PT mono (шрифт рассчитан на использование со slight hinting).
А вам не кажется, что C++ — это аналог иксов в области языков программирования? Основные выпады в сторону иксов применимы и к плюсам. Иксы и С++ появились примерно в одно и то же время, в середине 80-х. За это время обросли кучей всего. Как и с иксами, никто уже не понимает полностью того, как работает С++ (говорят, даже Страуструп!). Как и с иксами, известные/заслуженные плюсовики переметнулись на другие языки и даже их активно развивают (привет, Александреску!). Как и иксы, С++ небезопасен, а вот rust безопасен (возьмём rust как wayland). Что там ещё? Аналог иксового тиринга — отсутствие модулей в плюсах. Погодите, модули же вроде как завезли, ну так и в иксах есть убирающие тиринг опции типа «TearFree», но кого это волнует? Вообще, недостатки С++, которые решил тот же rust, можно долго перечислять. Понятное дело, что С++ насовсем ещё долго не исчезнет, ну так и в вайланде есть Xwayland для легаси.
Итого, сейчас за С++ топят только луддиты. Все на rust! Доказано?
Впервые представлен широкой публике язык программирования Hare, который разрабатывает Дрю ДеВолт (автор Sway и SourceHut) со своей командой последние пару лет.
Hare — язык для системного программирования с минималистичным рантаймом, статической типизацией и ручным управлением памятью.
Исходный код компилятора предоставляется под лицензией GPLv3, а для стандартной библиотеки под лицензией MPL (Mozilla Public License). Компилятор Hare не основан на LLVM или GCC, а использует легковесный qbe. Программы на Hare не линкуются с libc по умолчанию.
( читать дальше... )
>>> Подробности
Помните недавнюю новость по атаку https://www.opennet.ru/opennews/art.shtml?num=56889, в которой использовалась похожесть интерфейса?
Видно, что плоскота внешне практически нивелирует разницу между веб-интерфейсом и десктопным.
Вообще, почему плоскота интерфейсов опять стала популярной? Может, вы думали, это просто мода, которая быстро пройдёт? Нет, не дождётесь!
Вы когда-нибудь задавались вопросом, зачем доминирующим корпорациями понадобилось насаждать эту «моду»?
Кто-то говорит, что так красивее и проги становятся «легковеснее». Сомнительно. Многие считают как раз наоборот.
По-моему, это делается для того, чтобы все побольше привыкали запускать работающий из веба софт вместо оффлайнового (так как вебня преимущественно плоская, то подгоняют декстопное под веб, а не наоборот, ведь подгонять под примитивное легче). В итоге сделать так, чтобы оффлайнового софта у пользователей вообще не было. Всё в каком-нибудь «облаке» корпорации или типа того. Прикиньте, к каким последствиям в таких условиях привёл бы внезапный уход/блокировка со стороны этих корпораций. Тут ещё можно было бы порассуждать про зонды и про то, что это идёт вразрез со свободным софтом, который считается таковым, если обладает четырьмя важнейшими свободами https://www.gnu.org/philosophy/free-sw.ru.html
Говорят, с кастомизацией интерфейса в последних версиях винды/макоси настолько плохо, что даже удалены настройки выбора типа шрифтов для элементов интерфейса. Как люди это терпят?
Наверняка многие из вас негодуют по поводу разжиревшего софта (или читали от других об этом, типа такого https://tonsky.me/blog/disenchantment/ru/ ). Одобряющие же постоянно растущую жручесть софта говорят так: «зачем беспокоиться, компьютеры достаточно быстрые». То есть предпочитают докупить железа и пользоваться bloatware вместо того, чтобы поддерживать эффективный софт. При этом bloatware, зачастую, не только не даёт новых полезных возможностей для пользователя, но лишает и тех, что были ранее.
Последнее время популярна тема импортозамещения, и тут меня осенило: а ведь когда сравнивают всякие «устаревшие» эльбрусы на реальных (типичных) пользовательских задачах, то ориентируются-то на bloatware! Это значит, какое бы крутое железо не было, оно будет считаться неустаревшим очень короткий срок, ибо прожорливый софт сведёт все наработки на нет. Очевидно, при правильном подходе к софту компьютер уровня Пентиум 3 (привет Столярову!) будет работать эффективнее новейших многоядерников, напичканных bloatware!
Та же хрень с браузерами. Часто попадаются возгласы, что нормальный браузер написать невозможно, потому что нужно обязательно поддерживать кучу «стандартов». Выходит новая версия файрфокса с бенчмарками под bloatware-сайты типа фейсбука и гмэйла. Ну так вам никогда не угнаться за браузером с такими стандартами! Но зачем это поддерживать?
Есть такой шаблон для сборки:
# Template file for 'mtn'
pkgname=mtn
version=3.4.1
revision=1
wrksrc="mtn-v${version}/src"
makedepends="gd-devel ffmpeg-devel"
short_desc="mtn"
maintainer="none"
license="GPL2"
homepage="https://gitlab.com/movie_thumbnailer/mtn"
distfiles="https://gitlab.com/movie_thumbnailer/mtn/-/archive/v3.4.1/mtn-v${version}.tar.bz2"
checksum=d9b0154d6c7a9d2a5fc9c38e3ccd99689a5f5422caae70558181e12f0b5a3c0b
do_build() {
make
}
do_install() {
make PREFIX=/usr DESTDIR=${DESTDIR} install
}
Когда делаю xbps-src pkg mtn
, то начинается предварительная сборка из исходников самого ffmpeg вместо того, чтобы подтянуть пакеты ffmpeg и ffmpeg-devel, которые уже собраны в репах. Зачем лишний раз пересобирается? Или это только у меня такое?
Ещё подобное было, когда пакет git был в зависимостях (тоже начиналась его сборка из исходников, хотя в репах он есть).
Был такой ученый https://en.wikipedia.org/wiki/Clifford_Nass, который изучал многозадачность у людей. Как влияет на когнитивные способности одновременное использование нескольких информационных потоков https://en.wikipedia.org/wiki/Media_multitasking и частое переключение между ними. Вывод неутешителен – многозадачность отупляет.
Вот его интервью https://web.archive.org/web/20190209124009/https://www.pbs.org/wgbh/pages/frontline/digitalnation/interviews/nass.html
Вот научная статья https://www.jstor.org/stable/40484765
С отвлекающими медиа (чатами, почтой, форумами, соцсетями, «фоновым» видео и пр.) все понятно. А в плане интерфейсов выводы можно сделать такие:
Запустил тут в виртуалке новое DE под названием FyneDesk, которое написано на тулките fyne.
Там уже есть свои: эмулятор терминала, калькулятор, редактор изображений, дисплейный менеджер и прочее https://github.com/fyne-io
Как видно, все в зачаточном состоянии, но перспектива есть.
Ну и до кучи запущена OpenDiablo2 https://github.com/OpenDiablo2/OpenDiablo2
Есть ли тут те, кто отрицает влияние антропогенного фактора на глобальное потепление климата? Ознакомьтесь с научной точкой зрения:
https://theins.ru/obshestvo/196848
https://theins.ru/obshestvo/198532
Дрю Деволт объявил, что вместе с командой делает новый системный язык программирования. Сейчас им нужна помощь в написании стандартной библиотеки.
https://drewdevault.com/2021/03/19/A-new-systems-language.html
use io;
export fn main() void = {
const greetings = [
"Hello, world!",
"¡Hola Mundo!",
"Γειά σου Κόσμε!",
"Привет мир!",
"こんにちは世界!",
];
for (let i = 0z; i < len(greetings); i += 1) {
io::println(greetings[i]);
};
};
По сравнению с Си:
- More robust error handling via tagged unions
- Improved, Unicode-aware string support
- Memory safe array, slice, and pointer types (and unsafe versions, if needed)
- Direct compatibility with the C ABI for trivial C interop
- A simpler, context-free, expression-oriented syntax
- A standard library free of the constraints of POSIX or the C standard
В связи с релизом transmission 3.0, где добавлена поддержка меток (категорий), представляю вашему вниманию tui для transmission-daemon, в котором задействована эта фича.
Сам успешно пользуюсь им с прошлого года.
Системную ассоциацию для открытия торрент-файлов на такой скрипт повесил:
#!/bin/bash
xterm -e torrent_open "$1" "$2" "$3" "$4"
примерное содержимое torrent_open:
#!/bin/bash
if [ -z "$1" ]; then exit 1; fi
TORRENT_FILE="$1"
SAVE_PATH=""
CATEGORY="Default"
START_KEY=""
if ! [ -z "$2" ]; then SAVE_PATH="$2"; fi
if ! [ -z "$3" ]; then CATEGORY="$3"; fi
if ! [ -z "$4" ]; then START_KEY="-start"; fi
if echo "$TORRENT_FILE" | grep -q rutracker; then
# в зависимости от имени торрент-файла
SAVE_PATH="/media/music"
CATEGORY="music"
elif trango -add "$TORRENT_FILE" -trackers | grep -q new; then
# в зависимости от имени трекера в торрент-файле
SAVE_PATH="/media/music/new"
CATEGORY="music_new"
fi
trango -dialog -add "$TORRENT_FILE" -dir "$SAVE_PATH" -category "$CATEGORY" "$START_KEY" || read -s -n 1 -p 'Press any key to continue . . .'
Enjoy!
Кто хочет быть в курсе самых будоражащих лоровских событий?
Короче, здесь представлена десятка самых обсуждаемых тем на LOR’e (отсортированных в порядке убывания) по каждому из следующих разделов: новости, talks, development. За все годы и месяцы.
Например, за апрель 2003: https://takiz.github.io/lor-stats/2003/4.html
Как сопротивлялись паскалю, когда он ещё только набирал популярность?
Читаем текст 1982 года, переведённый на русский: http://lib.ru/ANEKDOTY/non_pas.txt
А про Си аналогичное есть? Наверняка же во времена его появления не все принимали его с распростёртыми объятиями.
https://midnight-commander.org/ticket/3165
Интересно, почему этот патч не приняли?
Я его адаптировал для современной версии mc:
diff -rU 3 a/lib/util.c b/lib/util.c
--- a/lib/util.c 2019-10-13 18:40:47.000000000 +0000
+++ b/lib/util.c 2019-11-08 14:56:06.000000000 +0000
@@ -415,7 +415,8 @@
*/
void
-size_trunc_len (char *buffer, unsigned int len, uintmax_t size, int units, gboolean use_si)
+size_trunc_len (char *buffer, unsigned int len, uintmax_t size, int units, gboolean use_si,
+ gboolean human_readable)
{
/* Avoid taking power for every file. */
/* *INDENT-OFF* */
@@ -456,6 +457,8 @@
static const char *const suffix_lc[] = { "", "k", "m", "g", "t", "p", "e", "z", "y", NULL };
const char *const *sfx = use_si ? suffix_lc : suffix;
+ unsigned base = use_si ? 1000 : 1024;
+ unsigned human_digits;
int j = 0;
if (len == 0)
@@ -486,6 +489,9 @@
size += size_remain; /* Re-add remainder lost by division/multiplication */
}
+ if (human_readable && len < 5)
+ human_readable = FALSE; /* Human readable form needs 5 characters */
+
for (j = units; sfx[j] != NULL; j++)
{
if (size == 0)
@@ -503,11 +509,28 @@
break;
}
- if (size < power10[len - (j > 0 ? 1 : 0)])
+#define DIV_ROUND(a, b) (((a) + ((b)/2))/(b))
+ if ((!human_readable && size < power10[len - (j > 0 ? 1 : 0)]) ||
+ (human_readable && size < 1000))
+ {
+ g_snprintf (buffer, len + 1, "%" PRIuMAX "%s", size, sfx[j]);
+ break;
+ }
+ else if (human_readable && DIV_ROUND (size, 10) < base && sfx[j + 1])
+ {
+ human_digits = DIV_ROUND (size, 10) * 1000 / base; /* 0 - 999 */
+ g_snprintf (buffer, len + 1, "%u.%02u%s",
+ human_digits / 100, human_digits % 100, sfx[j + 1]);
+ break;
+ }
+ else if (human_readable && DIV_ROUND (size, 100) < base && sfx[j + 1])
{
- g_snprintf (buffer, len + 1, "%" PRIuMAX "%s", size, sfx[j]);
+ human_digits = DIV_ROUND (size, 100) * 1000 / base; /* 0 - 999 */
+ g_snprintf (buffer, len + 1, "%u.%01u%s",
+ human_digits / 10, human_digits % 10, sfx[j + 1]);
break;
}
+#undef DIV_ROUND
/* Powers of 1000 or 1024, with rounding. */
if (use_si)
diff -rU 3 a/lib/util.h b/lib/util.h
--- a/lib/util.h 2019-10-13 18:40:47.000000000 +0000
+++ b/lib/util.h 2019-11-08 14:57:06.000000000 +0000
@@ -154,7 +154,7 @@
* not including trailing 0. BUFFER should be at least LEN+1 long.
*
* Units: size units (0=bytes, 1=Kbytes, 2=Mbytes, etc.) */
-void size_trunc_len (char *buffer, unsigned int len, uintmax_t size, int units, gboolean use_si);
+void size_trunc_len (char *buffer, unsigned int len, uintmax_t size, int units, gboolean use_si, gboolean human_readable);
const char *string_perm (mode_t mode_bits);
const char *extension (const char *);
diff -rU 3 a/src/filemanager/boxes.c b/src/filemanager/boxes.c
--- a/src/filemanager/boxes.c 2019-10-13 18:40:47.000000000 +0000
+++ b/src/filemanager/boxes.c 2019-11-08 14:57:59.000000000 +0000
@@ -646,6 +646,7 @@
QUICK_START_GROUPBOX (N_("Main options")),
QUICK_CHECKBOX (N_("Show mi&ni-status"), &panels_options.show_mini_info, NULL),
QUICK_CHECKBOX (N_("Use SI si&ze units"), &panels_options.kilobyte_si, NULL),
+ QUICK_CHECKBOX (N_("Human readable &size"), &panels_options.human_readable, NULL),
QUICK_CHECKBOX (N_("Mi&x all files"), &panels_options.mix_all_files, NULL),
QUICK_CHECKBOX (N_("Show &backup files"), &panels_options.show_backups, NULL),
QUICK_CHECKBOX (N_("Show &hidden files"), &panels_options.show_dot_files, NULL),
diff -rU 3 a/src/filemanager/chown.c b/src/filemanager/chown.c
--- a/src/filemanager/chown.c 2019-10-13 18:40:47.000000000 +0000
+++ b/src/filemanager/chown.c 2019-11-08 14:58:34.000000000 +0000
@@ -438,7 +438,7 @@
chown_label (0, str_trunc (fname, GW - 4));
chown_label (1, str_trunc (get_owner (sf_stat.st_uid), GW - 4));
chown_label (2, str_trunc (get_group (sf_stat.st_gid), GW - 4));
- size_trunc_len (buffer, GW - 4, sf_stat.st_size, 0, panels_options.kilobyte_si);
+ size_trunc_len (buffer, GW - 4, sf_stat.st_size, 0, panels_options.kilobyte_si, panels_options.human_readable);
chown_label (3, buffer);
chown_label (4, string_perm (sf_stat.st_mode));
diff -rU 3 a/src/filemanager/filegui.c b/src/filemanager/filegui.c
--- a/src/filemanager/filegui.c 2019-10-13 18:40:47.000000000 +0000
+++ b/src/filemanager/filegui.c 2019-11-08 15:03:18.000000000 +0000
@@ -524,7 +524,7 @@
vfs_path_free (p);
g_free (s1);
/* new file size */
- size_trunc_len (s2, sizeof (s2), ui->src_stat->st_size, 0, panels_options.kilobyte_si);
+ size_trunc_len (s2, sizeof (s2), ui->src_stat->st_size, 0, panels_options.kilobyte_si, panels_options.human_readable);
NEW_LABEL (2, s2);
/* new file modification date & time */
s1 = (char *) file_date (ui->src_stat->st_mtime);
@@ -539,7 +539,7 @@
vfs_path_free (p);
g_free (s1);
/* existing file size */
- size_trunc_len (s2, sizeof (s2), ui->dst_stat->st_size, 0, panels_options.kilobyte_si);
+ size_trunc_len (s2, sizeof (s2), ui->dst_stat->st_size, 0, panels_options.kilobyte_si, panels_options.human_readable);
NEW_LABEL (6, s2);
/* existing file modification date & time */
s1 = (char *) file_date (ui->dst_stat->st_mtime);
@@ -1090,13 +1090,13 @@
if (ui->total_bytes_label != NULL)
{
- size_trunc_len (buffer2, 5, tctx->copied_bytes, 0, panels_options.kilobyte_si);
+ size_trunc_len (buffer2, 5, tctx->copied_bytes, 0, panels_options.kilobyte_si, panels_options.human_readable);
if (!ctx->progress_totals_computed)
g_snprintf (buffer, sizeof (buffer), _(" Total: %s "), buffer2);
else
{
- size_trunc_len (buffer3, 5, ctx->progress_bytes, 0, panels_options.kilobyte_si);
+ size_trunc_len (buffer3, 5, ctx->progress_bytes, 0, panels_options.kilobyte_si, panels_options.human_readable);
g_snprintf (buffer, sizeof (buffer), _(" Total: %s/%s "), buffer2, buffer3);
}
diff -rU 3 a/src/filemanager/info.c b/src/filemanager/info.c
--- a/src/filemanager/info.c 2019-10-13 18:40:47.000000000 +0000
+++ b/src/filemanager/info.c 2019-11-08 15:03:49.000000000 +0000
@@ -178,8 +178,8 @@
{
char buffer1[6], buffer2[6];
- size_trunc_len (buffer1, 5, myfs_stats.avail, 1, panels_options.kilobyte_si);
- size_trunc_len (buffer2, 5, myfs_stats.total, 1, panels_options.kilobyte_si);
+ size_trunc_len (buffer1, 5, myfs_stats.avail, 1, panels_options.kilobyte_si, panels_options.human_readable);
+ size_trunc_len (buffer2, 5, myfs_stats.total, 1, panels_options.kilobyte_si, panels_options.human_readable);
tty_printf (_("Free space: %s/%s (%d%%)"), buffer1, buffer2,
myfs_stats.total == 0 ? 0 :
(int) (100 * (long double) myfs_stats.avail / myfs_stats.total));
@@ -237,7 +237,7 @@
#endif
{
char buffer[10];
- size_trunc_len (buffer, 9, st.st_size, 0, panels_options.kilobyte_si);
+ size_trunc_len (buffer, 9, st.st_size, 0, panels_options.kilobyte_si, panels_options.human_readable);
tty_printf (_("Size: %s"), buffer);
#ifdef HAVE_STRUCT_STAT_ST_BLOCKS
tty_printf (ngettext (" (%lu block)", " (%lu blocks)",
diff -rU 3 a/src/filemanager/panel.c b/src/filemanager/panel.c
--- a/src/filemanager/panel.c 2019-10-13 18:40:47.000000000 +0000
+++ b/src/filemanager/panel.c 2019-11-08 15:04:16.000000000 +0000
@@ -515,7 +515,7 @@
format_device_number (buffer, len + 1, fe->st.st_rdev);
else
#endif
- size_trunc_len (buffer, (unsigned int) len, fe->st.st_size, 0, panels_options.kilobyte_si);
+ size_trunc_len (buffer, (unsigned int) len, fe->st.st_size, 0, panels_options.kilobyte_si, panels_options.human_readable);
return buffer;
}
@@ -1157,9 +1157,9 @@
char buffer1[6], buffer2[6], tmp[BUF_SMALL];
size_trunc_len (buffer1, sizeof (buffer1) - 1, myfs_stats.avail, 1,
- panels_options.kilobyte_si);
+ panels_options.kilobyte_si, panels_options.human_readable);
size_trunc_len (buffer2, sizeof (buffer2) - 1, myfs_stats.total, 1,
- panels_options.kilobyte_si);
+ panels_options.kilobyte_si, panels_options.human_readable);
g_snprintf (tmp, sizeof (tmp), " %s/%s (%d%%) ", buffer1, buffer2,
myfs_stats.total == 0 ? 0 :
(int) (100 * (long double) myfs_stats.avail / myfs_stats.total));
diff -rU 3 a/src/setup.c b/src/setup.c
--- a/src/setup.c 2019-10-13 18:40:47.000000000 +0000
+++ b/src/setup.c 2019-11-08 18:25:32.000000000 +0000
@@ -131,6 +131,7 @@
panels_options_t panels_options = {
.show_mini_info = TRUE,
.kilobyte_si = FALSE,
+ .human_readable = FALSE,
.mix_all_files = FALSE,
.show_backups = TRUE,
.show_dot_files = TRUE,
@@ -410,6 +411,7 @@
} panels_ini_options[] = {
{ "show_mini_info", &panels_options.show_mini_info },
{ "kilobyte_si", &panels_options.kilobyte_si },
+ { "human_readable", &panels_options.human_readable },
{ "mix_all_files", &panels_options.mix_all_files },
{ "show_backups", &panels_options.show_backups },
{ "show_dot_files", &panels_options.show_dot_files },
diff -rU 3 a/src/setup.h b/src/setup.h
--- a/src/setup.h 2019-10-13 18:40:47.000000000 +0000
+++ b/src/setup.h 2019-11-08 15:05:51.000000000 +0000
@@ -37,6 +37,7 @@
gboolean show_mini_info; /* If true, show the mini-info on the panel */
gboolean kilobyte_si; /* If TRUE, SI units (1000 based) will be used for larger units
* (kilobyte, megabyte, ...). If FALSE, binary units (1024 based) will be used */
+ gboolean human_readable; /* If TRUE, at most three digits are used to display the size of the files. */
gboolean mix_all_files; /* If FALSE then directories are shown separately from files */
gboolean show_backups; /* If TRUE, show files ending in ~ */
gboolean show_dot_files; /* If TRUE, show files starting with a dot */
diff -rU 3 a/src/viewer/display.c b/src/viewer/display.c
--- a/src/viewer/display.c 2019-10-13 18:40:47.000000000 +0000
+++ b/src/viewer/display.c 2019-11-08 15:06:24.000000000 +0000
@@ -172,7 +172,7 @@
char buffer[BUF_TRUNC_LEN + 1];
size_trunc_len (buffer, BUF_TRUNC_LEN, mcview_get_filesize (view), 0,
- panels_options.kilobyte_si);
+ panels_options.kilobyte_si, panels_options.human_readable);
tty_printf ("%9" PRIuMAX "/%s%s %s", (uintmax_t) view->dpy_end,
buffer, mcview_may_still_grow (view) ? "+" : " ",
#ifdef HAVE_CHARSET
В настройках панели выбираешь опцию «human readable size», работает, на первый взгляд, нормально: https://i.imgur.com/WwthIt7.png
На Си аргументы командной строки можно модифицировать, чтобы изменения были видны в списке процессов (ps ax | grep название_проги). Например:
#include <stdio.h>
#include <unistd.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
fprintf(stderr, "Добавьте аргумент.\n");
return 1;
}
for (int i = 0; argv[1][i] != '\0'; i++) {
argv[1][i] = '*';
}
for (;;) {
sleep(10);
}
return 0;
}
package main
import (
"fmt"
"os"
"time"
)
func main() {
if len(os.Args) < 2 {
fmt.Fprintf(os.Stderr, "Добавьте аргумент.\n")
os.Exit(1)
}
var s string
max := len(os.Args[1])
for i := 0; i < max; i++ {
s += "*"
}
os.Args[1] = s
for {
time.Sleep(10 * time.Second)
}
}
От российских дистрибутивов линукса (например, calculate, alt) многие отказываются из-за возможного наличия там шпионских закладок. Да, говорят, у забугорных дистров тоже могут быть зонды, но свои опаснее и всё такое. То есть даже невзирая на технические преимущества российским ничего не светит. Представьте, каково будет российскому гению, который запилит принципиально новый дистрибутив на новых физических принципах, а все его старания обломают ёмкой фразой «зонд не нужен»? Но тогда как, по-вашему, создателям нужно правильно доказывать отсутствие закладок? Или это невозможно? И вообще, откуда такая уверенность, что в иностранных дистрибутивах нет российских зондов (в придачу к местным)?
Для отслеживания некоторых событий мне понадобились индикаторы в виде изображений. Вручную рисовать их муторно, т.к. события могут часто меняться, поэтому нужна генерилка, которая из любых трёх символов текста генерирует изображение типа такого https://imgur.com/download/GyS2cfb, но размером 48x48 px.
Есть для этого что-нибудь готовое?
Есть собранный LFS 8.3, который успешно грузится с hdd. Теперь пытаюсь из него livecd сделать:
cd $LFS; ln -s /sbin/init init;
find . | cpio -o -H newc | gzip -9 >/media/iso/boot/initramfs.cpio.gz
cp $LFS/boot/vmlinuz /media/iso/boot/linux
В /media/iso/boot/ есть загрузчик isolinux с таким конфигом:
default linux
prompt 1
timeout 300
display boot.msg
label linux
kernel /boot/linux
append initrd=/boot/initramfs.cpio.gz
iso'шник делаю так:
cd /media/iso
mkisofs -z -R -l --allow-leading-dots -D -o ../lfslivecd-8.3.iso -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -V "lfslivecd-8.3" ./
Распакованная initramfs весит 1.7GB, памяти на тестовой виртуалке выделено 3GB.
В итоге загрузка виснет в таком виде: https://i.imgur.com/YzNOtKC.png
Как исправить?
30 сентября этого года проекту Wayland исполняется 10 лет.
Есть ли тут те, кто уже полностью отказался от иксов?
5 сентября 2018 Mozilla прекратит поддержку Firefox (ESR) 52.
Так как оставшиеся поддерживаемые версии браузера несовместимы с XUL-based дополнениями, то все эти дополнения удалят с addons.mozilla.org в начале октября 2018 года. Об этом сообщила Caitlin Neiman в блоге Mozilla.
>>> Подробности
следующие → |