LINUX.ORG.RU

Избранные сообщения AnonymUser

Селектор программ на C (заготовка).

Форум — Development

Не все идеи, конечно стоит воплощать. Но мне интересно было попытаться: на самом «начальном» C написать селектор для запуска часто используемых программ.

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

Оказалось, что в общем возможно. Но, например, чтобы сэмулировать нажаите Enter, пришлось придумать трюк с двойным scanf.

Работает так: 1) названия программ пишутся в текстовый файл. Что-то вроде базы, которая пока составляется руками. Выбор пока тоже ограничен :) (заготовка, так сказать) 2) Запуск и выбор

Спасибо всем комментаторам!

Итог (а как же без него?!): все ошибки вроде бы отловил, switch, убрал, вызов теперь через execl, лишний символ в начале строки убрал. Все это оставил в комментариях. Скрипт отредактирован относительно начального варианта. Единственное: оставил clear через system, так как через execl совсем другое поведение.

P.S. Отредактировано Оставил вариант с terminos. Старые варианты в хранилище.

Тоже самое с terminos в режиме non-canonical для терминала, через getchar. https://my.mail.ru/list/mol0t/video/_myvideo/3.html

Как-то так (заготовка, что-то примерное, но должно работать): https://gitflic.ru/project/dcc0/select-and-run/blob/?file=select_history_run_cat_bufferd_file.c&branch=master

 

AnonymUser
()

Звуковое уведомление о сети. C.

Форум — Development

По следам своей старой темы (Голосовое оповещение о поче (скрипт)) решил доработать скрипт. Суть все та же: Если теряем связь с ресурсом, то запускаем программу, которая:

  1. Единожды звуком (через beep) уведомляет о том, что сети нет.
  2. Продолжает работать в фоне, с интервалом (однократно) отправляя ping на ресурс.
  3. Если ресурс доступен, уведомляет звуком и завершает работу. Параметр 1 в аргументы задает бесконечный мониторинг ресурса. Уведомлять будет только при изменении состояния.

Видео для улучшения понимания того, как работает скрипт: https://youtu.be/jVtt_ol9S4g?si=Ztz2ki6YpBl2sR-M

Удобно поставить на cron при старте. Компилируется так:

gcc test_ip.c -o  test_ip.o

Первая версия (удалена).

Отредактированный вариант (перемещён на git): https://gitflic.ru/project/dcc0/test_ip_finite_machine/blob/?file=test_ip_Christmas.c&branch=test_ip.c

https://github.com/dcc0/finite_machine_test_ip/blob/main/test_ip_Christmas.c

Вариант bash с Curl для тестирования сайта: https://github.com/dcc0/finite_machine_test_ip/blob/main/test_web_new.sh

 , ,

AnonymUser
()

Голосовое оповещение о поче (скрипт)

Форум — Desktop

Есть такой скрипт, проверяет новые сообщения на Яндексе и голосом оповещает о новых, работает с cron. Вопросов два: Этично ли дергать через cron, например, раз в 10 минут Яндекс? Второй вопрос, есть ли в скрипте ошибки, недоработки? Или в принципе такой скрипт права на существование не имеет?

#!/bin/bash
var_file=/var/tmp_file
/usr/bin/curl -D headers_and_cookies -d 'MainLogin&from=passport&idkey=31c1365723231ce2p2ZkbO&display=page&login=user@yandex.ru&passwd=ПАРОЛЬ' -L  https://passport.yandex.ru/passport?mode=auth;

notify () {
 if [ $maill -eq 1 ]; then
  echo "You have $maill incoming message in Yandex inbox" | festival --tts
   echo "$maill" > $var_file
fi
  
 if [ $maill -gt 1 ]; then
  echo "You have $maill incoming messages in Yandex inbox" | festival --tts
   echo "$maill" > $var_file
fi
}


test_mail() {

 if [ "$maill" -ge "1" -a "$maill" -gt "$cattt" ]; then
 notify
fi
  
 if [ "$maill" -lt "$cattt" ]; then
  echo "0" > $var_file
   notify
fi
}


init_test () {
 if [ ! -e $var_file ]; then
  touch $var_file
   echo "0" > $var_file
fi
 maill=$(/usr/bin/curl  -b headers_and_cookies -L http://www.yandex.ru/m | /bin/grep -wo \"Почта\".\/\>\<strong.class=\"num\"\>[0-9]* | grep -o [0-9]*) 2>/dev/null
 cattt=$(cat $var_file)
 if [ -z $maill ]; then
  echo "0" > $var_file
   exit
else
  test_mail
fi
}
init_test 

AnonymUser
()

Запуск программ с GUI (графическим интерфейсом) из chroot. Новогодний рецепт.

Форум — Admin

Мне понадобился Hexchat. Как-то привык к нему. Но в новых дистрах он требует старый gtk+2. Решил на отдельном диске завести ещё один дистрибутив, но без установки.

Для примера был взят дистрибутив Calculate Linux 2024 года.

  1. Грузимся с Live ISO, Создаём отдельный раздел для системы, монтируем, допустим в:

mount /dev/sda8/ /mnt/d1

И копируем файлы с Live ISO Linux на этот отдельный раздел (допустим ext4), с опцией -a

cp -a /bin /mnt/d1 и т.д. (/mnt /media лучше создать вручную, дабы избежать рекурсии :) run, proc, sys копировать не надо, но можно создать эти директории)

  1. Загружаемся в основную систему.

  2. Ставим на хост:

emerge x11-apps/xhost

Выполняем на хосте:

export DISPLAY=:0 xhost +local:

  1. Делем chroot

(Может, придется поставить права на диск вроде chmod 777 /dev/sdaХ (но 777 я, конечно, круто взял :) первое что пришло в голову в качестве примера. Решайте сами, какие права нужны вам))

mount /dev/sda8 /mnt/d1

mount --rbind /dev /mnt/d1/dev

mount --make-rslave /mnt/d1/dev

mount -t proc /proc /mnt/d1/proc

mount --rbind /sys /mnt/d1/sys

mount --make-rslave /mnt/d1/sys

mount --rbind /tmp /mnt/d1/tmp

mount --bind /run /mnt/d1/run

chroot /mnt/d1 /bin/bash

. /etc/profile

export PS1="(chroot) $PS1"

(Можно продублировать в chroot, если что-то лишнее накрутили, как у меня это было:

export DISPLAY=:0)

su guest

hexchat

С Новым Годом!

 ,

AnonymUser
()

Удобная схема временного чата на PHP (шпаргалка)

Форум — Admin

Памятка. Найдено на php.net по ключевым словам: sockets, php.

Интересно, что схема позволяет быстро создать чат, например, для общения двух администраторов, настраивающих одну станцию. Предваряя вопросы и ответы на тему - «а зачем оно надо» и «такие чаты уже есть» - скажу, что это лишь возможность, а пользоваться или нет - ваше дело.

Допустим, есть модель ситуации:

  1. Сервер с VNC и ssh.
  2. На него заходят два человека из разных точек, и им требуется messaging.

Решение:

  1. На сервере запускается скрипт php, слушающий сокет через tcp (через ssh udp работать не будет. Поправьте, если ошибаюсь.).

Допустим, выбран порт 1117. Запуск из консоли сервера: php php_server_php

$server = stream_socket_server('tcp://127.0.0.1:1117');
while (1){
$socket = stream_socket_accept($server);
$ptk=stream_socket_recvfrom($socket, 15);
	if ( $ptk > 0) { 
	echo $ptk;
	}
}
fclose($socket);
fclose($server);
  1. Если нужно отправлять со своего компьютера сообщения, то через ssh осуществляется проброс порта.

Примерно так: ssh -L 1117:127.0.0.1:1117 -N -l user remote_server_ip

  1. Отправка сообщений из консоли:

echo 'Test' > /dev/tcp/127.0.0.1/1117

P.S. Без ssh можно использовать сервер udp.

$socket = stream_socket_server("udp://127.0.0.1:1117", $errno, $errstr, STREAM_SERVER_BIND);
if (!$socket) {
    die("$errstr ($errno)");
}

do {
    $pkt = stream_socket_recvfrom($socket, 1, 0, $peer);
    echo "$peer\n";
	echo $pkt;
    stream_socket_sendto($socket, date("D M j H:i:s Y\r\n"), 0, $peer);
} while ($pkt !== false);

Отправка сообщений по протоколу udp из консоли: echo 'Test' > /dev/udp/127.0.0.1/1117

P.P.S Примеры взяты с php.net. Чуть-чуть модифицированы.

Ниже картинка, подтверждающая, что выглядит это довольно сносно: https://ibb.co/Ltnmn4R

 , , , ,

AnonymUser
()

Доступ к веб-серверу виртуальной машины qemu извне с использование wifi (vlan0 интерфейс). Мост. Он же Bridge. Памятка.

Форум — Admin

Доступ к веб-серверу виртуальной машины qemu извне с использование wifi (vlan0 интерфейс). Мост. Он же Bridge

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

Памятка (может, кому-то пригодится), настройка осуществлялась в Gentoo Linux на нетбуке hp mini (Atom n570). Виртуальная машина: XP с веб-сервером AppServ 2.5.1.

  1. Становимся root

su

  1. Разрешаем форвардинг пакетов

echo 1 > /proc/sys/net/ipv4/ip_forward

  1. В ядре следует включить CONFIG_BRIDGE=y Если не включен, то идём

cd /usr/src/linux nano .config

Находим CONFIG_BRIDGE и редактируем Далее закрываем и сохраняем

make && make modules_installl

Не помню, надо ли копировать образ ядра, но монтируем boot и копируем в него:

mount /boot

cp arch/x86_64/boot/bzImage /boot/kernel-5.15.75-gentoo

  1. Перезагрузка. reboot

  2. Ставим программы для работы с мостом

emerge net-misc/bridge-utils

  1. Создаем мост:

brctl addbr br0

  1. Для интерфейса wifi (vlan0 (у меня wlp1s0b1) можно добавить только в режиме точки доступа, вычитал в сети), поэтому:

ifconfig wlp1s0b1 down

  1. Если вай-фай, то переводим в режим точки доступа, иначе не заработает)

ifconfig wlp1s0b1 192.168.43.1/24 (у меня вдобавок потребовался перезапуск NetworkManager)

  1. Добавляем в мост

brctl addif br0 wlp1s0b1

  1. Разрешаем от пользователя доступ к мосту (я так понял):

mkdir -p /etc/qemu echo "allow br0" >> /etc/qemu/bridge.conf

  1. Запускаем qemu от пользователя (у меня так примерно) :

qemu-system-x86_64 -accel tcg -hda win.img -m 512 -netdev bridge,id=br0,br=br0 -device rtl8139,netdev=br0

  1. В гостевой машине прописываем сетевому интефейсу адрес: 10.0.2.15; маску подсети: 255.255.255.0; шлюз: 10.0.2.2

  2. Смотрим от root, что получилось

ifconfig -a

У нас должны быть интерфейсы br0 и tap0 (после запуска qemu)

  1. Далее я добавил для tap0 адрес

ifconfig tap0 10.0.2.3 up и для br0 ifconfig br0 10.0.2.2 up

  1. Добавил tap0 в мост, т.е. в br0

brctl addif br0 tap0

(Возможно, последние действия лишние) После этого сайт виртуальной машины стал доступен по адресу: 10.0.2.15



Дополнение: получить доступ к веб-серверу виртуальной машины можно, пробросив порт 80 через клиент ssh на ней.

  1. На хосте запускается sshd - сервер ssh.

  2. С клиентской машины используем reverse forwarding

ssh -N -R localhost:8181:localhost:80 -l user 10.0.2.2

Т.е. с хоста, набрав в браузере localhost:8181, должны попасть на веб-сервер виртуальной машины.

В putty для Windows идём в ssh -> tunnels -> source=8181, Destination=localhost:80 Ставим галку на Remote.

Чуть выше ставим «ставим птичку» возле: Local ports accept connections from other hosts.


 ,

AnonymUser
()

Планшет Lenovo miix 3-1030 и Linux

Форум — Linux-install

Странная история. На планшете Win 8. Линукс загрузить не получается. Только Убунту версии 15 с uefi32. Но сегодня я скачал минимальный диск Gentoo 64b. Заменил в не Efi/boot файл efi32 и получилось загрузиться.

Этот файл взял из темы на форуме, про установку Убунту. Странно, что ефи32 грузит 64 битную версию.

Update: Получилось поставить Calculate Linux на планшет. Далее о том, как ставил кратко:

  1. Записал систему (64bit) на flas-usb, использовал разметку gpt, использовал программу rfus.4-4.
  2. Загрузился (загрузка с flash через fn-f12, чтобы попасть в выбор устройств загрузки) и поставил систему. Разметку диска ставил автоматическую, три раздела: swap, / и uefi. Uefi обязательно.
  3. Далее раздел uefi надо подмонтировать в /boot/efi. Там создать директорию boot и положить туда bootia32.efi по ссылке ниже.
  4. Загрузиться с диска. Должна появиться строка grub.
  5. Загрузиться в установленную систему вручную прописав в строку grub тоже, что и в grub.cfg: (Поправить fstab, названия разделов)

insmod gzio

insmod part_gpt

insmod btrfs ls

set root=(раздел с корнем, у меня был hd0,gpt2)

linux /booot/vmlinuz-номер-ядра root=/dev/mmcblk1p2

(диски могут быть с другими номерами, не как в fstab, если флешка была вынута)

initrd /boot/initramfs-номер

boot (грузимся)

  1. После загрузки требуется переустановить grub для efi-32: grub-install –target=i386-efi /dev/mmcblk1p2 –efi-directory=/boot/efi –boot-directory=/boot

  2. Сконфигурировать grub: grub-mkconfig -o /boot/grub/grub.cfg

Система должна работать. На моём планшете корректно работает тачскрин, вай-фай и прочее.

 

AnonymUser
()

«Операционная система» Русь

Форум — Talks

https://www.youtube.com/watch?v=9Jmo4FMiNg0

Интерено: два человека, судя по комментариям, увидели в консоли слово php и решили, что селектор написан на php. Разочарую. Исходник: https://gitflic.ru/project/dcc0/mix-c-89-php/blob?file=rusos_shutka.c

 

AnonymUser
()

Результаты компиляции на нетбуке (Atom). Gentoo и Calculate Linux

Форум — General

Решил поделиться результатами компиляции разных программ на нетбуке. Машина: hp mini. Модель примерно 2009-2012 годов. Процессор: Atom N570, 1.6GZ, 2 ядра, 4 потока. Память: DDR3, 2GB. Swap 4Gb. (Разметил для swap 12 gb, показывает только 4). Система Calculate Linux 64bit. Установлены опции компиляции: -fomit-frame-pointer, -march-native, -j5, -msse, -msse2, -msse3, -mmmx, -pipe, -O2. Также -j5, –load-average=5. CCACHE_SIZE=«5G» Результаты

  1. Собрал ядро Gentoo. Затрачено времени 14 часов.
  2. Собрал браузер Seamonkey. Затрачено времени 16 часов.
  3. Не смог скомпилировать свежий FireFox. Время ожидания: трое суток. Ушёл в Swap.
  4. Пытался скомпилировать webkit-gtk. Время ожидания 10 часов. Ушёл в swap.

Добавление

  1. Собрал glibc примерно за 2 часа с небольшим.

Выводы. Видимо, можно не пытаться скомпилировать на этой машине Chrome, LibreOffice и ещё некоторые программы. Можно собрать Gentoo, но с очень лёгким De или вообще без него. Итог: самостоятельная компиляция на Atom возможна, но со многими ограничениями. Иначе нецелесообразно.

Post Scriptum

Данная тема создана для тех, кто вдруг захочет установить Gentoo на нетбук с Atom. В общем, я не рекомендую компилировать. Хотя установить Calculate Linux и собрать ядро Gentoo всё же возможно. В общем и Gentoo можно собрать, но если заранее ограничить себя небольшим спектром программам. Вопрос обновлений не рассматриваю.

Обновление

Всё-таки установил Gentoо по хендбуку. Установил без De. Из программ только: links, weechat, mc.

  1. Затраченное время (на всё): 1 сутки.

a) Удалось сократить время установки, благодаря автоматическому конфигурированию wifi (nmtui) с Livecd.

b) Сократил время, воспользовавшись предварительно Gparted с диска Calculate Linux.

c) Ядро gentoo и config предварительно сохранил после компиляции в Calculate. Правда, пришлось перекомпилировать модули.

Но в целом успешно. Помучился с русификацией консоли, не сразу нашёл какую keymap выставить. Всем спасибо.

Ещё добавления 7) Собрал Xorg-server. Затрачено времени: начал в понедельник завершил в четверг. Попутно собраны: mysql, PHP, lighttpd, rust, библиотеки c++, irssi, mcabber, fluxbox. Собрал gcc с поддержкой graphite.

Для истории фото: https://ibb.co/m65P5hd

Видео процессом загрузки Gentoo Linux на нетбуке HP mini: https://youtu.be/s6ubLc6zawU

 , , , ,

AnonymUser
()

Я тупой, что делать?

Форум — Talks

Не могу осилить ничего сложнее bash и php, просто не понимаю ЗАЧЕМ!?

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

Почитал новость о том, что в Linux приходит Rust, подумал, ну вот время для изучения C упущено, но сейчас начинается новая эпоха с Rust в ядре, чем чёрт не шутит, может стоит попробовать, авось, для ядра какие-нибудь приколюхи тоже смогу писать? НЕТ НЕ СМОГУ ПОТОМУ ЧТО Я ТУПОЙ(((((

https://doc.rust-lang.ru/book/ch03-01-variables-and-mutability.html#Затенение...

Затенение (переменных)

Я не понимаю что это и зачем это нужно.

fn main() {
    let x = 5;

    let x = x + 1;

    {
        let x = x * 2;
        println!("The value of x in the inner scope is: {x}");
    }

    println!("The value of x is: {x}");
}

Почему нельзя из main вызвать функцию, которая сделает это самое x * 2 и напишет строчку, зачем было усложнять и придумывать какое-то { }.

fn main() {
    let x = 5;

    let x = x + 1;

    x_multiple(x);

    println!("The value of x is: {x}");
}

fn x_multiple(x: i32) {
      let x = x * 2;

      println!("The value of x in the inner scope is: {x}");
}

За достоверность синтаксиса не ручаюсь.

Я ещё могу как-то понять типы данных, ну там, один байтик 255 максимальное число, два байтика уже 255 * 255 = 65025 максимальное число, четыре байтика 255 * 255 * 255 * 255... Прикольно конечно, да, что 4 байтами можно кодировать большие числа, как это делают во всяких JPEG, PNG и т.д. бинарных форматах, что можно одним символом " " (пробел) описать число 32 т.к. это 32 символ в ASCII таблице.

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

Классы в PHP не осилил, Rust похоже тоже не осилю.

Ну и что теперь, обратно в дворники идти?

 

Spoofing
()

Для тех, кто думает перейти на Gentoo

Форум — General

Привет

Достаточно часто создаются темы, где люди думают переходить на Gentoo и хотят уточнить некоторые моменты. Чтобы сэкономить время себе и другим, решил создать этот топик, в котором буду собирать ответы на частые вопросы.

TL; DR: Для тех, кто думает перейти на Gentoo (комментарий)

В каких случаях имеет смысл выбирать Gentoo:
1. Вы любите настраивать систему под себя. В Gentoo есть больше возможностей по кастомизации системы в сравнении с многими другими дистрибутивами: USE флаги, параметры компиляции, поддержка пользовательских патчей в пакетном менеджере, хуки пакетного менеджера (вставка своих шагов на этапе установки пакетов), игры с версиями приложений и/или зависимостей, игры с альтернативными имплементациями (openrc/systemd/..., rsyslog/syslog-ng/metalog, slang/ncruses, dhcpcd/dhclient/...).
2. Вы хотите обучиться основам Линукс. Установка Gentoo невозможна без практического понимания базовых принципов Линукс: интерфейс командной строки, chroot, работа с диском (MBR, GPT, возможно LVM, возможно шифрование, типы файловых систем, параметры монтирования и т. п.), настройка сети (WiFi/Ethernet, DHCP, ifconfig/ip, выбор между wicd/NetworkManager/sysinit и т. п.), ядро (конфигурация/компиляция/установка, firmware, внешние модули aka @modules-rebuild, возможно параметры при запуске и т. п.), графический сервер (Xorg/wayland, драйвера) и др. Большинство дистрибутивов скрывают это за инсталлятором, но в Gentoo вам придется столкнуться с этим непосредственно.
3. Требуется система максимально оптимизированная под определённую платформу или нефункциональные требования: минимальный размер (embedded), минимальный отклик (банковские системы, игровые сервера), максимальное быстродействие в конкретных областях (обработка видео потоков) и т. п. Стоит заметить, что Gentoo имеет смысл выбирать только в том случае, когда нет дистрибутива уже заточенного под эти требования, или он чем-то не устраивает.

В остальных случаях Gentoo скорее всего не лучший выбор, разве что Just for Fun.

Сильные стороны Gentoo:
#1 Gentoo очень гибкая и всенастраиваема
Пример того что в Gentoo делается просто:
- Использовать openrc вместо systemd или наоборот; pulseaudio или без него
- Наложить кастомный патч; пример когда это нужно
- Подключить или отключить такие вещи как vaapi, vdpau, opencv и т. п.
- Иметь несколько веток софта; уточню, что это работает только для определённых пакетов; например можно одновременно установить python 2.7, 3.4, 3.5 или qt4 и qt5, но нельзя одновременно установить qt 5.7 и 5.8

#2 Очень удобный и функциональный пакетный менеджер
Примеры удобных фич:
- Прервать установку (вплоть до перегрузки компьютера), а потом ее продолжить. Можно продолжить с последнего пакета (emerge --resume), продолжить но пропустить последний пакет, например, если его установка прервалась с ошибкой (emerge --resume --skipfirst, некоторые нюансы); для больших пакетов можно продолжить саму компиляцию (ebuild <полный путь и имя файла>.ebuild merge).
- Когда при установке обновляется конфиг приложения, определяется редактировался ли предыдущий конфиг пользователем. Если да, конфиг не перезаписывается, а кладётся радом, и выводится сообщение пользователю с предложением обновить конфиг.
- Обновить всю систему, но исключить некоторые пакеты (удобно для исключения больших пакетов из ежедневного обновления)
- Почистить зависимости - удалить те пакеты, которые больше никому не нужны.
- Поскольку ebuild - текстовый файл, то можно пропарсить на предмет требований к количеству ресурсов для установки:

$ for F in $(find /usr/portage -name "*.ebuild") ; do REQ=$(grep "CHECKREQS" "$F") ; if [[ -n "$REQ" ]]; then echo -e "\n$F\n$REQ" ; fi; done
- Вынести компиляцию на другой компьютер (поддержка distcc на уровне пакетного менеджера). Важно когда Gentoo устанавливается на слабый компьютер.


#3 Хорошая документация, по крайней мере на английском. Более того, поскольку Gentoo-специфичные утилиты являются лишь надстройкой на generic механизмами, документация от других дистрибутивов (например от Arch) в большинстве случаев тоже подходит.
Опрос 2014: У какого дистрибутива лучшая документация

#4 Достаточно свежий софт, много сторонних репозиториев.
Список сторонних репозиториев
Gentoo - rolling release, а значит как только новая версия конкретного софта появилась в репозитории, её можно установить. Но здесь не имеется ввиду, что как только новая версия зарелизилась, она моментально становится доступна в основном дереве; лаг есть, но он как правило не большой, хотя зависит от пакета. В тестинг ветке новые версии появляются раньше. Кроме того мейнтейнеры Gentoo могут маскировать некоторые версии, если в них обнаруживаются серьезные баги. Однако всегда можно размаскировать нужную версию. Кроме того для некоторых пакетов есть -live версии, когда исходники скачиваются напрямую из github или аналога.
Пример когда «у меня не самый свежий софт в Gentoo»

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

#6 В процессе установки и эксплуатации получаешь полное понимание как работает система, а значит возникающие проблемы решаются быстро. На самом деле без должного знания Линукса (или желания его узнать в процессе) Gentoo нормально не установить.

Недостатки
#1 Сложная и долгая первичная установка. Если устанавливать в первый раз, нужно готовиться потратить несколько дней. Для опытных - несколько часов + компиляция.
Время установки (компиляции) Gentoo, еще немного цифр по большим пакетам

#2 Пакетный менеджер хоть и удобный, но очень медленный

#3 Если не обновлять систему долго (полгода и более), то сложность обновления сопоставима с установкой новой системы. Есть мнение, что emerge-webrsync --revert=yyyymmdd должен помочь (лично я не проверял).

Особенности
#1 Высокий порог входа; дистрибутив не для новичков. Если человек не комфортно чувствует себя в командной строке, никогда не компилировал ядро, не разбивал диски на разделы, не привык изучать докуменацию, вчитываться в сообщения и анализировать логи, то Gentoo покажется сложной в обслуживании, а возникающие проблемы будут списываться на дистрибутив.

#2 Обновляться нужно часто.

#3 Основные фичи - в командной строке. Для тех, кто не привык работать в командной строке, это будет минусом. А для тех, кто комфортно чувствует себя в командной строке, это будет плюсом, так как работа в командной строке более эффективна, а типовые сценарии можно обернуть в скрипты и еще больше сократить время на обслуживание системы.

#4 Есть две ветки: stable и testing. В stable меньше шансов встретить проблему, но в testing более свежий софт. Ветки можно комбинировать.

Мифы
Миф #1 Gentoo даст прирост производительности за счет того, что весь софт компилируется под конкретное железо.
Краткий ответ: Без дополнительных телодвижений - в пределах пары процентов, так что вряд ли вы это заметите.

Детальный ответ.
Не следует ожидать что просто скомпилировав систему из исходников вы получите сколько-нибудь заметное улучшение перформанса.
Для большинства приложений компиляции под конкретное железо даст прирост производительности в районе 1-2%.
Ложка дегтя: в некоторых случаях даже может быть замедление. Например Firefox, можно ускорить с помощью PGO. В Gentoo по умолчанию это отключено, так как PGO увеличивает время компиляции почти в два раза. В бинарных дистрибутивах соотв. софт может быть скомпилирован с PGO.
Так как добиться улучшения производительности? Узкий круг приложений может быть значительно ускорен при компиляции под конкретную платформу - на 30%-50% и больше. В основном это приложения которые активно занимаются вычислениями. Но для этого требуется соотв. настройки. Например, активация SIMD инструкций, даст прирост производительности в мультимедиа приложениях. Некоторые процессоры имеют аппаратную поддержку шифрования AES. В бинарных дистрибутивах подобные фичи будут отключены, так как не все процессоры это поддерживают, а бинарные дистрибутивы в первую очередь заботятся о совместимости.
Небольшое улучшения перформанса возможно если убрать из системы всё лишнее (мнение 1, мнение 2).
Еще интересный случай

Миф #2 Обновления занимают много времени
Краткий ответ: 5-10 минут на фоне, не мешая основной работе.

Детальный ответ.
Обновления не занимают много времени, но опять же, при правильном подходе.
Во-первых, как было сказано выше, обновляться нужно часто. Для testing ветки это каждый день, или по крайней мере не реже чем в раз 2-3 недели. Для стабильной ветки - раз в неделю достаточно (на стабильной ветке намного реже выпускаются обновления)
Во-вторых, есть пакеты которые правда очень долго компилятся: libreoffice, firefox, chromium... Их всего 10-15. Я их исключаю из ежедневного обновления, а обновляю раз в несколько месяцев.
Еще нужно сказать, что на этом вопросе часто заостряют неоправданно много внимания. Обычно обновления происходят на фоне, и не сильно влияют на работу; так какая разница как долго они выполняются?
В итоге, у меня обновления занимают примерно 5-10 мин ежедневно (у меня тестинг-ветка).
К тому же всё происходит на фоне, в любой момент можно поставить на паузу (Ctrl+Z, fg), продолжить после прерывания (умышленного или случайного).
Мой скрипт ежедневного обновления

Миф #3 Gentoo требует много времени на обслуживание
Краткий ответ: это зависит от вас.

Детальный ответ.
Обслуживание Gentoo занимает меньше времени по сравнению с другими дистрибутивами, но только при грамотном обращении, конечно. Достигается это за счет следующего:
- хороший пакетный менеджер: маскировки, глобальные и индивидуальные установки для пакетов (USE флаги, опции компиляции, каталоги), хуки, приоритеты (чтобы компиляция происходила на фоне и можно было работать), много опций для установки и анализа, подсказки после установки.
- всё происходит в CLI, а значит типовые операции можно обернуть в скрипты/алиасы.
- уже существуют много утилит для облегчения обслуживания: eselect, equery, eix, eclean, euse, genlop и др.
Грамотное обращение означает, что вы правильно и регулярно обновляете систему, исполняете предписания emerge, которые он выдает после установки, держите в порядке конфигурационные файлы, а если таки возникает проблема, которую решить вы не можете, то вы обращаетесь в форумы, а не просто жалуетесь на жизнь.
Что до проблем с обновлениями - см. следующий пункт «Миф #4 Установка, обновление постоянно падают; частые блокировки»

Миф #4 Установка, обновление постоянно падают; частые блокировки
Краткий ответ: Не чаще чем в других дистрибутивах

Детальный ответ.
Если говорить про «часто» и «постоянно», то проблемы с обновлением/установкой могут быть если:
- система давно не обновлялась
- система неправильно обслуживается (см. выше про Грамотное обращение)

В редких случаях пакет просто не компилируется. На самом деле это проблема не Gentoo, а тех, кто писал этот софт. И в подавляющим большинстве случаев это не является проблемой, и вот почему. Если это обновление, то можно продолжить процесс запустив emerge с параметрами --resume --skipfirst - он обойдет проблемный пакет, пересчитает зависимости чтобы система осталась консистентной, и продолжит обновление (а можно изначально передать параметр --keep-going, тогда это будет происходить автоматически, прерываний вообще не будет). Если пакет критичен, можно установить предыдущую версию, которая компилировалась (а проблемную замаскировать чтобы пакетный менеджер ее не видел).

Что может заблокировать обновление полностью:
- просьба пакетного менеджера поменять флаги пакета. При этом emerge предлагает сделать это автоматически, но лично я предпочитаю делать вручную. Для ручного способа, решается добавлением строчки в package.use
- просьба пакетного менеджера задать лицензию. Это валидно только для не-свободных лицензий, например EULA, Skype, Adobe Flash и т. п. Если мы говорим имено про обновление, то такое бывает только когда лицензия обновляется, что бывает очень редко (как много у вас пакетов под не-свободной лицензией, и как часто они меняют лицензию?). Решается добавлением одного слова в make.conf
- просьба пакетного менеджера размаскировать пакет. По моему опыту нужно не размаскировывать, а наоборот замаскировывать пакеты, которые тянут замаскированные зависимости. Это, да, требует минут 5-10 на разобраться. Но, если только у вас нет смешения веток и live пакетов, такой вариант случается раз в пятилетку.
- сложные блокировки. Большинство блокировок пакетный менеджер разрешает сам; по моим наблюдениям, качество данного механизма значительно улучшилось пару лет назад. Из своего опыты скажу, что (учитывая частые обновления) блокировок, которые бы совсем останавливали обновление я уже не видел года 1.5. Но если они есть, то это действительно сложный кейс.

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

Миф #5 В Gentoo нет бинарных пакетов
Краткий ответ: Есть там, где это действительно нужно.

Детальный ответ
29 декабря 2023 года было официально объявлено о релизе бинарного варианта Gentoo: Gentoo становится бинарным / https://www.gentoo.org/news/2023/12/29/Gentoo-binary.html Также есть Calculate Linux - полностью бинарный форк Gentoo.
С самого начала в «классическом» Gentoo в основном репозитории всегда были несколько бинарных пакетов: libreoffice-bin, firefox-bin, некоторые другие. Связано это с тем, что из исходников они очень долго компилируются, и иногда проще поставить бинарник.
Бинарный пакет можно сделать самому командой quickpkg --include-config y <установленный пакет> - удобно для бекапов.
Но стоит обратить внимание на то, что при использовании бинарных пакетов пропадают те главные особенности, ради которых имеет смысл выбирать Gentoo. Если вам нужен уже скомпилированный софт, возможно вам имеет смысл присмотреться к другим дистрибутивам.

FAQ

#1 Установка на слабый компьютер
Смотря что есть слабый компьютер.
Из собственного опыта: Intel Core2 Duo 6600 @ 2.40GHz, 2Gb RAM + 4Gb swap хватало для комфортной работы в Gentoo.
Зачастую ebuld'ы содержат информацию о том, сколько нужно памяти для компиляции пакета. TOP 5:
16G - chromium
8G - ledger, isabelle
7G - ceph
6G - firefox x64 (для x32 нужно 3G), pypy x64 (для x32 нужно 3G)
5G - electron
Если компьютер и вправду слабый, то лучше выбрать не Gentoo (точнее не-source-based дистрибутив). Альтернатива - можно вынести компиляцию на другой «не-слабый» компьютер с помощью distcc.


Опрос 2021: Какую операционную систему и/или дистрибутив GNU/Linux вы используете на ПК?
Опрос 2018: Какой ОС вы пользуетесь на основном ПК?
Опрос 2017: Какую ОС вы используете на основном ПК?
Опрос 2014: Какой дистрибутив вы используете на десктопе?
W3Tech стастика дистрибутивов на серверах
Отличия дистрибутивов, время работы ноутбука
Чем удобны USE флаги
Сколько памяти нужно для РАБОТЫ Gentoo (сколько нужно для компиляции было указано выше)
Сколько места на диске нужно для Gentoo
Правильное полное обновление Gentoo, Мой скрипт ежедневного обновления, Еще вариант
Gentoo для девелоперов
Практика инсталляции Gentoo: в двух словах простым языком
Небольшой скрипт - сборка livecd

 

Kroz
()

Сравнение строк, содержащих числа (только цифры). Критика

Форум — Development

Критика нужна: желательно объективно и без перехода на личности.

Отредактировано с учетом комментариев ниже! Еще раз отредактировано с учетом комментариев ниже! Спасибо всем за помощь, друзья!

C проверкой на знак - отрицания. Посл. вариант: True

/*Данная программа сравнивает две строки, содержащие числа (только).
Возвращает A > B,  A < B или A = B, коды 1, -1 и 0. Ответ 3 - неправильный ввод 
или отсутствие аргументов.
This program compares two strings, which contains numbers (only).
It returns: A > B,  A < B or A = B, codes 1, -1 and 0. Code 3 - incorrect or empty input.
*/


#include <stdio.h>

  /*Функция печати результата*/
  int ret(int r) {

/*Если нужен код ответа (например, для PHP), раскомментируйте строку ниже*/
    //printf("%d", r);

  /*Коды  ответов и вывод на экран сообщений*/
 switch ( r ) {
        case 1:
            printf("A > B\n");
            break;
        case -1:
            printf("A < B\n");
            break;
        case 0:
            printf("A = B\n");
            break;
        case 3:
             printf("Перезапустите с двумя аргументами так: программа 123 321\n");
            break;
    }

    return r;
  }

//Функция конвертации аргумента в целое
int convert_to_int(char * ar1, int i) {

  int a = 0;

  for (i; ar1[i]; i++) a = a * 10 + (ar1[i] - '0');

  return a;
}

int main(int argc, char * argv[]) {

  /*Проверим ввод аргументов*/
  if (argc != 3)   return ret(3);

  /*Проверим знаки - если один с минусом, другой нет (и обратно)*/
  if (argv[1][0] == '-' && argv[2][0] != '-') return ret(-1);
  if (argv[2][0] == '-' && argv[1][0] != '-') return ret(1);

  int i = 0;

  /*Если оба аргумента без знаков минус. Достаточно проверить один*/
  if (argv[1][0] != '-') {
    if (convert_to_int(argv[1], 0) > convert_to_int(argv[2], 0)) return ret(1);
    if (convert_to_int(argv[1], 0) < convert_to_int(argv[2], 0)) return ret(-1);
  }
  /*Если с минусами*/
  else {
    if (convert_to_int(argv[1], 1) > convert_to_int(argv[2], 1)) return ret(-1);
    if (convert_to_int(argv[1], 1) < convert_to_int(argv[2], 1)) return ret(1);
  }
  /*Если равны*/
  return ret(0);
}


 

AnonymUser
()

Дописал я программу. Называется квантитативный эксплорер

Форум — Development

Quantitative Explorer. Или квантитативная машина. Работает так: 1) Вводим слово в файл words.txt 2) Запускаем.

Получаем

1) Транслитерацию на eng, только нижний регистр пока. 2) Число всех уникальных символов и исходных. 3) Диалог с предложением перемешать полученный результат. Если да, то все перестановки результата.

Все самописное, никаких библиотек, исходники в катталоге source. Транслитерация на stdio, используется одна строка для каждого символа. Связует все сопрограммы великий bash.

Архив: https://yadi.sk/d/kVu8nbAC3VSVnF

 

AnonymUser
()

Программа: удаление всех повторяющийхся цифр (и букв в слове). С [в доработке]

Форум — Development

Упражнялся вчера с С и решил что-нибудь более или менее полезное написать для работы со строками символами, с исп. stdio. И вот такое получилось. Принимает один аргумент: Зачем может быть нужна?! Когда тебе твоя девушка пишет все время вот так: «даааааа, вооооот» = ) (но пока удаляет только ASCII - цифры и лат. алфавит. Только из слов без кавычек) и вообще делает символы в слове уникальными, типа на входе «good», на выходе «god» или на входе «pool», на выходе «pol»

Тема отредактирована. См. комментарии ниже. Решение внизу

//This small prorgam removes all duplicated characters out of a word
//Программа удаляет все повторяющиеся символы из слова
//Author dcc0@yandex.ru 2018.

#include <stdio.h>
int main(int argc, char* argv[]) {
  //here we check arguments//проверяем аргументы
  if (argc < 2) {
    printf("Argument must be a word:\n");
    return 0;
  }

  int x, i, j;
  //it calculates an array's length
  //вычисляем длину слова и печатаем
  for (x = 0; argv[1][x] != '\0'; x++);
  printf ("Original length: %d\n", x);
  x=x+1;
  //here we search twins
  //ищем одинаковых
  for (i = 0; i != x; i++) {
    j = i + 1;
    while (j != x) {
      if (argv[1][i] == argv[1][j]) {
        argv[1][i] = '0';
      }
      j++;
    }
  }
j=0;
  //Output
  //Вывод
  for (i = 0; i != x; i++) {
    if (argv[1][i] != '0') {
      printf ("%c", argv[1][i]);
      j++;
    }
  }
  printf ("\nNumber of uniqe symbols: %d\n", j-1);
}

P.S. Форматирование поправил. Лишний блок из кода убрал. Комментарии на русском есть. P.P.S Ну вот еще подсократилось. «Динамическое вычисление длины массива убрали. В принципе можно и вычисление x убрать.

P.P.P.S Теперь и такую строку вроде правильно обрабатывает: „teeest teeestt tteeessstt“ Original length: 25 est Number of uniqe symbols: 4 Осталось сделать транслит функцию.

 ,

AnonymUser
()