LINUX.ORG.RU

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

Помогите настроить OPENVPN c обфускацией

 ,

Ребят, подскажите по братски. Есть сервер с OPENVPN для частной ЛОКАЛЬНОЙ сети между компами (10 шт) Доступ идет чисто как локалка чтобы работало пару прог типа базы данных. Вот такой конфиг сервера и клиента

port 1194
proto udp
dev tap
#crl-verify /etc/openvpn/crl.pem
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem
server 172.28.55.0 255.255.255.0
route 172.28.55.1 255.255.255.0
push «route 172.28.55.1 255.255.255.0»
client-config-dir /etc/openvpn/ccd
keepalive 10 120
tls-auth /etc/openvpn/ta.key 0
cipher AES-256-CBC
persist-key
persist-tun
client-to-client
push «dhcp-option DNS 172.28.0.1»
sndbuf 524288
rcvbuf 524288
push «sndbuf 524288»
push «rcvbuf 524288»
duplicate-cn
verb 4

. . .

Клиенты

. . .

client
remote ip.мое.го.серва 1194 
dev tap
proto udp
auth-nocache
nobind
persist-key
persist-tun
cipher AES-256-CBC
sndbuf 524288
rcvbuf 524288
verb 3
key-direction 1
<ca>
-----BEGIN CERTIFICATE-----
123
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
123
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
123
-----END PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
123
-----END OpenVPN Static key V1-----
</tls-auth>

Все работало более чем идеально, но в связи с тестами ТПСУ компы не видят друг друга. Помогите с настройками обфускации. чтобы на клиентских компах не ставить ничего нового.

Wosh
()

Embox v0.6.1

 , ,

Группа Open Source

8 января 2024 года вышла очередная версия открытой операционной системы реального времени Embox.

Среди изменений:

  • Улучшена поддержка архитектуры AARCH64.
  • Улучшена поддержка архитектуры RISC-V.
  • Добавлена поддержка платы STM32F103 Blue Pill.
  • Добавлена поддержка платы Vostok Uno-VN035.
  • В язык Mybuild добавлена аннотация @NoCode.
  • Улучшена подсистема устройств (devices subsystem).
  • Переработана поддержка flash-устройств.
  • Переработана подсистема журналирования (Logger).
  • Улучшена поддержка STM32.
  • Переработан контроллер прерываний GIC.
  • В систему портирован проект libIEC61850 (реализация IEC 61850, стандарта сетей и систем связи на энергетических подстанциях).
  • Портирован Mbed TLS.
  • Множество других исправлений и улучшений.

>>> Подробности (github.com)

abondarev
()

Оставим любителям яблок их 8Gb как 16...

 , ,

Пришел мой новый рабочий аппарат из Поднебесной.

На HP ожидаемо завелся Linux, и всё оборудование под этой ОС работает корректно.

Аппарат ожидаемо оказался тихим и легким. Странно, что в одном сервисе по по доставке товаров из-за рубежа он выставлен как HP Star Book 14 Pro, именно там я его и заказал. Подобных надписей на устройстве нет, по сути это HP Pavilion 14 Plus, о чем гласят надписи на корпусе.

В комплект поставки входит NVMe Solidigm на 2Tb, что так же отмечено только на сайте этой малоизвестной конторки, на маркетплейсах аппарат отмечен как оснащенный только 1Tb. Сначала меня насторожило название незнакомого бренда, но вот википедия сообщает нам, что Solidigm принадлежит Hynix и является бывшим подразделением Intel по производсву NAND-чипов.

Также есть вопрос, расширяется ли объем ОЗУ, поскольку в одних местах пишут что да, а в других что нет. Но вопрос о расширении оперативной памяти пока не актуален.

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

Теперь мой HP Elitbook 840 G8 отправляется в резерв.

Отличия от «старого» аппарата:

  • естественно актуальный CPU AMD Ryzen 7840H;
  • OLED экран 120Hz, 2880х1800;
  • встроенная камера дает приличное изображение, чего в «элитбуке» не наблюдалось;
  • рабочие температуры колеблются от 39 до 49 градусов, вместо 50-60 (на моих задачах естественно), если брать чисто практический аспект шума, «Рязань» тут работает потише;
  • естественно, более производительная встройка. Intel с какого то времени начала маркировть все видеокарты как Iris Xe, что явное лукавство, во всех процессорах это совершенно разные по возможностям устройства, AMD же честно пишет модель видеочипа.

Что напрягало, но удалось устранить:

  • Windows в поставке;
  • традиционный китайский язык в BIOS;
  • английская клавиатура, в итоге решил что поскольку владею слепым методом печати, просто научусь работать без русских букв.

Сейчас аппарат стоит ~87К рублей, считаю это отличной ценой за подобное устройство.

user13
()

Immutable-дистрибутивы, что это такое, и с чем это едят?

 , ,

Immutable-дистрибутивы, что это такое, и с чем это едят?

Начнем с простого

Как часто вы сталкиваетесь с ситуацией когда ваш любимый линукс вдруг перестает работать? А как часто после обновления выясняется что что-то отвалилось или вообще отказывается грузится?

Если вы один из таких «счастливчиков», то добро пожаловать в мир immutable-дистрибутивов! В этой статье мы наглядно разберем все плюсы и минусы, а также выясним, действительно ли immutable лучше традиционных дистрибутивов?

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

Unixson
()

Вышел srsRAN 4G 23.11 — OpenSource-реализация стека 4G/LTE

 ,

Группа Open Source

Проект software radio systems Radio Access Network или srsRAN нацелен на реализацию стеков 4G/LTE и 5G. Ранее проект известен был как srsLTE.

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

>>> Подробности (github.com)

Root-msk
()

Какая СУБД для OLAP?

 , ,

Добрый вечер. Скажите, пожалуйста, какие сейчас есть СУБД для OLAP? Нужно быстро крутить ~5ТБ, делать группировки и отдавать в BI. Единственное, что приходит в голову - затюненный под DWH Оракл. Ещё есть Кликхаус, но кажется, это немного локальный продукт. Т.к. важна скорость отклика, экосистема хадупа не подходит.

Paka_RD
()

Нужны ваши мысли по code review

 ,

Вообщем у меня есть один долгоживущий проект, посвященный теме ревью кода. Что он делает можно увидеть из этого gif (github.com)

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

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

Хотелось бы услышать ваши мысли и пожелания, в первую очередь по интерфейсу - как это должно выглядеть для максимального удобства проведения code review.

Например тот же Gerrit мне всегда казался слишком сложным и его использование на практике в коммерческой разработке я не видел.

alex0x08
()

В чем фишка Qt Quick

 , ,

Изучаю Qt. Вижу, что есть два подхода к разработке приложения: Qt Widgets и Qt Quick. Судя по всему за Qt Quick активно топят. На официальной странице нашел сравнение этих технологий. И вроде как пишут, что Qt Quick для стильных модных молодежных, а Qt Widgets если не Deprecated, то для старперов. На всяких Reddit-ах тоже активно нахваливают QML.

Интуитивно кажется, что Quick потянет за собой либо какой-то встроенный интерпретатор JavaScript, либо какой-то хитрый компилятор, но в любом случае добавит накладные расходы на взаимодействие между JavaScript и C++ кодом. Кажется, что это будет работать медленнее, чем если всё написано сразу на C++.

С другой стороны, если хочется быстрой разработки, чтобы раз-два и в продакшен - это же точно не про C++. Для этого есть Electron или Web в браузере. C++ для GUI, на мой взгляд, имеет смысл выбирать только если хочется максимальной производительности и минимального расхода ресурсов, а сроки разработки не особо важны.

Вижу что Qt пытается запрыгнуть в мобильную разработку, но это тоже как-то странно, когда есть нативные библиотеки, дающие максимальную производительность или Flutter, дающий кроссплатформу.

Поэтому возникает вопрос: какой практический смысл в Qt Quick?

Goganchic
()

Claim to support the GTK_FRAME_EXTENTS (enables full GTK CSD)

 ,

Поддержка клиентского декорирования GTK добавлена в openbox. Pull-request с соответсвующим заголовком уже месяц остается без внимания. Результат на снимке. Исходники взяты из ветки work по адресу https://github.com/Mikachu/openbox.

zombi_pony
()

GUI best practices

 

А есть ли какие-то best practices, если не стандарты для современного UI? Я не имею в виду всякие бензоколонки и терминалы самообслуживания в магазинах, а системы для компов общего назначения. Например, в классическом UI из 90х есть модели SDI/MDI, есть понятие главного меню, как должны выглядеть и вести себя пункты этого меню, есть тулбары, статус-бар и проч. джентльменский набор.

А для современного UI например на электроне есть подобное или кто как хочет, так и дрочит /// или разраб электрона уже всё на ходу «стандартизировал», а разраб только использует, что дают?

seiken
()

Утечки памяти в golang приложении - как найти?

 , ,

Изучаю сетевое программирование в golang, нашел в каком-то блоге вот такой пример websocket чат-сервера. Как он работает - вполне понятно - тупо бродкастит сообщения от клиентов. Но почему после нескольких коннектов ядро прибивает процесс из-за OOM - не могу разобраться. Вроде все ресурсы освобождаются, каналы закрываются. Пробовал проанализировать кучу с помощью pprof - не могу поймать момент, когда происходит утечка. Как вообще отлаживаются подобные ошибки в go?


package main

import (
  "encoding/json"
  "fmt"
  "net"
  "net/http"

  "github.com/gorilla/websocket"
  uuid "github.com/satori/go.uuid"
)

//Client management
type ClientManager struct {
  //The client map stores and manages all long connection clients, online is TRUE, and those who are not there are FALSE
  clients map[*Client]bool
  //Web side MESSAGE we use Broadcast to receive, and finally distribute it to all clients
  broadcast chan []byte
  //Newly created long connection client
  register chan *Client
  //Newly canceled long connection client
  unregister chan *Client
}

//Client
type Client struct {
	//User ID
	id string
	//Connected socket
	socket *websocket.Conn
	//Message
	send chan []byte
}

//Will formatting Message into JSON
type Message struct {
	//Message Struct
	Sender    string `json:"sender,omitempty"`
	Recipient string `json:"recipient,omitempty"`
	Content   string `json:"content,omitempty"`
	ServerIP  string `json:"serverIp,omitempty"`
	SenderIP  string `json:"senderIp,omitempty"` 
}

//Create a client manager
var manager = ClientManager{
	broadcast:  make(chan []byte),
	register:   make(chan *Client),
	unregister: make(chan *Client),
	clients:    make(map[*Client]bool),
}

func (manager *ClientManager) start() {
  for {
    select {
    //If there is a new connection access, pass the connection to conn through the channel
    case conn := <-manager.register:
      //Set the client connection to true
      manager.clients[conn] = true
      //Format the message of returning to the successful connection JSON
      jsonMessage, _ := json.Marshal(&Message{Content: "/A new socket has connected. ", ServerIP: LocalIp(), SenderIP: conn.socket.RemoteAddr().String()})
      //Call the client's send method and send messages
      manager.send(jsonMessage, conn)
      //If the connection is disconnected
    case conn := <-manager.unregister:
      //Determine the state of the connection, if it is true, turn off Send and delete the value of connecting client
      if _, ok := manager.clients[conn]; ok {
      	close(conn.send)
      	delete(manager.clients, conn)
      	jsonMessage, _ := json.Marshal(&Message{Content: "/A socket has disconnected. ", ServerIP: LocalIp(), SenderIP: conn.socket.RemoteAddr().String()})
      	manager.send(jsonMessage, conn)
      }
    	//broadcast
    case message := <-manager.broadcast:
    	//Traversing the client that has been connected, send the message to them
    	for conn := range manager.clients {
          select {
          case conn.send <- message:
      	  default:
      	    close(conn.send)
            delete(manager.clients, conn)
      	  }
    	}
    }
  }
}

//Define the send method of client management
func (manager *ClientManager) send(message []byte, ignore *Client) {
  for conn := range manager.clients {
    //Send messages not to the shielded connection
    if conn != ignore {
      conn.send <- message
    }
  }
}

//Define the read method of the client structure
func (c *Client) read() {
  defer func() {
    manager.unregister <- c
    _ = c.socket.Close()
  }()

  for {
    //Read message
    _, message, err := c.socket.ReadMessage()
    //If there is an error message, cancel this connection and then close it
    if err != nil {
    	manager.unregister <- c
    	_ = c.socket.Close()
    	break
    }
    //If there is no error message, put the information in Broadcast
    jsonMessage, _ := json.Marshal(&Message{Sender: c.id, Content: string(message), ServerIP: LocalIp(), SenderIP: c.socket.RemoteAddr().String()})
    manager.broadcast <- jsonMessage
  }
}

func (c *Client) write() {
  defer func() {
    _ = c.socket.Close()
  }()

  for {
    select {
    //Read the message from send
    case message, ok := <-c.send:
      //If there is no message
      if !ok {
        _ = c.socket.WriteMessage(websocket.CloseMessage, []byte{})
        return
      }
      //Write it if there is news and send it to the web side
      _ = c.socket.WriteMessage(websocket.TextMessage, message)
    }
  }
}

func main() {
	fmt.Println("Starting application...")

	//Open a goroutine execution start program
	go manager.start()
	//Register the default route to /ws, and use the wsHandler method
	http.HandleFunc("/ws", wsHandler)
	http.HandleFunc("/health", healthHandler)
	//Surveying the local 8011 port
	fmt.Println("chat server start.....")
	//Note that this must be 0.0.0.0 to deploy in the server to use
	_ = http.ListenAndServe("0.0.0.0:8448", nil)
}

var upgrader = websocket.Upgrader{
  ReadBufferSize:  1024 * 1024 * 1024,
  WriteBufferSize: 1024 * 1024 * 1024,
  //Solving cross-domain problems
  CheckOrigin: func(r *http.Request) bool {
    return true
  },
}

func wsHandler(res http.ResponseWriter, req *http.Request) {
  //Upgrade the HTTP protocol to the websocket protocol
  conn, err := upgrader.Upgrade(res, req, nil)
  if err != nil {
    http.NotFound(res, req)
    return
  }

  //Every connection will open a new client, client.id generates through UUID to ensure that each time it is different
  client := &Client{id: uuid.Must(uuid.NewV4(), nil).String(), socket: conn, send: make(chan []byte)}
  //Register a new link
  manager.register <- client

  //Start the message to collect the news from the web side
  go client.read()
  //Start the corporation to return the message to the web side
  go client.write()
}

func healthHandler(res http.ResponseWriter, _ *http.Request) {
  _, _ = res.Write([]byte("ok"))
}

func LocalIp() string {
  address, _ := net.InterfaceAddrs()
  var ip = "localhost"
  for _, address := range address {
    if ipAddress, ok := address.(*net.IPNet); ok && !ipAddress.IP.IsLoopback() {
      if ipAddress.IP.To4() != nil {
        ip = ipAddress.IP.String()
      }
    }
  }
  return ip
}

C
()

Добавить фичу в /proc/cpuinfo для работоспособности эмуляции SSE4.2

 cpu feachures, , , ,

Суть такова, программа определяет что у меня мой Phenomчик не умеет в sse4.2 говорит про это и всё дальше не работает.
А мне надо чтобы она валилась на traps illegal instruction.

Чуть расширенная суть csgo обновилась до cs2 и теперь на моём Phenom2 X6 не работает.

Завёл issue

И там человек посоветовал попробовать модуль ядра opemu-linux для эмуляции недостающих инструкций и попутно он его подправил для сборки на свежих ядрах.
Им (удобно) я определил что валится игра на инструкциях: Типа

OPEMU:  pmaxud xmm0, xmm1
traps: cs2[blabla] trap invalid opcode
...
OPEMU:  pminud xmm0, xmm1
traps: cs2[blabla] trap invalid opcode

Как видно нужные инструкции в этом модуле не реализованы и я кое как добавил в ядромодуль эмуляцию этих инструкций, благо они простые, найти в двух 128 битных регистрах максимальные 32 битные значения и вернуть их, а теперь ксДва грит

Launcher Error: A CPU that supports the `SSE4.2` instruction set is required.

А мне надо чтобы именно что программа бы падала на invalid opcode/illegal instruction а для этого программе надо соврать что процессор умеет SSE4.2 =) Вроде можно было фичи процессора подменять не, ну в смысле без правки ядра? В голове усердно торчит мысль что можно, но как не вспомню, гуглить не получается, сырцы сейчас рыть лень просто хочется ответа, голёва болит, носъ пихтит, горьло как сарделька, болякаю ой нимагу, пожалейте, подскажити болезному боляке йуууууу.

Да знаю я что можно просто через objdump получить все инструкции и вычислить те что не хватает дело не в этом.

Ну /proc/cpuinfo это для примера, нужно чтобы программы не думали что нужные им фичи есть и их проверки обламывались.

LINUX-ORG-RU
()

Как ограничить скорость, отдельным зарвавшимся IP, с помошью TC

 ,

Такое возможно вообще? Читал читал всяческие статьи, но что то моей бестолковки уже не хватает, сильно как то мудрено в моей старой башке уже на терминах происходит затык.

Показалось более понятно совет коллеги @Pinkbyte отсюда Как ограничить скорость трафика с конкретным ip адресом? (комментарий) сделал все как он советует, потом наткнулся на вопрос @gobot проштудировал его пост Ограничение скорости, все вроде перепроверил, счетчики ростут никакого ограничения скорости не наблюдаю, может кто кинет какой примерчик.

Мне надо временно ограничить именно входящий трафик на сервере Fedora34 качальщикам клиентам.

alex_sim
()

Описать в dts устройство на шине PCI

 ,

Например, у меня есть устройство 0001:01:00.0, я хочу его поконфигурировать через dts. Как это сделать?

У меня в dts есть описание нужного контроллера, pcie@ffкакой-то адрес. Описание устройства нужно вставить внутрь? А что указать, чтобы компьютер понял, что речь об устройстве 0 на шине 1?

anarquista
()

А нужен ли Wayland?

 , ,

На фоне Arch Wiki

Да, пока установка xorg-server для нуба нетривиальна (кроме пользователей Arch). Нужно скачать исходники с git, собрать, поставить, не забыть зависимости, но!..

Недокомпозиторы в виде Picom теперь не заставляют выть вентиляторы ноута, Firefox пишет - Compositing - WebRender (чего не было на xf86-intel и его можно выбросить), а «Картинка - ожила»! Никакого разрыва, всё гладко, кадр - идеален :) Нет глюков с нестандартными раскладками под Wayland, нет глюков с отрисовкой меню, нет проблем с размерами шрифта, можно share screen, и всё это на любимом Xmonad…

А патч принимали 7 месяцев, а версию нам ждать и ждать (мы знаем, почему).

Так нужен ли Wayland?

Neuromagus
()

Курсы QA

 ,

Есть чего годного по курсам QA (тестировщик)? Или литературу накидайте годную чтоли...

untitl3d
()

isc-dhcp-server, bind9 и пробелы в именах хостов

 , , ,

Ситуация такая.
Есть isc-dhcpd-4.4.1 который смотрит в wifi.
И bind9, с динамической зоной для него.
Все это работает давно и замечательно, но как всегда есть essid'ы с пробелами.
Соответственно в dhcpd.leases я их вижу как set ddns-fwd-name = "Smart TV Pro.wan";.
А в dns как Smart\032TV\032Pro A 192.168.4.192.
Соответственно arp -a его не видит ? (192.168.4.192) at 38:e7:c0:e4:c8:42 [ether] on wlan0 ну и пропинговать соответственно никак.
По ip пингуется, адрес выдается.
Как можно заменять пробелы на пример подчеркиванием?
Что это сможет сделать? Сразу dhcp, или bind?
Или ничто?

hbars
()

Пожалуйста, подскажите, какие значительные недостатки у Drone CI/CD по сравнению с другими популярными типа Gitlab, Jenkins, etc. ?

 , , , ,

Собственно кроме популярности.

https://medium.com/globant/introduction-to-drone-io-ci-cd-platform-1d43f8bc1728

Я так понял, что связка Gitea+Drone получается очень лайтовой?

Насколько сильно это сказывается на ее функционале?

sanyo1234
()

А у tint2 есть живые форки?

 , ,

Позиция разработчика в прошлом году:

The final release of tint2 is 17.0.2.

The code is frozen and no more feature requests are accepted.

Неделю назад ему там коммент оставили:

Recent code changes in tint2 dependencies arise issues that are relevant.

Is there any possibilities that the support for tint2 will be resumed at least to fix such problems?

Собственно вопрос. Если ли где новый живой апстрим, готовый делать релизы. Может видел кто…

wandrien
()

ProtonVPN WireGuard NetworkManager не работает

 , ,

Ниработает. Нужен чтобы ходить на сайтики закрытые роскомпозором. TOR чаще мёртв, чем жЫв - до бриджей почти всегда не достучаться (или это мне так везёт?). Сгенерировал конфиг на сайте Proton, импортировал его в NetworkManager, поднимаю соединение и усё, тырнета нет.

Какую диагностику ни делал, всё выглядит нормально. Вот только пакеты уходят, а в ответ ничего не приходит:

$ sudo wg
interface: wg0
  public key: +2+2T0B2eCV11XCdCPPAv/8FMKsKtEr57YiiR+nspHQ=
  private key: (hidden)
  listening port: 45277

peer: jA3Pf5MWpHk8STrLXVPyM28aV3yAZgw9nEGoIFAyxiI=
  endpoint: 185.177.124.190:51820
  allowed ips: 0.0.0.0/0
  transfer: 0 B received, 3.90 KiB sent

При этом,

nc -zvu 185.177.124.190 51820
Connection to 185.177.124.190 51820 port [udp/*] succeeded!

Это peer т.е. собсно WG сервер, который предоставляется Proton’ом.

Куда рыть не пойму. Не повезло с сервером просто, выбрать на сайте Proton’а другой? Или попробовать не через NM, а скажем systemd-network? Хотя, повторюсь, и с NM всё выглядит нормально.

Можно конечно сделать OpenVPN, решение более отработанное, но всё же охота разобраться.

mrjaggers
()