LINUX.ORG.RU

Сообщения HighMan

 

C++ непонимание наследования классов

Форум — Development

Здравствуйте, коллеги!

class Parent{
private:
  int i;
public:
  Parent& operator = (Parent &p){
    this->i = p.i;
  }
};

class Child: public Parent{

};

Мне нужно сделать конструкцию типа:

Parent p;
Child c;
c = p;

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

 

HighMan
()

c socket broadcast в чем подвох?

Форум — Development

Здравствуйте, коллеги!

Есть код: https://github.com/pyang30/linux-udp-broadcast-example/blob/master/b_client.c

Компилится. Посылает…

Но только если IP получен!

Если IP не получен, то sendto возвращает -1.

Как сделать, что бы broadcast посылался вне зависимости получил данный компьютер ip или нет?

Т.е. как опычный dhcp client

 , ,

HighMan
()

python как «упаковать» в буфер разнородные данные?

Форум — Development

Здравствуйте, коллеги!

Я даже не знаю как сформулировать свой вопрос правильно.

Покажу, что мне нужно на примере (С)

typedef struct {
int id;
char data[256];
}pack;

struct pack p;
p.id = 9999
memcpy(&p, "Hello", 5);

Для чего мне это нужно….

Для передачи пакета определенного формата по сети.

Первые 4 байта - ID пакета

Следом идут данные.

В питоновской программе данные будут представлять строки.

Я пока не представляю как «упаковать» подобную структуру.

 

HighMan
()

Python как определить раздел по файлу?

Форум — Development

Здравствуйте, коллеги!

df умеет показывать раздел по файлу

df /etc/fstab
Файловая система 1K-блоков Использовано  Доступно Использовано% Cмонтировано в
/dev/sda3        242534400     45068636 196213748           19% /

Можно в python определить раздел по пути файла, не прибегая к вызову других процессов?

 

HighMan
()

btrfs как узнать есть ли subvolume?

Форум — Admin

Здравствуйте, коллеги!

Пишу скрипт, который, будучи запущен с live флешки, ищет корневые разделы. В offline системе. Просто тестирую на наличие директорий, типа mountpont/etc, mountpoint/var и т.д.

Я могу определить тип файловой системы диска/раздела, но вот как понять, что примонтированный раздел btrfs содержит subvolume?

Например, на моей Fedora 37 есть раздел /dev/sda3 на которой и живет корневая система, однако, если примонтировать этот раздел (например в /mnt), то там не видно знакомых директорий корня. Есть 2 «директории» /mnt/home и mnt/root! Если листануть /mnt/root то да. Все системные директории на месте.

Но как мне определить, что корень запихнут глубже?

 ,

HighMan
()

sshfs + sshpass как подключить?

Форум — Admin

Здравствуйте, коллеги!

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

sshfs user@192.168.0.65:/home/user/data /mnt -o ssh_command='sshpass -p password'

read: Connection reset by peer

sshpass -p password sshfs user@192.168.0.65:/home/user/data /mnt

Второй вариант ни о чем не сообщает, но и не монтирует.

Без sshpass запрашивает пароль и подключается.

 ,

HighMan
()

Как настроить сервер chrony без доступа к интернет?

Форум — Admin

Здравствуйте, коллеги!

Задача следующая: поднять локальный сервер времени на машине не имеющей доступ к интернет.

Установка пакетов не интересует. Все будет установлено при наличии интернет.

Как заставить клиентов синхронизировать время с локальным сервером, при отключенном интернет?

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

На сервере времени отключаю интернет, устанавливаю время на несколько часов вперед, перезапускаю chronyd. Перезапускаю chronyd на клиентах. Они отказываются принимать время от сервера.

chronyc tracking 
Reference ID    : 00000000 ()
Stratum         : 0
Ref time (UTC)  : Thu Jan 01 00:00:00 1970
System time     : 0.000000001 seconds slow of NTP time
Last offset     : +0.000000000 seconds
RMS offset      : 0.000000000 seconds
Frequency       : 7.356 ppm slow
Residual freq   : +0.000 ppm
Skew            : 0.000 ppm
Root delay      : 1.000000000 seconds
Root dispersion : 1.000000000 seconds
Update interval : 0.0 seconds
Leap status     : Not synchronised

chrony.conf с сервера:

cat /etc/chrony.conf | grep -v '^\s*$\|^\s*#'
pool pool.ntp.org iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 192.168.0.0/16
logdir /var/log/chrony

с клиента:

cat /etc/chrony.conf | grep -v '^\s*$\|^\s*#'
server 192.168.11.77 iburst minpoll -1 maxpoll 3
maxdistance 20.0
reselectdist 30
stratumweight 7
driftfile /var/lib/chrony/drift
makestep 1.0 -1
rtcsync
ntsdumpdir /var/lib/chrony
logdir /var/log/chrony
log measurements statistics tracking

 ,

HighMan
()

Python как узнать сколько места занято на диске?

Форум — Development

Здравствуйте, коллеги!

Собственно вопрос в топике.

Нужно узнать сколько места занято на (блочном устройстве), типа как df /dev/sda1

 

HighMan
()

Python Flask как сделать переход на другую «страницу»

Форум — Development

Здравствуйте, коллеги!

Извините за глупый вопрос, но во Flask я еще разбираюсь очень слабо.

Мне нужно в функции обработки «страницы» в случае нехватки параметров, полученных из GET, сделать переход на стартовую страницу?

@app.route('/')
def index():
  # ...
  return render_template('index.html')

@app.route('disk')
def disk():
  if not request.args.get('id'):
      # Вот тут мне нужно сделать безусловный переход на '/'
      # Можно, конечно:
      return index()
      # но так останется мусор в строке браузера от остатков GET запроса. А мне бы хотелось сделать безусловный переход на '/'

 ,

HighMan
()

Debian посоветуйте самый легковесный gui

Форум — Desktop

Здравствуйте, коллеги!

Тема не ради холивара.

Мне нужено собрать ISO образ на базе Debian с Desktop.

От десктопа мне нужно совсем не много: браузер и терминал. Ну может еще Nautilus для «гурманов».

Жить сей образ будет на флешке, с нее же и грузиться.

Соответственно, нужно что бы финальный образ был как можно меньше и грузился как можно быстрее.

Я, вообще, не особо много перепробовал десктопов. Gnome 3-4, когда-то еще ковырялся с XFCE4. Последний с 4й версии, стал тяжелым не по делу. С другими десктопами я практически не знаком. Разве что Mate видел.

Gnome 4, на мой взгляд, для быстрофлешки не подходит. Тяжелый, да и прожорливый. XFCE мне совсем разонравился, еще когда заканчивал с ним ковыряться, тем не менее, готов рассмотреть и его.

Еще раз повторю: мне, по большому счету, нужны лишь нормальный браузер (не lynx) и терминал. Ну может еще Nautilus доставлю, благо он не так много весит.

Жду ваших советов.

UPD жевательно, что бы GUI ставился без особых плясок с бубном на Debian

 ,

HighMan
()

Python создание объектов и запихивание их в list

Форум — Development

Здравствуйте, коллеги!

Я не очень понимаю механизм создания экземпляров класса.

class obj:
  __value = []
  def __init__(self, string: str):
    self.__value.append(string)

  def clean(self):
    self.__value = []

if __name__ == '__main__':
  lst = []
  for i in range 5:
    objct = obj('python')
    #lst.append(objct)

Данный код я не проверял, но в схожей ситуации у меня при создании нового объекта __value имел данные из ранее созданного объекта. И размерность __value начинала расти. Сначала len(__value) = 1, потом 2, далее 3 и т.д..

Возможно я не правильно понимаю механизм уничтожения объектов (сборщик мусора), но объект должен уничтожаться когда на его экземпляр перестает указывать последняя переменная (Счетчик указателей становится равным нулю)?

Соответственно, предыдущий экземпляр ‘objct’ должен удалятся в момент: objct = obj(‘python’) и, соответственно чистится память, но этого не происходит.

Видимо я что-то не правильно понимаю? Победить эту беду мне удалось добавив в конструктор self.__value = []. Но но осадочек остался…

Теперь подходим к засовыванию объектов в list (массив).

Я специально привел функцию ‘clean(self)’

В массив попадает лишь указатель на экземпляр класса, а не сам класс. Можно ли как-то заставить python запихивать в массив не указатель, а весь экземпляр (объект) целиком?

 

HighMan
()

Python curses и специальные клавиши

Форум — Development

Здравствуйте, коллеги!

curses - действительно проклятья…

Делаю простенькую менюшку. Перемещение по пунктам клавишами: KEY_UP, KEY_DOWN и выход ESC.

Вот тут я в растерянности.

https://dvmn.org/encyclopedia/modules/curses/

Чтобы получить ввод от пользователя в Curses есть три метода: canvas.getch() — обновляет холст и ждёт, когда пользователь нажмёт на кнопку. Возвращает ASCII-код нажатой клавиши. canvas.getkey() — тоже ждёт ввода пользователя. На этот раз вернёт сам нажатый символ. Нажатия на специальные клавиши перехватятся с помощью, например, curses.KEY_HOME или curses.KEY_LEFT.

Все четко и понятно:

i = win.getkey()
if i == curses.KEY_UP: win.addstr(18, 2, 'KEY_UP')
if i == curses.KEY_DOWN: win.addstr(18, 2, KEY_DOWN')
if i == curses.KEY_CANCEL: break

но не работает!

Что я делаю не так?

 ,

HighMan
()

Debian без GUI. Помогите настроить 3G modem Huawey e173

Форум — General

Добрый день, коллеги.

Не могу получить интернет через Huawey e73 на Debian.

Удалось добиться получения IP адреса:

echo -en 'AT^NDISDUP=1,1,"internet"\r\n' > /dev/ttyUSB0
dhclient -i wwx0250f3000000

wwx0250f3000000 - имя сетевого устройства

ip a

...

4: wwx0250f3000000: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether 02:50:f3:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 10.181.138.127/24 brd 10.181.138.255 scope global dynamic wwx0250f3000000
       valid_lft 6947sec preferred_lft 6947sec
    inet6 fe80::50:f3ff:fe00:0/64 scope link 
       valid_lft forever preferred_lft forever

На этом успехи закончились. Интернет не видит.

В Fedora 37 через GUI настроил и он заработал, а вот в Debian через консоль не могу сообразить чего ему не хватает.

 

HighMan
()

Как сделать загрузку файла с сервера HTTP по относительной ссылке?

Форум — Development

Здравствуйте, коллеги!

Возможно, я не верно формулирую вопрос, но не знаю как задать его правильно.

Типа:

wget https://myserver.com/Z49CLJGaNJTFizE

кракозябры из запроса это временная ссылка на некий файл. Должен скачаться файл video.img

Хочу понять как реализовать нечто подобное

 , ,

HighMan
()

Как поправить переключение раскладки клавиатуры?

Форум — Desktop

Здравствуйте, коллеги!

Fedora 37 GNOME Shell 43.5

Переключение раскладки настроено Ctrl+Shift

Сошло с ума переключение раскладки клавиатуры. Что бы вернуться с русского на кошерный английский, приходится нажимать Ctrl+Shift несколько раз! При этом индикатор выбранного языка переключается на английский с первого нажатия, вот только писать продолжаю по русски.

Как поправить эту засаду???

 

HighMan
()

Помогите пожалуйста разобраться с маршрутизацией (openvpn)

Форум — General

Здравствуйте, коллеги! Я когда-то давно все это делал, но по прошествии времени склероз поработал и сейчас я не могу решить элементарный вопрос.

Есть VPN сеть через OpenVPN 192.168.11.0/24

Сервер 192.168.11.1

Клиент 192.168.11.2

Со стороны клиента прекрасно пингуются все IP локальной сети сервера (10.1.1.0/24). Тут все прекрасно.

Не могу сообразить как сделать что бы со стороны сервера пинговалась локальная сеть клиента (192.168.0.0/24)

Роутинг на стороне сервера:

ip route
default via 10.1.1.1 dev enp13s0 onlink 
10.1.1.0/24 dev enp13s0 proto kernel scope link src 10.1.1.250 
192.168.0.0/24 via 192.168.11.2 dev tun0 
192.168.11.0/24 dev tun0 proto kernel scope link src 192.168.11.1

Казалось бы: 192.168.0.0/24 via 192.168.11.2 dev tun0 должен бы должен заворачивать все обращения к сети 192.168.0.0/24 через tun0 (виртуальный адаптер OpenVPN) к 192.168.11.2, а дальше, если тот пропустит то и до остальных IP адресов клиентской локальной сети. Но не работает.

ip route get 192.168.0.65
192.168.0.65 via 192.168.11.2 dev tun0 src 192.168.11.1 uid 0 
    cache

Клиентский компьютер имеет адрес в локальной сети 192.168.0.65. По идее, с сервера должн проходить ping 192.168.0.65, но не проходит. firewall отключен, так что ни что мешать не должно.

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

 

HighMan
()

UDP sendto как понять открыт ли порт?

Форум — Development

Здравствуйте, коллеги!

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, 0)
i = s.sendto("Hello".encode(), (127.0.0.1, 8080))

Насколько я понял, если 127.0.0.1 не слушает UDP порт 8080, то сервер должен вернуть ICMP сообщение, что невозможно доставить сообщение.

Собственно, вопрос: как эту ситуацию отлавливать? sendto просто возвращает число отправленных байтов и ему наплевать дошел ли пакет до получателя или нет. Как понять, что его ни кто не слушает? Понятно, что если на другом конце ни кто не слушает UDP 8080, то recvfrom ни когда ни чего не получит, но мне интересно как определить, открыть ли нужный UDP порт?

 ,

HighMan
()

smartctl как его понимать?

Форум — General

Приветствую коллеги!

Хотелось бы понимать сколько данных уже было записано на SSD Disk, но понимание не приходит.

Есть Device Model: Netac SSD 128GB, Serial Number: AA20220921128G455025.

smartctl -a /dev/sda | grep 'Sector Size'
Sector Size:      512 bytes logical/physical

smartctl -A /dev/sda
smartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.10.82-std-def-alt1] (ALT Sisyphus 7.2-alt1)
Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 1
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x0032   100   100   050    Old_age   Always       -       0
  5 Reallocated_Sector_Ct   0x0032   100   100   050    Old_age   Always       -       0
  9 Power_On_Hours          0x0032   100   100   050    Old_age   Always       -       1923
 12 Power_Cycle_Count       0x0032   100   100   050    Old_age   Always       -       15
160 Unknown_Attribute       0x0032   100   100   050    Old_age   Always       -       0
161 Unknown_Attribute       0x0033   100   100   050    Pre-fail  Always       -       100
163 Unknown_Attribute       0x0032   100   100   050    Old_age   Always       -       13
164 Unknown_Attribute       0x0032   100   100   050    Old_age   Always       -       844471
165 Unknown_Attribute       0x0032   100   100   050    Old_age   Always       -       1991
166 Unknown_Attribute       0x0032   100   100   050    Old_age   Always       -       1890
167 Unknown_Attribute       0x0032   100   100   050    Old_age   Always       -       1923
168 Unknown_Attribute       0x0032   100   100   050    Old_age   Always       -       5050
169 Unknown_Attribute       0x0032   100   100   050    Old_age   Always       -       62
175 Program_Fail_Count_Chip 0x0032   100   100   050    Old_age   Always       -       0
176 Erase_Fail_Count_Chip   0x0032   100   100   050    Old_age   Always       -       0
177 Wear_Leveling_Count     0x0032   100   100   050    Old_age   Always       -       0
178 Used_Rsvd_Blk_Cnt_Chip  0x0032   100   100   050    Old_age   Always       -       0
181 Program_Fail_Cnt_Total  0x0032   100   100   050    Old_age   Always       -       0
182 Erase_Fail_Count_Total  0x0032   100   100   050    Old_age   Always       -       0
192 Power-Off_Retract_Count 0x0032   100   100   050    Old_age   Always       -       13
194 Temperature_Celsius     0x0022   100   100   050    Old_age   Always       -       54
195 Hardware_ECC_Recovered  0x0032   100   100   050    Old_age   Always       -       0
196 Reallocated_Event_Count 0x0032   100   100   050    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   100   100   050    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0032   100   100   050    Old_age   Always       -       0
199 UDMA_CRC_Error_Count    0x0032   100   100   050    Old_age   Always       -       0
232 Available_Reservd_Space 0x0032   100   100   050    Old_age   Always       -       100
241 Total_LBAs_Written      0x0030   100   100   050    Old_age   Offline      -       5228137
242 Total_LBAs_Read         0x0030   100   100   050    Old_age   Offline      -       561
245 Unknown_Attribute       0x0032   100   100   050    Old_age   Always       -       7002196

Залез на https://www.virten.net/2016/12/ssd-total-bytes-written-calculator/ ресурс, который, якобы переводит LBA в удобоваримые значения и что я там вижу? А вижу я, что на диск было всего записано 2Gb!

Не плохо, правда?

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

while true; do
dd if=/dev/random of=/root/fordel.bak bs=4M
rm -fr /root/fordel.bak
done

Примерное число записанных блоков (1 блок около 100Gb) около 8000. Т.е. ну ни как не 2Gb.

Тогда полез эксперементировать и подбирать размер записи, что бы Total_LBAs_Written изменился на 1. И примерно такой размер удалось вычислить!

dd if=/dev/zero of=/fordel.bak bs=32M count=1

Т.е. после записи блока 32Mb Total_LBAs_Written возрастает на 1. Вот это уже более похоже на правду.

echo "$((5228137 * 32 /1024/1024))"
159

Примерно 159Tb. Ресурс превзойден всего в 2 раза. Диск стал ощутимо тормозить.

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

 ,

HighMan
()

stdio vs iostream и куча вопросов

Форум — Development

Здравствуйте, коллеги! Везде пишут, что если пишешь на С++ то нужно использовать iostream.

Но я не могу понять в чем преимущество потокового ввода-вывода?

На мой взгляд, stdio.h удобнее в использовании как для вывода в терминал, так и для файловых операций. Кстати, этот подход более соответствует философии Linux, «все есть файл».

Где-то писали, что в С++ можно использовать stdio (без «.h»), но я таковой у себя в Fedora 37 не обнаруживаю.

У меня на данный момент задумка довольно элементарная: в зависимости от ситуации назначить файл/поток для ввода-вывода.

Например: Если процесс демонизируется, то для вывода назначить log файл. Если программа работает в обычном режиме, то писать в cout/stdout, cerr/stderr.

В обычном (ламповом) С все просто:

FILE * fout = fopen("logfile", "a+");

или:

FILE * fout = stdout

А как подобное сделать с потоками?

Да и нужны ли эти потоки?

В чем их преимущество?

 ,

HighMan
()

Как узнать тип файловой системы раздела без системных утилит?

Форум — Admin

Добрый день. Разумеется, есть масса утилит, которые возвращают fstype, но они же эту информацию от куда-то берут!

Масса полезной информации находится в /sys/block/diskname, но где информация о файловой системе?

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

 

HighMan
()

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