LINUX.ORG.RU

Сообщения snake266

 

Расшарить раздел через usb

Форум — Linux-hardware

Есть 3д принтер, который может управляться по сети, а файлы на него можно кидать либо через флешку или облако вендора. На облаке места мало, а постоянно ходить в соседнее помещение, к принтеру, за флешкой надоедает, поэтому появилось идея: поставить одноплатный компьютер у принтера, на одноплатнике подключить свою сетевую шару, а раздел с одноплатника «замапить как флешку».

Допустим у меня есть раздел на диске /dev/sdb1, возможно ли его вывести на usb, чтобы при подключении принтера он подумал, что к нему подцепили флешку? Если да, то как это сделать?

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

 ,

snake266
()

Как добавить алиас внутри локальной сети

Форум — Admin

У меня есть небольшая впн сетка (Wireguard, сервер Debian), внутри которой надо некоторым клиентам, с фиксированным ip, выдать алиасы, условно:

192.168.0.8 -> data_computing
192.168.0.9 -> files_sharing
...

Как это проще всего сделать? Целый bind9 заводить мне кажется это оверкилл.

Наверно глупый вопрос: если я на сервере пропишу эти алиасы в /etc/hosts будут ли они видны клиентам?

 ,

snake266
()

Проксить ssh с реальным ip клиента через nginx

Форум — Admin

Есть два хоста: один с белым ip и доменом, на другом хостится гитлаб – на первом стоит nginx для реверс прокси, оба хоста сидят в впн. Проблема заключается в git over ssh, я спроксировал ssh от первого сервера ко второму:

# Proxy ssh for gitlab
stream {
    upstream gitlab_ssh {
        server v.v.v.v:22;
    }
    server {
        listen 22;
        proxy_pass gitlab_ssh;
    }
}

На первом сервере 22 порт свободный, а на втором висит sshd. Но в логах подключения вижу ip сервера, который проксирует трафик, а я хотел еще fail2ban поставить, а в такой ситуации он мне прокси сервер будет блокировать. Нашел такое решение. Но оно не работает, во-первых если добавить proxy_protocol on;, то ssh на конечном хосте пожалуется:

kex_exchange_identification: client sent invalid protocol identifier "PROXY TCP4 x.x.x.x y.y.y.y 59742 22" ## Вот тут четко вижу ip клиента (x.x.x.x) и ip прокси (y.y.y.y)

А на строку set_real_ip_from $proxy_protocol_addr; ругается сам nginx:

host not found in set_real_ip_from "$proxy_protocol_addr" in /etc/nginx/nginx.conf:72

Еще пробовал добавлять proxy_bind $remote_addr;, но тут опять

bind(x.x.x.x) failed (99: Cannot assign requested address) while connecting to upstream, client: x.x.x.x, server: 0.0.0.0:22, upstream: "v.v.v.v:22", bytes from/to client:0/0, bytes from/to upstream:0/0

Добавил net.ipv4.ip_nonlocal_bind=1, но теперь сеть недостижима

[error] 1019147#1019147: *1687228 connect() to v.v.v.v:22 failed (101: Network is unreachable) while connecting to upstream, client: x.x.x.x, server: 0.0.0.0:22, upstream: "v.v.v.v:22", bytes from/to client:0/0, bytes from/to upstream:0/0

Подскажите, пожалуйста, что я делаю не так?

 ,

snake266
()

Как из скрипта, вызываемого кликом мыши, экспортировать переменные окружения

Форум — Admin

Вопрос достаточно нубский. Есть виртуалка с дебианом (VirtualBox), в которой запускается небольшое окружение разработчика. Так как эту виртуалку могут запускать из места, где без прокси нет выхода в интернет, то сначала прописал экспорт http_proxy, https_proxy и так далее через /etc/profile.d/, но тогда не работает интернет, там где этот прокси не нужен. Поэтому я написал скрипт, который по моей задумке должен запускаться с рабочего стола (user-friendly как никак, lxqt):

#!/bin/bash

export http_proxy="http://proxy"
export https_proxy="http://proxy"
export no_proxy="127.0.0.1,localhost"

export HTTP_PROXY="http://proxy"
export HTTPS_PROXY="http://proxy"
export NO_PROXY="127.0.0.1,localhost"

Но переменные не экспортируются:

$ env | grep -i proxy
$ 

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

Возможно у меня XY проблема, где можно было бы настроить прокси в настроках VirtualBox для ВМ, но тогда при смене сети придется менять настройки сети виртуалки и мне кажется легче написать два скрипта, который добавляет и убирает прокси внутри гостевой системы. Если важно хост Windows 10

 , , ,

snake266
()

Как идиоматичнее написать эту функцию на лиспе

Форум — Development

Продолжаю щупать скобочки, решил попробовать Common Lisp. Написал простенький tcp сервер, сделал на сокетах (usocket). Выглядит страшненько, но не знаю как написать «правильнее», поэтому решил поинтересоваться у гуру:

(defun create-server (port)
  (let ((socket (usocket:socket-listen "127.0.0.1" port :reuse-address t)))
    (unwind-protect
         (loop
           (let ((connection (usocket:socket-accept socket :element-type 'character)))
             (progn
               (usocket:wait-for-input connection :timeout 10)
               (let ((input-data (read-line (usocket:socket-stream connection))))
                 (when (eq input-data nil) (return))
                 (format t "Server input is: ~a~%"  input-data))
               (format (usocket:socket-stream connection) "Pong~%")
               (force-output (usocket:socket-stream connection))
               (usocket:socket-close connection))))
      (progn
        (format t "Closing socket.~%")
        (usocket:socket-close socket)))))

Первое, что мне кажется не очень правильным это три вложенных let. Вроде поправил на:

(defun create-server (port)
  (let ((socket (usocket:socket-listen "127.0.0.1" port :reuse-address t)))
    (unwind-protect
         (loop
           (let* ((connection (usocket:socket-accept socket :element-type 'character))
                  (stream (usocket:socket-stream connection))
                  (input-data (read-line stream nil)))
             (progn
               (usocket:wait-for-input connection :timeout 10)
               (when (eq input-data :eof) (return))
               (format t "Server input is: ~a~%" input-data)
               (format stream "Pong~%")
               (force-output stream)
               (usocket:socket-close connection))))
      (progn
        (format t "Closing socket.~%")
        (usocket:socket-close socket)))))

Но теперь задержка между отправкой с клиента «Ping» и получением «Pong» стала заметна, возможно проблема в том, что я делаю что-то неправильное с stream и читаю/пишу туда раньше времени. Код клиента

(defun create-client (port)
  (let* ((socket (usocket:socket-connect "127.0.0.1" port)))
    (unwind-protect
         (progn
           (format (usocket:socket-stream socket) "Ping~%") 
           (force-output (usocket:socket-stream socket))
           (usocket:wait-for-input socket :timeout 10)
           (format t "Input is: ~a~%" (read-line (usocket:socket-stream socket))))
      (usocket:socket-close socket))))

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

Reading from a stream which has been closed at the remote end signals an END-OF-FILE condition, meaning that reading from the stream and detecting that condition is the way to do it.

Понимаю только то, что проблема, где-то тут: (when (eq input-data :eof) (return)) – или опять же таки где в моей работе со стримами.

Почему не использую usocket:socket-server? Отвечаю: я так понял, что туда нельзя передать сокет, чтобы ответить что-то клиенту, а же хочу не только читать что мне прислали.

Помогите маленькому лисперу понять что не так. Знаю, что @monk хорошо разбирается в лиспах, из недавнего треда выяснил, что @lovesan в них тоже много понимает и @den73 тоже.

 ,

snake266
()

Добавить в grub efi загрузчик с виндой

Форум — Desktop

Впервые ставил линукс и винду рядом с UEFI. Сначала получилось так, что я затер efi винды и ее пришлось переустанавливать. efi раздел (/dev/nvme0n1p6) с виндой всего 100 Мб, поэтому я сделал отдельный раздел /boot (/dev/nvme0n1p7) для линукса 500 Мб, но теперь, чтобы загрузиться в винду или линукс приходится через UEFI выбирать нужный загрузчик: grub или windows. Как добавить в GRUB пункт с загрузкой в /dev/nvme0n1p6 с оффтопиком? И можно ли вообще так делать: два раздельных загрузочных раздела?

 , ,

snake266
()

cond или case из которого можно вернуть значение

Форум — Development

Предупрежу, что в схемах и лиспах я нуб. Решил ради интереса порешать задачки на ракете. Задача заключается в том, чтобы перебрать строку и посчитать очки за каждую букву, разные буквы стоят разное количество очков. Накидал вот такое решение:

#lang racket

(define (score word)
  (for/sum ([i (string->list word)])
    (case i
      [('A 'E 'I 'O 'U 'L 'N 'R 'S 'T) 1]
      [('D 'G) 2]
      [('B 'C 'M 'P) 3]
      [('F 'H 'V 'W 'Y) 4]
      [('K) 5]
      [('J 'X) 8]
      [('Q 'Z) 10])))

Но столкнулся с тем, что case возращает #<void>, Переписал на cond, но он тоже возвращает #<void>. Неужели без дополнительной переменной sum не обойтись?

 ,

snake266
()

Оцените сборку

Форум — Talks

В общем, сабж:

  • Ryzen 5 5600X – если буду сразу брать видеокарту, 5600G – если буду пережидать на встройке. Хотя мой ноутбучный опыт говорит, что на линуксе с гибродной графикой сложно, особенно если у тебя nvidia (старая). Либо я не осилил.

  • GIGABYTE B550M AORUS ELITE

  • PowerColor AMD Radeon RX 6600 Fighter [AXRX 6600 8GBD6-3DH]

  • DEEPCOOL AK620 [LGA1700] [R-AK620-BKNNMT-G]

  • Kingston FURY Beast Black [KF432C16BBK2/16] 16 ГБ

  • Блок питания DEEPCOOL PM750D [PM750D]

Комп собирается под CADы: Altium Designer (оффтопик), KiCad (онтопик/оффтопик), AutoCAD (оффтопик) – также под программирование и компилирования (онтопик). Ну и игры под оффтопиком: Dark Souls, iRacing, Dota 2, Apex Legends, PUBG, Arma 3 и так далее – список может быть большим, но целей запускать новинки на 4к нет

 ,

snake266
()

Связь nginx сервера с backend сервером без публичного ip.

Форум — Admin

У меня есть VPS на которой крутится backend для сервиса и nginx, но VPS-ка слабая поэтому хочу перенести backend на локальную машину. Завести публичный ip для этой машины возможности нет. Проблема в том, чтобы с публичной впски перенапрявлять запросы на приватную машину. Исходя из своего небольшого опыта мне приходит решение только с поднятием wireguard или пробрасывание порта через ssh, но мне кажется, что это не самые удачные решения и есть способы лучше. Что обычно используют взрослые дяди-админы для таких ситуаций?

 , , ,

snake266
()

как держать пароли от системных «юзеров»

Форум — Admin

Небольшое вступление. Я сейчас поднимаю небольшую инфраструктуру, есть приложение, для которого был сделан юзер, который пишет в базу в postgresql. Потом может добавиться еще что-нибудь: самба или nextcloud – всем надо раздать по юзеру и каждому надо создать пароль, а создать одного юзера, который работает во все БД мне кажется как-то неправильно. Думаю на локальной машине держать отдельный менеджер паролей для того, чтобы держать все пароли для админских вещей, либо делать пароль по имени приложения, но это звучит небезопасно.

В общем, как правильно контролировать весь этот объем паролей, которые приходиться иногда выкапывать? Извините, если вопрос глупый, я только вкатываюсь в админство и прочие devops-ы.

 , ,

snake266
()

Как подключиться к Jupyter Notebooks на сервере

Форум — Admin

Поставил Jupyter, запускаю на сервере вот так: jupyter notebooks --no-browser – в логах jupyter пишет что запустился на 8888 порту. Если туннелировать 8888 порт через ssh, то на локалхосте можно подключиться к Jupyter, но открыть Jupyter noteboooks напрямую через <server-ip>:8888 в браузере не работает. Вспомнил, что стоит фаервол, в ufw, на сервере, разрешил 8888 порт:

To                         Action      From
--                         ------      ----
...
8888                       ALLOW       Anywhere
...
8888 (v6)                  ALLOW       Anywhere (v6)

Но оно все равно не открывается через ip-адрес сервера

 ,

snake266
()

На чем все таки надо писать Embedded?

Форум — Development

Относительно недавно начал работать программистом для встройки (stm32f0-f1-f3). Раньше делал только домашние проекты на сишке, потому что все книги и гайды пишут на сишке и я подумал что это идет как стандарт для встройки. Когда шел на работу, думал: «Ух, сейчас на сях попишу». Оказалось, что там пишут на плюсах, стиль там скорее как «си с классами», но потихоньку двигаются в сторону плюсовых подходов (например, хотим концепты затащить). Вот хотел бы выслушать людей с многолетним опытом, какие-то аргументы за C или С++ в embedded, потому что все что услышал тут: «Ну, не надо передавать ссылку на self в функции для работы со структурами».

 , , ,

snake266
()

Это только у меня или сайт ti не грузится с ру ip?

Форум — Talks

В общем: https://www.ti.com/

Точно помню, что до ноября сайт нормально открывался, а теперь не пускает: Access Denied.

 

snake266
()

Намертво зависает Ubuntu

Форум — Desktop

У товарища стоит поставленная мною убунта 22.04 LTS, накатил я ее потому что подумал: «Ну это же убунта, она будет отлично работать из коробки» – но он начал жаловаться, что она у него намертво зависает. Поймал лог (получилось получить лог прямо до момента зависания только один раз) сразу же что смутило kernel: watchdog: BUG: soft lockup - CPU#1 stuck for 49s! [kworker/1:0:3383], по советам в интернете поставил watchdog_thresh=20, но оно тоже зависло. Подскажите что не так и как это можно пофиксить.

P.S. До этого на винде работало, зависаний не было

 ,

snake266
()

wibar не меняет высоты при mouse::enter

Форум — Desktop

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

...
s.mywibox = awful.wibar({height = beautiful.wibar_height, position = "bottom", screen = s })
s.mywibox:connect_signal("mouse::enter", function (self)
        self.height = beautiful.wibar_height_focused
        naughty.notify({text=tostring(self.height)})
    end)
s.mywibox:connect_signal("mouse::leave", function (self)
        self.height = beautiful.wibar_height
    end)
...

Notify чисто для теста, что событие происходит. Проблема в том, что notify с текущей высотой wibar происходит, но высота wibar не меняется. Что я делаю не так?

 ,

snake266
()

Думаю собрать ПК

Форум — Talks

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

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

Ближе к делу, комп нужен для:

  • Игры, в основном я играю в гоночные симуляторы(Assetto Corsa, хочу еще F1 2022 и AC Competizione взять), WoW и немного в инди, хочу пройти серию Dark Souls (и возможно что-то еще, но сейчас забыл), в новые AAA, типа Cyberpunk 2077 играть не планирую. Тут скорее всего оффтопик, но в какой-нибудь RimWorld можно и на онтопике играть.
  • Интернет-серфинг, ну тут дефолт как и у всех. Обычно сижу на онтопике, потому что он для души
  • Кады, например, Altium Designer и Advanced Design System. Только оффтопик.
  • ну и конечно кодинг, но какие-то супер вычисления делать не планирую (по крайней мере сейчас). Только онтопик.

То есть получается дуалбут.

По технике я думал что-то типа такого:

  • DDR4, пятый дорого.
  • АМД со встройкой, например ryzen 7 5700G, а потом брать дискретку от нвидия (например. Потому что в модельном ряде амд я не шарю). Потому что во все что я сейчас играю моя ноутбучная NVIDIA GeForce 820M тянет в 720p (1366x768), хотя иногда со скрипом, и даже переход на встройку от амд будет уже ощутимым переходом. Играть думал в FHD.
  • По видеокарте, как я уже выше сказал, это может быть сначала встройка, либо есть другой вариант, сразу брать дискретку, например, 1660 Ti или RTX 2060, в московском днсе они висят примерно за 40-45к. Этот вариант наверно будет лучше для игр, но дороже.
  • ССД M.2

С вариантом где используется встройка все понятно – однозначно амд, а что с ситуацией, когда используется дискретка? амд или интел? Какие модели процов стоит рассмотреть, в варианте с дискреткой, в первую очередь? По бюджету, точно сказать сложно, но сейчас точно есть 60к, если что могу сколько-то добавить.

 ,

snake266
()

А что с сайтом Миландра?

Форум — Talks

Мне нужен их даташит, ссылка гугла ведет на ic.milandr.ru (с edu.milandr.ru такая же проблема, кстати), а оно редиректит на milandr.com. На milandr.com нужного МК 1986BE92* не нашел. Так-то даташит я нашел на сайте какого-то магазина, но хотелось бы все-таки получить даташит с сайта производителя, потому что мне нужны еще их даташиты.

 

snake266
()

В firefox фризит видео в полноэкранном режиме

Форум — Desktop

Сабж. FPS проседает сильно заметно (по моему появилось пару дней назад после того как мне в debian прилетело обновление firefox-esr) и в ютубе, и на кинопоиске, и в вк, в общем, везде, поэтому подумал что дело в том что нет аппаратного ускорения.

Firefox настраивал как в арчвики и VA-API ставил как в дебиан вики. i965-va-driver уже стоял (у меня i5-4210U). Поставил флаги в about:config как арчвичи, перезапустил firefox(попробовал запустить лису и с MOZ_X11_EGL=1 и без). Но ничего не поменялось – видео также фризят, а в about:support, в Compositing, также стоит WebRender (Software). В intel_gpu_top в Video конечно 0%.

Хочется решить, как минимум, одну проблему – в полноэкранном виде картинка не фризила, ну а еще все-таки хочется завести ускорение, а то чего интеграшке простаивать.

Debian 11, firefox-esr 91.7.0esr

P.S. На самом деле, если в ютубе поставить 1080p60fps, то даже в предпросмотре видео фризит, в вк такая же ситуация. На оффтопике все работает отлично.

 ,

snake266
()

Износ SSD

Форум — Desktop

В общем, решил у ноутбука (пользуюсь три года, но не как основной) проверить как там поживает SSD. Запустил smartctl и увидел там

Available Spare:                    100%
Available Spare Threshold:          10%
Percentage Used:                    0%

это баг или я правда так не использовал диск? swappiness стоит в 1,также включен fstrim.timer, ну и в общем стараюсь на ssd лишнего не заливать. Такое количество записи много или мало:

Data Units Read:                    864,942 [442 GB]
Data Units Written:                 2,900,425 [1.48 TB]

 , ,

snake266
()

не могу слинковать libopencm3

Форум — Development

Захотел попробовать libopencm3. Написал моргание светодиодом с копипастой makefile, получилось так:

MCU := cortex-m3

CC := arm-none-eabi-gcc
AS := arm-none-eabi-as
OBJCOPY := arm-none-eabi-objcopy
LD :=arm-none-eabi-ld
SIZE := arm-none-eabi-size
SF := st-flash

TARGET := blink

ARCH_FLAGS = -mcpu=$(MCU) -mthumb
CSTD ?= -std=c99

CFLAGS = $(ARCH_FLAGS) $(CSTD) -Wall -Wextra
CFLAGS += -Wshadow 
CFLAGS += -MD -O0 
CFLAGS += -DSTM32F1
CFLAGS += -I./libopencm3/include

LD_SCRIPT = stm32f1.ld
LIB_PATH = ./libopencm3/lib
LIB_NAME = opencm3_stm32f1

LDFLAGS = -T$(LD_SCRIPT) -L$(LIB_PATH) -l$(LIB_NAME)
LDFLAGS += -nostartfiles $(ARCH_FLAGS) --specs=nosys.specs

all:
	$(CC) $(CFLAGS) $(LDFLAGS) main.c -o bin.elf

Вот так падает:

/usr/lib/gcc/arm-none-eabi/8.3.1/../../../arm-none-eabi/bin/ld: /tmp/cc8qsoBW.o: in function `main':
main.c:(.text+0x2a): undefined reference to `rcc_periph_clock_enable'
/usr/lib/gcc/arm-none-eabi/8.3.1/../../../arm-none-eabi/bin/ld: main.c:(.text+0x38): undefined reference to `gpio_set_mode'
/usr/lib/gcc/arm-none-eabi/8.3.1/../../../arm-none-eabi/bin/ld: main.c:(.text+0x42): undefined reference to `gpio_clear'
/usr/lib/gcc/arm-none-eabi/8.3.1/../../../arm-none-eabi/bin/ld: main.c:(.text+0x4c): undefined reference to `gpio_toggle'
/usr/lib/gcc/arm-none-eabi/8.3.1/../../../arm-none-eabi/bin/ld: main.c:(.text+0x5e): undefined reference to `gpio_toggle'

Сам libopencm3 для f1 скомпилирован

find libopencm3/lib/ -name "*.a"
libopencm3/lib/libopencm3_stm32f1.a

Также у меня падает проект на линковке, который я хочу перевести на libopencm3 с примерно таким Makefile-ом (CFLAFG примерно такое же как и в прошлом Makefile):

...
INCLUDE := ./libopencm3/include
LIBPATH := ./libopencm3/lib
LIBNAME := opencm3_stm32f3

LINKER_SCRIPT := linker.ld
...
LDFLAGS = --static -L$(LIBPATH) -l$(LIBNAME) -T$(LINKER_SCRIPT) 
...
$(TARGET).elf: $(OBJS) | $(BIN_DIR)
	$(LD) $(LDFLAGS) $^ -o $(BIN_DIR)/$@

Он также не может найти символы:

undefined reference to `rcc_periph_clock_enable'
undefined reference to `gpio_mode_setup'
и т.д.

libopencm3 компилировал make TARGETS=stm32/f1 для f1 и CFLAGS='-mfloat-abi=hard -mfpu=fpv4-sp-d16' make TARGETS=stm32/f3 для f3 (без CFLAGS потом ругается на application.elf uses VFP register arguments blah.o does not не знаю хорошее ли это решение, нашел его методом проб и ошибок).

Что я делаю не так? Я не очень понимаю, почему оно не работает: библиотека скомпилирована, я указываю линкеру -L и -l. Что могло пойти не так?

Решение

Я поставил -lopencm3_stm32f* в конец и все заработало.

 ,

snake266
()

RSS подписка на новые темы