LINUX.ORG.RU

Сообщения snake266

 

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

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

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

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

 ,

snake266
()

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

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

192.168.0.8 -> data_computing
192.168.0.9 -> files_sharing
...

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

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

 ,

snake266
()

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

Есть два хоста: один с белым 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
()

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

Вопрос достаточно нубский. Есть виртуалка с дебианом (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
()

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

Продолжаю щупать скобочки, решил попробовать 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 загрузчик с виндой

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

 , ,

snake266
()

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

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

#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
()

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

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

  • 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.

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

 , , ,

snake266
()

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

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

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

 , ,

snake266
()

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

Поставил 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?

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

 , , ,

snake266
()

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

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

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

 

snake266
()

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

У товарища стоит поставленная мною убунта 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

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

...
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
()

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

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

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

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

  • Игры, в основном я играю в гоночные симуляторы(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
()

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

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

 

snake266
()

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

Сабж. 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

В общем, решил у ноутбука (пользуюсь три года, но не как основной) проверить как там поживает 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

Захотел попробовать 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 подписка на новые темы