LINUX.ORG.RU

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

Fooyin 0.6.1

Новости — Open Source
Fooyin 0.6.1
Группа Open Source

fooyin – это аудиопроигрыватель, созданный на Qt6 в стиле Foobar2000. На данный момент нативно доступен только на Linux. Плеер доступен по лицензии GNU GPL 3.

fooyin предлагает большое количество индивидуальных настроек для управления и воспроизведения музыкальной коллекции. Его можно расширить с помощью плагинов и языка FooScript. Воспроизведение звука поддерживается FFmpeg наряду с несколькими вариантами вывода, включая ALSA и PipeWire.

( читать дальше... )

>>> Подробности

 ,

ConLenov
()

Как лоровцы сохраняют контейнеры Docker?

Форум — General

Здесь можете пофлудить об опыте работы с docker, podman, а также выразить своё неудовольствие этим программным решением.

Моя проблема: Контейнер с изменениями после отключения (podman stop ID, или обычном CTRL+C) при следующем включении (podman start ID, podman attach ID) запускается как неизменённый.

Что я делаю: Запускаю образ local-ai: podman run -p 8080:8080 --name local-ai -ti localai/localai:latest-aio-gpu-intel-f32. Образ запущенный в контейнере начинает работу: сразу же начинает скачивание ИИ моделей. После скачивания предлагает перейти в веб-интерфейс. Но! Вот мне надо выключить комп или попросту завершить «работу», как сохранить загруженные модели?

К тому же, подумал забить на это и настроить веб-интерфейс для podman.

Решение проблемы: Чтобы остановить — podman stop local-ai, чтобы потом продолжить — podman start local-ai. Всё сохранится! То есть подставить указанный --name.

Вывод: Докер — шляпа

Перемещено leave из talks

 , ,

temak
()

Протестировал Strip Poker Night at the Inventory

Галерея — Скриншоты

Strip Poker Night at the Inventory  — это open source стрип покер на раздевание под лицензией MIT. Игра активно развивается, есть большое количество контента, например персонажей.

По сути это веб-приложение, но его можно использовать offline.

Для этого необходимо

1) скачать сами исходники этой игры здесь;

2) подтянуть зависимости с помощью скрипта prepare-online.sh в директории исходников, путем его запуска(sh prepare-online.sh). Также необходимо поставить nodejs для работы;

Конкретно в данном случае тестировалось на версии

$ node --version
v22.6.0

3) скачать паки персонажей здесь;

4) распаковать паки персонажей в директорию исходников;

5) запустить скрипт start_offline.sh(./start_offline.sh) в директории исходников;

6) перейти в браузере на http://127.0.0.1:8080 или на http://192.168.10.193:8080 для запуска собственно самой игры.

Запускалось это все в локально браузере surf. Почему-то при попытке запуска в Google Chrome часть ресурсов не прогружалась при запуске offline, хотя с online-версией таких проблем не возникало.

Адресной строкой в браузере surf служит dmenu, поэтому адрес выглядит именно так. Для табов используется tabbed.

 , , ,

vbcnthfkmnth123
()

Shared папка с Windows 10 на Virt Manager

Форум — Desktop

Недавно было высказано мнение, что Virtualbox фуфло и нет никакого смысла в нем даже для запуска Windows в качестве гостя.

Я задумался, и решил пропробовать поднять Windows 10 гость через Virt Manager.

И уперся в казалось бы, простейший вопрос - как создать shared папку? Кто использует винду на KVM, подскажите, как вы делаете.

ИТАК, РЕШЕНИЕ!!! Со встроенной в qemu самбой. Есть в треде, но там пропущен один пункт и оно не работает. Здесь - полное.

  1. Создаем виртуальную машину с Win10 в Virt Manager, все по дефолту.

  2. Удаляем сетевую карту (дефолтную) из оборудования.

  3. Включаем редактирование XML в настройках Virt Manager, переходим на вкладку XML и добавляем:

В тег <domain>

xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0"

И одновременно с этим - именно одновременно! Иначе никакие изменения сохраняться не будут! Меняем /path/to/folder на свой путь.

В конец перед </domain>

  <qemu:commandline>
    <qemu:arg value="-net"/>
    <qemu:arg value="nic"/>
    <qemu:arg value="-net"/>
    <qemu:arg value="user,smb=/path/to/folder>
  </qemu:commandline>
  1. Теперь сетевая карта и QXL устройство окажутся на одном слоте PCI, устраняем этот конфликт. Находим кусок и заменяем slot=«0x01» на slot=«0x03», как в примере ниже.
<video>
  <model type="qxl" ram="65536" vram="65536" vgamem="16384" heads="1" primary="yes"/>
  <alias name="video0"/>
  <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x0"/>
</video>
  1. В файле /etc/libvirt/qemu.conf
security_default_confied = 0
seccomp_sandbox = 0
security_driver = "none"
  1. Перезапуск systemctl libvirtd restart

7.После этого в винде:

Проводник -> Этот компьютер -> Подключить сетевой диск

на адрес

\\10.0.2.4\qemu

ВАЖНО!!! Чтобы был доступ не только на чтение, qemu должен иметь права на работу с расшаренной папкой. А через Virt Manager он запускается по умолчанию не от имени текущего пользователя! (В отличие от прямого запуска qemu_system из консоли, как многие тут любят, и с чем проблемы нет).

Исправляем это в /etc/libvirt/qemu.conf

user = "username"
group = "groupname"

где username, groupname это ваш текущий пользователь и группа, которому принадлежит расшариваемая папка!

Плюс к этому - есть способ через Virtio FS, расписан тут. Подключает папку как локальный диск, без всякой самбы, и с высокой производительностью. Но - там какие-то заморочки с правами на запись, я пока не разобрался, и в этом случае перестает работать Выключить -> Сохранить (состояние виртуалки).

Вот ссылка на источник, из которого брался процесс настройки для этого случая

https://libvirt.org/kbase/virtiofs.html

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

 ,

James_Holden
()

выбор системы инициализации

Форум — General

насмотрелся видео, начитался статей о том, какой systemd плохой, и полез с arch на artix, а вот статей о том, какую альтернативу выбрать - не нашел.

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

изменено: накатил s6, стало даже хуже. вернулся к systemd)

 

scandalist
()

Наиболее стойкие к DPI VPN-протоколы

Форум — Talks

Посоветуйте VPN-протоколы, наиболее стойкие к DPI. Со свободным сервером и клиентом. Сервер — под linux, клиент ­— под Linux, Windows и Android

 , ,

Wapieth
()

UEFI смартфон: поддержка UEFI на ARM смартфоне

Форум — Mobile

При всей нелюбви к смартфонам, всегда хотел ставить другие системы без задротства, без попунктового следования руководствам, чтобы иметь ПКшный смартфон у себя в кармане.

Желания новый смартфон покупать, просто потому что у меня что-то перестало или не так работает, как мне б хотелось — нет. В общем, капиталистическая политика не нравится: покупать новое, пока работает старое. Компы всегда использую на полную, и как можно дольше.

Соответственно, приглашаю отписаться знающих, и только про осуществление(я) UEFI на обычном ARM смартфоне: x86-е не предлагать!

 , , , ,

temak
()

Общая папка на убунту в qemu

Форум — General

Имеется убунту лтс и установленной в qemu w10. Как сделать общую папку для данной связки?

 ,

samreg058
()

Зацените и протестриуйте бота, которого написал ChatGPT

Форум — Development

Прочитал я намедни, такую новость 8-летний ребёнок без опыта программирования создал чат-бота за 45 минут, ролик стал вирусным. Ясно, что кликбейт, ЛПП и прочие нехорошие слова… Но я решил проверить на что же способен ChatGPT. Признаюсь, я его использую для написания простых скриптов на 300-500 строчек кода. Сегодня я решил проверить правда или миф сия кликбейтная новость… и она оказалась правдой (частично).

Я до этого не писал ботов для Телеграм. Да, я знаю Python, знаю какие библиотеки для это используются, так как сидя в чате про Python с соевыми омега-обрыганами и школьниками, постоянно вижу вопросы про aiogram.

Началось все с такого задания:

Напиши мне на Python чат-бота. Алгоритм работы такой. Сторонний пользователь пишет сообщение и оно отправляется в чат к владельцу бота. Если владелец бота отвечает на конкретное сообщение то бот его пересылает лицу которое его отправило, если просто отвечает то сообщение отправляется последнему написавшему

На что он мне родил такой код:

import telebot
from collections import defaultdict

# Токен вашего бота
API_TOKEN = 'YOUR_API_TOKEN_HERE'

bot = telebot.TeleBot(API_TOKEN)

# Хранилище сообщений (user_id -> last_message)
user_last_message = {}
# Хранилище последних сообщений каждого пользователя, отправленных владельцу
message_store = defaultdict(list)

# ID владельца бота
OWNER_ID = 'YOUR_OWNER_ID_HERE'

@bot.message_handler(func=lambda message: True)
def handle_message(message):
    user_id = message.from_user.id
    if user_id == OWNER_ID:
        # Ответ от владельца
        if message.reply_to_message:
            # Если владелец отвечает на конкретное сообщение
            original_message_id = message.reply_to_message.message_id
            for uid, msg_list in message_store.items():
                for msg in msg_list:
                    if msg.message_id == original_message_id:
                        bot.send_message(uid, f"Ответ на ваше сообщение: {message.text}")
                        return
        else:
            # Если владелец отвечает без привязки
            if user_last_message:
                last_user_id = max(user_last_message, key=user_last_message.get)
                bot.send_message(last_user_id, f"Ответ от владельца: {message.text}")
    else:
        # Сообщение от пользователя
        bot.send_message(OWNER_ID, f"Сообщение от {message.from_user.username} (id: {user_id}): {message.text}")
        user_last_message[user_id] = message.message_id
        message_store[user_id].append(message)

bot.polling()

Устроил ли он меня? - Нет. Я люблю асинхронщину:

Используй какую нибудь асинхронную библиотек, храни данные в sqlite. Владельцу добавь кнопки типа заблокировать, очистить диалог (есть ли у бота возможность очищать диалог?). Напиши Dockerfile и docker-compose для запуска. 

Был высран такой код:

import asyncio
import aiosqlite
from aiogram import Bot, Dispatcher, types
from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton
from aiogram.utils.keyboard import InlineKeyboardBuilder
from aiogram.filters import Text, Command
from aiogram.fsm.storage.memory import MemoryStorage

# Токен вашего бота
API_TOKEN = 'YOUR_API_TOKEN_HERE'

# ID владельца бота
OWNER_ID = 'YOUR_OWNER_ID_HERE'

# Инициализация бота и диспетчера
bot = Bot(token=API_TOKEN)
dp = Dispatcher(storage=MemoryStorage())

# Подключение к базе данных
async def init_db():
    async with aiosqlite.connect('bot.db') as db:
        await db.execute('''CREATE TABLE IF NOT EXISTS users
                            (user_id INTEGER PRIMARY KEY, blocked INTEGER DEFAULT 0)''')
        await db.execute('''CREATE TABLE IF NOT EXISTS messages
                            (user_id INTEGER, message_id INTEGER, content TEXT)''')
        await db.commit()

# Кнопки управления
def owner_keyboard(user_id):
    builder = InlineKeyboardBuilder()
    builder.add(
        InlineKeyboardButton(text="Заблокировать", callback_data=f"block_{user_id}"),
        InlineKeyboardButton(text="Очистить диалог", callback_data=f"clear_{user_id}")
    )
    return builder.as_markup()

# Обработчик сообщений от пользователя
@dp.message(Command(commands=['start']))
async def start(message: types.Message):
    await message.answer("Привет! Отправь мне сообщение, и я перешлю его владельцу.")

@dp.message()
async def forward_to_owner(message: types.Message):
    user_id = message.from_user.id
    async with aiosqlite.connect('bot.db') as db:
        async with db.execute("SELECT blocked FROM users WHERE user_id = ?", (user_id,)) as cursor:
            row = await cursor.fetchone()
            if row and row[0] == 1:
                await message.answer("Вы заблокированы.")
                return
        
        await db.execute("INSERT INTO messages (user_id, message_id, content) VALUES (?, ?, ?)", 
                         (user_id, message.message_id, message.text))
        await db.commit()

    # Пересылка сообщения владельцу
    keyboard = owner_keyboard(user_id)
    await bot.send_message(OWNER_ID, f"Сообщение от {message.from_user.username} (id: {user_id}): {message.text}", reply_markup=keyboard)

# Обработчик сообщений от владельца
@dp.message(lambda message: message.from_user.id == int(OWNER_ID))
async def handle_owner_reply(message: types.Message):
    if message.reply_to_message:
        # Если ответ на конкретное сообщение
        original_message = message.reply_to_message.text.split("(id: ")[-1].rstrip('):')
        target_user_id = int(original_message)
        await bot.send_message(target_user_id, f"Ответ от владельца: {message.text}")
    else:
        async with aiosqlite.connect('bot.db') as db:
            async with db.execute("SELECT user_id FROM messages ORDER BY rowid DESC LIMIT 1") as cursor:
                row = await cursor.fetchone()
                if row:
                    last_user_id = row[0]
                    await bot.send_message(last_user_id, f"Ответ от владельца: {message.text}")

# Обработчик кнопок
@dp.callback_query(Text(startswith="block_"))
async def block_user(callback: types.CallbackQuery):
    user_id = int(callback.data.split("_")[1])
    async with aiosqlite.connect('bot.db') as db:
        await db.execute("UPDATE users SET blocked = 1 WHERE user_id = ?", (user_id,))
        await db.commit()
    await callback.message.answer(f"Пользователь {user_id} заблокирован.")

@dp.callback_query(Text(startswith="clear_"))
async def clear_dialog(callback: types.CallbackQuery):
    user_id = int(callback.data.split("_")[1])
    async with aiosqlite.connect('bot.db') as db:
        await db.execute("DELETE FROM messages WHERE user_id = ?", (user_id,))
        await db.commit()
    await callback.message.answer(f"Диалог с пользователем {user_id} очищен.")

async def main():
    await init_db()
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

В целом как основа я подошел. Композ и докерфайл были правильными. Докерфайл я попросил переписать для использования alpine.

На это у меня ушло 6 запросов. После чего я переписал творчество бота, добавил логгирование, argparse и тп. Я скинул боту код с исправлениями:

<код>

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

То что он родил меня опять не устроило:

Убери это. await bot.send_message(args.owner_id, forward_text). Айди отправившего сообщения в базе. Когда мы отвечаем на сообщение, то нужно смотреть в базе кто его отправитель. Те нужно создать еще одну таблицу.

Но бот меня не понял:

Эта таблица должна выглядеть так:

CREATE TABLE IF NOT EXISTS messages (
            message_id INTEGER PRIMARY KEY,
            sender_id INTEGER,
        )

Так же нужно добавить таблицу user_info где хранить записи типа user_id, fullname, username. Эти данные каждый раз обновляются когда пишет пользователь. Из этой же таблицы берутся данные, когда нажимаешь на кнопку Кто отправитель?

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

Из грубых ошибок в коде отмечу это:

def owner_keyboard(message_id: int) -> InlineKeyboardMarkup:
    """Создает клавиатуру с кнопками управления для владельца."""
    keyboard = InlineKeyboardMarkup()
    keyboard.add(
        InlineKeyboardButton(
            text="👁️ Whois",
            callback_data=f"view_user_{message_id}",
        ),
        InlineKeyboardButton(
            text="🚫 Ban", callback_data=f"block_{message_id}"
        ),
    )
    return keyboard

Это какой-то неправильный счинтаксис из-за которого бот, написанный ChatGPT падал. Я это фрагмент переписал так:

def owner_keyboard(user_id: int) -> InlineKeyboardMarkup:
    """Создает клавиатуру с кнопками управления для владельца."""
    return InlineKeyboardMarkup(
        inline_keyboard=[
            [
                InlineKeyboardButton(
                    text="👁️ Кто это?",
                    callback_data=f"whois_{user_id}",
                ),
                InlineKeyboardButton(
                    text="🚫 Бан",
                    callback_data=f"block_{user_id}",
                ),
            ],
        ]
    )

Так же мне пришлось добавить обработку ошибок:

# https://docs.aiogram.dev/en/latest/dispatcher/errors.html
@dp.error()
async def error_handler(event: ErrorEvent):
    logger.error("Error caused by %s", event.exception, exc_info=True)

Сделать закрытие курсоров после использования:

# Такое
    cursor = await db_connection.execute(
        "SELECT sender_id FROM messages ORDER BY ROWID DESC LIMIT 1"
    )
    result = await cursor.fetchone()
    return result[0] if result else None

# Заменять на это
    async with connection.execute(
        "SELECT sender_id FROM message_senders WHERE message_id = ?",
        (message_id,),
    ) as cursor:
        result = await cursor.fetchone()
        return result[0] if result else None

# Что аналогично
cursor = await execute()
result = await cursor.fetchone()

try:
    return result[0] if result else None
finally:
    await cursor.close()

Я переписал создание таблиц и часть запросов.

Меня порадовало то, что ChatGPT может генерировать довольно таки грамотные запросы:

    await connection.execute(
        """
        INSERT INTO user_info (user_id, full_name, username)
        VALUES (?, ?, ?)
        ON CONFLICT(user_id) DO UPDATE SET
            full_name=excluded.full_name,
            username=excluded.username,
            updated_at=CURRENT_TIMESTAMP
        """,
        (user_id, full_name, username),
    )

И вот что вышло:

https://github.com/s3rgeym/feedback-tgbot/tree/main

Протестировать можно тут:

https://t.me/feedback_s3rgeym_bot

 , ,

rtxtxtrx
()

Приложения и утилиты, которые стоит попробовать

Статьи — Администрирование
Приложения и утилиты, которые стоит попробовать

Многие пользователи Linux с большим стажем даже не подозревают о существовании этих замечательных инструментов, которые способны облегчить им жизнь…

( читать дальше... )

 , ,

rtxtxtrx
()

Посоветуйте хороший домашний роутер, заточенный под vpn

Форум — Linux-hardware

Уже много лет пользуюсь домашним роутером Asus RT-N66U. Роутер неплох, только вот постоянно роняет VPN соединение. Посоветуйте пожалуйста роутер, более пригодный для VPN, с учётом, что к роутеру будут подключены до 3 устройств одновременно

 ,

hedgehog_alex
()

Убыстрить ютуб

Форум — Security

Делаю по инструкции, blockcheck в конце выдал

* SUMMARY
ipv4 youtube.com curl_test_http : working without bypass
ipv4 youtube.com curl_test_https_tls12 : tpws --split-tls=sni
ipv4 youtube.com curl_test_https_tls12 : nfqws --dpi-desync=split2 --dpi-desync-split-pos=50

Please note this SUMMARY does not guarantee a magic pill for you to copy/paste and be happy.
Understanding how strategies work is very desirable.
This knowledge allows to understand better which strategies to prefer and which to avoid if possible, how to combine strategies.
Blockcheck does it's best to prioritize good strategies but it's not bullet-proof.
It was designed not as magic pill maker but as a DPI bypass test tool.

press enter to continue

Сделал

root@ryzen:/opt/zapret# ./install_easy.sh 
* checking system
system is based on systemd
* checking executables
found architecture "x86_64"
* checking privileges
* checking readonly system
* checking location
running from /opt/zapret
* checking DNS
system DNS is working
* checking virtualization
running on bare metal
* stopping zapret service
Failed to disable unit: Unit file zapret.service does not exist.
Failed to stop zapret.service: Unit zapret.service not loaded.

select firewall type :
1 : iptables
2 : nftables
your choice (default : iptables) : 
selected : iptables
* checking prerequisites
required utilities exist : curl ip6tables ipset iptables
* installing binaries
x86_64 is OK
installing binaries ...
linking : ../binaries/x86_64/ip2net => /opt/zapret/ip2net
linking : ../binaries/x86_64/mdig => /opt/zapret/mdig
linking : ../binaries/x86_64/nfqws => /opt/zapret/nfq
linking : ../binaries/x86_64/tpws => /opt/zapret/tpws

enable ipv6 support (default : N) (Y/N) ? 

select MODE :
1 : tpws
2 : tpws-socks
3 : nfqws
4 : filter
5 : custom
your choice (default : tpws) : 1
selected : tpws

TPWS_OPT="--hostspell=HOST --split-http-req=method --split-pos=3 --oob"
do you want to edit the options (default : N) (Y/N) ? Y

..edited..
TPWS_OPT="--hostspell=HOST --split-http-req=method --split-pos=3 --oob --split-tls=sni"
do you want to edit the options (default : N) (Y/N) ? 
select LAN interface to operate in router mode. select NONE for local outgoing traffic only.
WARNING ! This installer will not configure routing, NAT, ... for you. Its your responsibility.
LAN interface :
1 : NONE
2 : enp25s0
3 : lo
4 : virbr0
5 : virbr0-nic
your choice (default : NONE) : 
selected : NONE
select WAN interface for tpws operations. select ANY to operate on any interface.
WAN interface :
1 : ANY
2 : enp25s0
3 : lo
4 : virbr0
5 : virbr0-nic
your choice (default : ANY) : 2
selected : enp25s0

enable http support (default : Y) (Y/N) ? 

enable https support (default : Y) (Y/N) ? 

select filtering :
1 : none
2 : ipset
3 : hostlist
4 : autohostlist
your choice (default : none) : 2
selected : ipset

do you want to auto download ip/host list (default : Y) (Y/N) ? 
1 : get_user.sh
2 : get_antifilter_ip.sh
3 : get_antifilter_ipsmart.sh
4 : get_antifilter_ipsum.sh
5 : get_antifilter_ipresolve.sh
6 : get_antifilter_allyouneed.sh
7 : get_reestr_resolve.sh
8 : get_reestr_preresolved.sh
9 : get_reestr_preresolved_smart.sh
your choice (default : get_antifilter_ipsmart.sh) : 
selected : get_antifilter_ipsmart.sh
* installing zapret service
Created symlink /etc/systemd/system/multi-user.target.wants/zapret.service → /opt/zapret/init.d/systemd/zapret.service.
Created symlink /etc/systemd/system/zapret.service → /opt/zapret/init.d/systemd/zapret.service.
* downloading blocked ip/host list
setting high oom kill priority
clearing all known DNS caches
DNS is working
digging 6 ipv4 domains : /opt/zapret/ipset/zapret-hosts-user-exclude.txt
mdig stats : 00:00:00 : domains=6 success=4 error=2
digging 1 ipv4 domains : /opt/zapret/ipset/zapret-hosts-user.txt
mdig stats : 00:00:00 : domains=1 success=0 error=1
digging 0 ipv4 domains : /opt/zapret/ipset/zapret-hosts-user-ipban.txt
mdig stats : 00:00:00 : domains=0 success=0 error=0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  416k  100  416k    0     0   438k      0 --:--:-- --:--:-- --:--:--  437k
setting high oom kill priority
reloading ipset backend (forced-update)
Adding to ipset zapret : /opt/zapret/ipset/zapret-ip.txt
Adding to ipset zapret : /opt/zapret/ipset/zapret-ip-user.txt
Adding to ipset ipban : /opt/zapret/ipset/zapret-ip-user-ipban.txt
Adding to ipset nozapret : /opt/zapret/ipset/zapret-ip-exclude.txt
* installing zapret-list-update timer
Failed to disable unit: Unit file zapret-list-update.timer does not exist.
Failed to stop zapret-list-update.timer: Unit zapret-list-update.timer not loaded.
Created symlink /etc/systemd/system/timers.target.wants/zapret-list-update.timer → /opt/zapret/init.d/systemd/zapret-list-update.timer.
Created symlink /etc/systemd/system/zapret-list-update.timer → /opt/zapret/init.d/systemd/zapret-list-update.timer.
* starting zapret service

press enter to continue

Получаю на ютубе

Ошибка. Повторите попытку позже. Идентификатор воспроизведения: ...

И ЛОР тоже не грузится.

Попробовал по-другому

root@ryzen:/opt/zapret# ./install_easy.sh      
* checking system
system is based on systemd
* checking executables
found architecture "x86_64"
* checking privileges
* checking readonly system
* checking location
running from /opt/zapret
* checking DNS
system DNS is working
* checking virtualization
running on bare metal
* stopping zapret service
Removed /etc/systemd/system/multi-user.target.wants/zapret.service.
Removed /etc/systemd/system/zapret.service.

select firewall type :
1 : iptables
2 : nftables
your choice (default : iptables) : 
selected : iptables
* checking prerequisites
required utilities exist : curl ip6tables ipset iptables
* installing binaries
x86_64 is OK
installing binaries ...
linking : ../binaries/x86_64/ip2net => /opt/zapret/ip2net
linking : ../binaries/x86_64/mdig => /opt/zapret/mdig
linking : ../binaries/x86_64/nfqws => /opt/zapret/nfq
linking : ../binaries/x86_64/tpws => /opt/zapret/tpws

enable ipv6 support (default : N) (Y/N) ? 

select MODE :
1 : tpws
2 : tpws-socks
3 : nfqws
4 : filter
5 : custom
your choice (default : tpws) : 3
selected : nfqws

NFQWS_OPT_DESYNC="--dpi-desync=fake --dpi-desync-ttl=0 --dpi-desync-ttl6=0 --dpi-desync-fooling=badsum"
NFQWS_OPT_DESYNC_HTTP=""
NFQWS_OPT_DESYNC_HTTPS=""
NFQWS_OPT_DESYNC_HTTP6=""
NFQWS_OPT_DESYNC_HTTPS6=""
NFQWS_OPT_DESYNC_QUIC="--dpi-desync=fake --dpi-desync-repeats=6"
NFQWS_OPT_DESYNC_QUIC6=""
do you want to edit the options (default : N) (Y/N) ? Y

..edited..
NFQWS_OPT_DESYNC="--dpi-desync=fake --dpi-desync-ttl=0 --dpi-desync-ttl6=0 --dpi-desync-fooling=badsum"
NFQWS_OPT_DESYNC_HTTP=""
NFQWS_OPT_DESYNC_HTTPS="--dpi-desync=split2 --dpi-desync-split-pos=50"
NFQWS_OPT_DESYNC_HTTP6=""
NFQWS_OPT_DESYNC_HTTPS6=""
NFQWS_OPT_DESYNC_QUIC="--dpi-desync=fake --dpi-desync-repeats=6"
NFQWS_OPT_DESYNC_QUIC6=""
do you want to edit the options (default : N) (Y/N) ? 
select WAN interface for nfqws operations. select ANY to operate on any interface.
WAN interface :
1 : ANY
2 : enp25s0
3 : lo
4 : virbr0
5 : virbr0-nic
your choice (default : enp25s0) : 2
selected : enp25s0

enable http support (default : Y) (Y/N) ? 

enable keep alive support only if DPI checks every outgoing packet for http signature
dont enable otherwise because it consumes more cpu resources
enable http keep alive support (default : N) (Y/N) ? 

enable https support (default : Y) (Y/N) ? 

enable quic support (default : N) (Y/N) ? 

select filtering :
1 : none
2 : ipset
3 : hostlist
4 : autohostlist
your choice (default : ipset) :  
selected : ipset

do you want to auto download ip/host list (default : Y) (Y/N) ? 
1 : get_user.sh
2 : get_antifilter_ip.sh
3 : get_antifilter_ipsmart.sh
4 : get_antifilter_ipsum.sh
5 : get_antifilter_ipresolve.sh
6 : get_antifilter_allyouneed.sh
7 : get_reestr_resolve.sh
8 : get_reestr_preresolved.sh
9 : get_reestr_preresolved_smart.sh
your choice (default : get_antifilter_ipsmart.sh) : 
selected : get_antifilter_ipsmart.sh
* installing zapret service
Created symlink /etc/systemd/system/multi-user.target.wants/zapret.service → /opt/zapret/init.d/systemd/zapret.service.
Created symlink /etc/systemd/system/zapret.service → /opt/zapret/init.d/systemd/zapret.service.
* downloading blocked ip/host list
setting high oom kill priority
clearing all known DNS caches
DNS is working
digging 6 ipv4 domains : /opt/zapret/ipset/zapret-hosts-user-exclude.txt
mdig stats : 00:00:00 : domains=6 success=4 error=2
digging 1 ipv4 domains : /opt/zapret/ipset/zapret-hosts-user.txt
mdig stats : 00:00:00 : domains=1 success=0 error=1
digging 0 ipv4 domains : /opt/zapret/ipset/zapret-hosts-user-ipban.txt
mdig stats : 00:00:00 : domains=0 success=0 error=0
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  416k  100  416k    0     0   511k      0 --:--:-- --:--:-- --:--:--  511k
setting high oom kill priority
reloading ipset backend (forced-update)
Adding to ipset zapret : /opt/zapret/ipset/zapret-ip.txt
Adding to ipset zapret : /opt/zapret/ipset/zapret-ip-user.txt
Adding to ipset ipban : /opt/zapret/ipset/zapret-ip-user-ipban.txt
Adding to ipset nozapret : /opt/zapret/ipset/zapret-ip-exclude.txt
* installing zapret-list-update timer
Removed /etc/systemd/system/zapret-list-update.timer.
Removed /etc/systemd/system/timers.target.wants/zapret-list-update.timer.
Created symlink /etc/systemd/system/timers.target.wants/zapret-list-update.timer → /opt/zapret/init.d/systemd/zapret-list-update.timer.
Created symlink /etc/systemd/system/zapret-list-update.timer → /opt/zapret/init.d/systemd/zapret-list-update.timer.
* starting zapret service

press enter to continue

Та же самая ошибка на ютубе, но ЛОР есть.

cast dmitry237 ValdikSS

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

UPD

Убыстрить ютуб (комментарий)

UPD 2

Придумал, как убыстрить ютуб во всей квартире и навсегда

 , ,

damix9
()

Кто додумался воткнуть x86 в смартфоны?

Форум — Talks

И кто додумался их выкинуть оттуда. Это же реально круто, какие перспективы были и вот так все просрать. Речь про Atom’ы Medfield/Saltwell из прошлого десятилетия. Эти мобильные чипсеты были вполне себе полноценными x86 процами, но вместо Intel HD Graphics использовалась хорошо знакомая владельцам Z530 графика PowerVR.

Насколько мне известно, хоть «биос» там был анально отгорожен, но по факту уефи там был и реализовывал полноценный стек драйверов, необходимый для загрузки линуха/винды. Назревает вопрос: Как можно было протянуть НОРМАЛЬНЫЙ, СТАДАРТИЗИРОВАННЫЙ x86 на мобилки, а затем просрать все полимеры? Это же какие возможности были - запуск бубунты на смартфоне, запуск FFOS, запуск ведра, запуск сейлфиша - и все это без особого дроча с портированием.

 

monobogdan1337
()

А есть вменяемая OpenSource-альтернатива Youtube?

Форум — Talks

Чтобы выкладывать ролики для подписчиков.

Ну либо сервис.

Перемещено hobbit из general

 , ,

INX
()

Подскажите утилиту для обхода DPI

Форум — General

Здравствуйте! Я вот все говорил, что с User-Agent от хрома YT работает хорошо, какое-то время это было действительно так, но вот сейчас стало просто невыносимо. При том даже в Chromium. И даже со включенным QUIC везде (правда он как-то странно работает, cloudflare-quic.com показывает все равно HTTP/2). Все время везде советуют GoodbyeDPI, но он только под оффтопик, а тот же Green Tunnel не дал никакого результата. Подскажите, пожалуйста, что-то действующее для линукса.

 , ,

thm
()

На чистой sd-карте есть занятое пространство; как исправить?

Форум — General

После форматирования из FAT в ext4 вижу таинственную надпись в свойствах чистой карты: «(использовано 5%)».

 , ,

temak
()

Раздача torrent

Форум — General

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

udp://tracker.openbittorrent.com:80/anonce
Но изменений нет. Торрент не приватный, DHT включен. В общем как правильно настроить раздачу?

 , , ,

Riniko
()

Используете ли вы раздельные клавиатуры?

Форум — Talks

Если да, то какие? На форуме как будто о таких не знают — мало упоминаний.

 ,

temak
()

FireJail — краткое и ознакомительное практическое руководство

Статьи — Desktop
FireJail — краткое и ознакомительное практическое руководство

Сейчас существует прорва механизмов изоляции приложений — от песочниц до виртуальных машин. Целей их применения тоже множество, но так или иначе всё сводится к тому что нужно ограничить доступ приложений к тем или иным ресурсам вычислительного устройства.

Ниже я хочу описать почти золотую середину в лице утилиты firejail в виде практических советов по использованию в первую очередь для обычных пользователей и (возможно) разработчиков.

( читать дальше... )

 , , , ,

LINUX-ORG-RU
()

Заметки с синхронизацией

Форум — General

Всем привет. Для работы нужна легкая программа заметок с синхронизацией.(возможно на своем сервере). Нужно для linux/android. Ну и конечно хотелось бы свободный код и легкость(нужно для приема заявок,то есть 3-4 строчки по 2а слова).

 

copentry
()