LINUX.ORG.RU

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

LXC. Пример контейнеров.

Форум — Admin

Трям, здрасте

Дисклеймер: на самого крутого и гламурного я не претендую. Просто скрипт, который ждёт конструктивной критики и предложений. Предупреждаю: ответственности за поломаные системы в продакшене я не несу.

Написал небольшой скрипт, сработает на любой Debian-базированной системе. Ставил на чистый debian 8, проблем не возникло, оттестировал на виртуалке работоспособность.

Напоминаю, не копи-паст в консоль, а сохранили в файлик - дали права на исполнение - запустили.
1-ый скрипт подготовит систему для работы с lxc, 2-ой будет создавать контейнеры и готовить к работе.

  • Создать и заполнить файлы install_lxc и create_container
  • Поправить настройки сети (поиск 1.0.0) в install_lxc
  • chmod +x
  • ./install_lxc



./install_lxc

#!/bin/bash
echo “Updating system and installing dependences”
apt-get update > /dev/null 2>&1
apt-get upgrade -y > /dev/null 2>&1
apt-get install lxc cgroup-bin bridge-utils debootstrap bridge-utils isc-dhcp-server -y > /dev/null 2>&1
#mount | grep cgroup
echo “Updating network”
cat <<< '
auto lo
	iface lo inet loopback
auto br0 
	iface br0 inet static
	bridge_ports eth1
	bridge_fd 0
	address 1.0.0.36
	netmask 255.255.255.0
	gateway 1.0.0.1
	dns-nameservers 1.0.0.1 8.8.8.8
auto nat0
	iface nat0 inet static
	bridge_ports none
	bridge_fd 0
	address 10.0.0.1
	netmask 255.255.255.0
post-up iptables-restore < /etc/network/iptables.up.rules
' > /etc/network/interfaces
echo “Enable packet forwarding”
sed -ie 's/#net.ipv4.ip_forward/net.ipv4.ip_forward/g' /etc/sysctl.conf
echo “Set up NAT”
sed -ie 's/INTERFACES=\"\"/INTERFACES="nat0"/g' /etc/default/isc-dhcp-server
cat <<< '
authoritative;
subnet 10.0.0.0 netmask 255.255.255.0 {
  range 10.0.0.10 10.0.0.50;
  option domain-name-servers 192.168.0.1, 8.8.8.8;
  option domain-name “lxc.ru”;
  option routers 10.0.0.1;
  default-lease-time 600;
  max-lease-time 7200;
}
' >> /etc/dhcp/dhcpd.conf
cat <<< '*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.0.0.0/24 -o lxbr0 -j MASQUERADE 
COMMIT
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
*filter
:FORWARD ACCEPT [0:0]
:INPUT DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
COMMIT' > /etc/network/iptables.up.rules
echo "finished, restart!"

./create_container name
#/bin/bash
echo “Creating container $1”
lxc-create -t debian -n $1 > /dev/null 2>&1
echo  "deb http://mirror.yandex.ru/debian sid main contrib non-free" > /var/lib/lxc/$1/rootfs/etc/apt/sources.list
chroot /var/lib/lxc/$1/rootfs apt update
sed -ie 's/lxc.network.type/#lxc.network.type/g' /var/lib/lxc/$1/config
cat <<< '
lxc.network.type = veth
lxc.network.link = br0
lxc.network.name = eth0
lxc.network.flags = up

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = nat0
lxc.network.name = eth1
' >> /var/lib/lxc/$1/config
echo “Please enter root password for container”
chroot /var/lib/lxc/$1/rootfs passwd
chroot /var/lib/lxc/$1/rootfs apt update
chroot /var/lib/lxc/$1/rootfs apt install openssh-server htop $1-server -y
lxc-start -n $1 -d
echo “finished! use lxc-attach -n $1”

 , ,

egeneralov
()

Как оценить свой уровень в программировании?

Форум — Talks

Сабж.

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

в 14 году я свалил со старой работы, пилил pet-проектик для резюме да восстановления навыков, и искал работу новую. Аккурат к кризису в кранодар насыпало хипстерских конторок которым на серьезные деньги (~120тр) были нужны серьезные java сеньеры.

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

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

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

Но осадочек то остался, остался и вопрос - как понять свой уровень?

 

Deleted
()

Отлов сессии su/sudo

Форум — General

Вот мне интересно стало, можно ли из bash скрипта отловить факт того, что пользователь уже раз заходил в систему и теперь меняет пользователя? Меня не привилегии интересуют, а именно факт того, что текущая интерактивная сессия открыта через

su или sudo -i?

(Ну я имею ввиду более человеческий способ, чем парсить выхлоп ps axf.)

 , ,

atrus
()

Ebal — интерфейс доступа для Cabal из Emacs

Форум — Talks

Опубликован исходный код расширения Ebal — интерфейс доступа к пакетному менеджеру Cabal из Emacs. Проект находится на ранней стадии разработки, однако, уже доступны основные команды Cabal, такие как:

  • cabal build
  • cabal configure
  • cabal sdist
  • cabal bench
  • cabal freeze
  • cabal fetch
  • cabal install
  • cabal check
  • cabal list
  • cabal sandbox init
  • cabal info
  • cabal test
  • cabal update
  • cabal sandbox delete
  • cabal clean

    Так же, есть возможность вешать хуки на событие выполнения команды. Имеется возможность кастомизации настроек, таких как путь к исполняемому файлу Cabal:
    ebal-cabal-executable ⇒ nil
    , политика создания песочницы:
    ebal-sandboxing ⇒ ask
    и другие полезные настройки.


    Интерфейс пользователя использует подход, применяемый, например, в magit: https://raw.githubusercontent.com/mrkkrp/ebal/gh-pages/ebal-execute.png

    адрес репозитория: https://github.com/mrkkrp/ebalПеремещено JB из development

 , ,

zarkone
()

Самый простейший и легковесный http-сервер?

Форум — Admin

Какой простейший и самый легковесный HTTP сервер вы можете посоветовать? Чтобы никаких лишних примочек, никакой поддержки интерпретаторов. Чтобы умел только показывать файлы и содержимое директории и занимал минимум памяти. Хочется воткнуть такой на Raspberry Pi.

 , ,

Rinaldus
()

git удалить мусор

Форум — Desktop

есть каталог src в нём 100500 подкаталогов и 1005000500 мусора (неотслеживаемых файлов которые видно по git status) и 1005000 изменений которым commit не был сделан как этот мусор удалить и откатить изменения?

Делать add и commit, а потом откатывать commit? А потом удалять сам commit (потому что он только мусор держит)? А хотелось бы просто сбросить до девственного состояния после git clone.

Можно конечно просто клонировать ещё раз из этого же каталога и получить то что хочется, но как просто очистить текущий каталог?

 

Dron
()

Джента с электроникой

Форум — Talks

Хочу гитарное дрочево с глитчами и брейккором без вокала типа этого
Аарона Спектора (Drumcorps) слушал, аранжировки годные, но адские визги и хрюки на фоне все портят.

 

bubblecore
()

Ноутбук Dell не грузится, black screen после grub [РЕШЕНО]

Форум — Linux-hardware

В общем. Поменял Asus X200MA на Dell с N3710. Теперь фича: не грузится без nomodeset. С nomodeset не работает настройка яркости экрана. /sys/class/brightness пуст. Как заставить работать без nomodeset? Pentium N3710. Ах да. Не грузится - это черный экран сразу после Grub.

Update: задача решена! Действительно, компьютеры Dell не хотят грузиться в случае, если в UEFI режиме указан «Enable Legacy boot».

Для корректной работы Linux'a на Dell Inspiron 3452/3552 достаточно прописать acpi_osi=Linux (начинают работать все функциональные клавиши, а не только часть) и отключить Legacy boot. Кроме того, пытался обновить UEFI до последней версии, но это не помогло. Тем не менее, у меня сейчас последний UEFI на данный момент (сентябрьский, 2016 года).

И да, яркость регулируется с помощью intel_backlight, а не acpi_backlight=vendor. Поэтому последний не нужен. Он (dell_backlight) и не появится, если не указать acpi_backlight. Это не ASUS.

За решение спасибо тов. timdorohin.

 , , ,

Deleted
()

Python xml parsing (named)

Форум — Development

Пытаюсь марсить статистику бинда. Бинд через сокет отдает статистику в xml, примерно такую:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/bind9.xsl"?>
<statistics version="3.6">
	<server>
		<boot-time>2016-09-20T11:04:14Z</boot-time>
		<config-time>2016-09-28T05:11:43Z</config-time>
		<current-time>2016-09-28T06:18:29Z</current-time>
		<counters type="opcode">
			<counter name="QUERY">324477875</counter>
			<counter name="NOTIFY">90</counter>
			<counter name="UPDATE">18337</counter>
		</counters>
		<counters type="qtype">
			<counter name="RESERVED0">17</counter>
			<counter name="A">261391066</counter>
			<counter name="NS">618794</counter>
			<counter name="CNAME">10502</counter>
			<counter name="ANY">5388518</counter>
			<counter name="DLV">63918</counter>
		</counters>

Скрипт следующий:

import xml.etree.ElementTree as ET
tree = ET.parse('/etc/bind/stats/ststistic.xml')
root = tree.getroot()                           

for child in root[0]:
  print child.tag, child.attrib, child.text
выдает

boot-time {} 2016-09-20T11:04:14Z
config-time {} 2016-09-28T05:11:43Z
current-time {} 2016-09-28T06:18:29Z
counters {'type': 'opcode'} None
counters {'type': 'qtype'} None

нужная мне статистика в opcode, пробую так:

for child in root[0][0]:
  print child.tag, child.attrib, child.text
получаю пустоту. Почему так? как получить значения вложеных элементов?

 , , ,

DeeZ
()

Raspberry Pi 3 B+ SSH over wifi

Форум — General

Имею вот такую проблему с сабжем.

1. Подключаю малину в сеть по Wifi. Ноут тоже подключаю по Wifi. логинюсь по ssh с ноута на малину - всё ок. С малины на ноут -всё ок.

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

Вот дебаг

bash-4.2$ ssh -vvv pi@1.5.1.2
OpenSSH_7.3p1, OpenSSL 1.0.1t  3 May 2016
debug1: Reading configuration data /etc/ssh/ssh_config
debug2: resolving "1.5.1.2" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to 1.5.1.2 [1.5.1.2] port 22.
debug1: Connection established.
debug1: identity file /home/test/.ssh/id_rsa type 1
debug1: key_load_public: No such file or directory
debug1: identity file /home/test/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/test/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/test/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/test/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/test/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/test/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/test/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.3
debug1: Remote protocol version 2.0, remote software version OpenSSH_6.7p1 Raspbian-5+deb8u3
debug1: match: OpenSSH_6.7p1 Raspbian-5+deb8u3 pat OpenSSH* compat 0x04000000
debug2: fd 3 setting O_NONBLOCK
debug1: Authenticating to 1.5.1.2:22 as 'pi'
debug3: hostkeys_foreach: reading file "/home/test/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /home/test/.ssh/known_hosts:38
debug3: load_hostkeys: loaded 1 keys from 1.5.1.2
debug3: order_hostkeyalgs: prefer hostkeyalgs: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
debug3: send packet: type 20
debug1: SSH2_MSG_KEXINIT sent
debug3: receive packet: type 20
debug1: SSH2_MSG_KEXINIT received
debug2: local client KEXINIT proposal
debug2: KEX algorithms: curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c
debug2: host key algorithms: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa
debug2: ciphers ctos: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc
debug2: ciphers stoc: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc,3des-cbc
debug2: MACs ctos: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,zlib@openssh.com,zlib
debug2: compression stoc: none,zlib@openssh.com,zlib
debug2: languages ctos: 
debug2: languages stoc: 
debug2: first_kex_follows 0 
debug2: reserved 0 
debug2: peer server KEXINIT proposal
debug2: KEX algorithms: curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1
debug2: host key algorithms: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ssh-ed25519
debug2: ciphers ctos: aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
debug2: ciphers stoc: aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com
debug2: MACs ctos: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,zlib@openssh.com
debug2: compression stoc: none,zlib@openssh.com
debug2: languages ctos: 
debug2: languages stoc: 
debug2: first_kex_follows 0 
debug2: reserved 0 
debug1: kex: algorithm: curve25519-sha256@libssh.org
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug3: send packet: type 30
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug3: receive packet: type 31
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:mpJGNaE0wqqxzI5XZVFVygVAiCQY11xUl8WZdjWYL6I
debug3: hostkeys_foreach: reading file "/home/test/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /home/test/.ssh/known_hosts:38
debug3: load_hostkeys: loaded 1 keys from 1.5.1.2
debug1: Host '1.5.1.2' is known and matches the ECDSA host key.
debug1: Found key in /home/test/.ssh/known_hosts:38
debug3: send packet: type 21
debug2: set_newkeys: mode 1
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug3: receive packet: type 21
debug2: set_newkeys: mode 0
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS received
debug2: key: /home/test/.ssh/id_rsa (0x7fd14da1d450)
debug2: key: /home/test/.ssh/id_dsa ((nil))
debug2: key: /home/test/.ssh/id_ecdsa ((nil))
debug2: key: /home/test/.ssh/id_ed25519 ((nil))
debug3: send packet: type 5
debug3: receive packet: type 6
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug3: send packet: type 50
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password
debug3: start over, passed a different list publickey,password
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/test/.ssh/id_rsa
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/test/.ssh/id_dsa
debug3: no such identity: /home/test/.ssh/id_dsa: No such file or directory
debug1: Trying private key: /home/test/.ssh/id_ecdsa
debug3: no such identity: /home/test/.ssh/id_ecdsa: No such file or directory
debug1: Trying private key: /home/test/.ssh/id_ed25519
debug3: no such identity: /home/test/.ssh/id_ed25519: No such file or directory
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
pi@1.5.1.2's password: 
debug3: send packet: type 50
debug2: we sent a password packet, wait for reply
debug3: receive packet: type 52
debug1: Authentication succeeded (password).
Authenticated to 1.5.1.2 ([1.5.1.2]:22).
debug1: channel 0: new [client-session]
debug3: ssh_session2_open: channel_new: 0
debug2: channel 0: send open
debug3: send packet: type 90
debug1: Requesting no-more-sessions@openssh.com
debug3: send packet: type 80
debug1: Entering interactive session.
debug1: pledge: network
debug3: receive packet: type 91
debug2: callback start
debug2: fd 3 setting TCP_NODELAY
debug3: ssh_packet_set_tos: set IP_TOS 0x10
debug2: client_session2_setup: id 0
debug2: channel 0: request pty-req confirm 1
debug3: send packet: type 98
debug2: channel 0: request shell confirm 1
debug3: send packet: type 98
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768

При подключении малины по шнурку такого не наблюдается.

ЗЫ: Софт обновлял:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo rpi-update

 ,

Tasman
()

Flash/HTML 5 видео в отдельном окне.

Форум — Development

Давно хотел сделать вывод видео из google chrome в отдельном окне (без рамки, простым оверлеем без всяких MPV на основе превьюшек (thumbnails)).

Решил совместить приятное с полезным и за одно посмотнреть на QML. Такчто можно сказать получился «Hello World» на QML. Решил выложить (может кому пригодится - можно применять не только к браузерам а к любому софту хоть к консоли).

Как пользоватся:

Открываем страницу с нужным видео (youtube, twitch и тд) в отдельном окне браузера и затаскиваем его на виртуальный десктоп «для хлама».
Запускаем «thumb.sh» появляется курсор выбора окна (xwininfo).
Кликаем по окну браузера и ждем запуска основного приложения.
Появляется синий полупрозрачный прямоугольник который нужно расположить точно поверх видео (помогает зажатый Alt + левая / правая кнопка мыши).
После того как оверлей выравнен по видео нажимаем кнопку 'lock' (или дабл клик мыши по оверлею).
Далее распологаем наш фрагмент окна в желаемой позиции монитора (дабл клик переключает между большим и малым размером).

thumb.sh

#!/bin/bash

cd `dirname "$0"`

lines=`xwininfo|tr -d ' ' | tr '":' ' '`

dstVar=""
for line in $lines; do
        if [ ! -z "${dstVar}" ]; then
                eval "${dstVar}=${line}"
                dstVar=""
        fi

        case "${line}" in
                'Windowid') dstVar='id'     ;;
                'Width'   ) dstVar='width'  ;;
                'Height'  ) dstVar='height' ;;
                'Absoluteupper-leftX' ) dstVar='left' ;;
                'Absoluteupper-leftY' ) dstVar='top' ;;

                * ) ;;
        esac
done

exec qml thumb.qml -- ${id} ${left} ${top} ${width} ${height}

thumb.qml

import QtQuick 2.2                                                                                                                                          
import QtQuick.Window 2.2                                                                                                                                   
import QtQuick.Controls 1.4                                                                                                                                 
                                                                                                                                                            
import org.kde.plasma.core 2.0 as PlasmaCore                                                                                                                
                                                                                                                                                             
Window
{
        id: wnd
        visible: true
        width: 320
        height: 160

        title: 'Thumb'

        color: 'blue'
        opacity: 0.5
        flags: Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint

        property var isLocked: false
        property var maxWidth: 0;
        property var minWidth: 0;
        property var isMax: false;

        property var src:
        ({
                x: parseInt(Qt.application.arguments[4]),
                y: parseInt(Qt.application.arguments[5]),
                w: parseInt(Qt.application.arguments[6]),
                h: parseInt(Qt.application.arguments[7])
        })

        property var crop:
        ({
                x: 0,
                y: 0,
                w: parseInt(Qt.application.arguments[6]),
                h: parseInt(Qt.application.arguments[7])
        })

        function lock()
        {
                wnd.opacity     = 1.0;
                wnd.isLocked    = true;
                lockBtn.visible = false;
                thumb.visible   = true;
                wnd.maxWidth    = crop.w;
                wnd.minWidth    = crop.w;

                console.log('Locked !');
        }

        function togleMinMax()
        {
                var nw, nh;

                if( wnd.isMax )
                {
                        nw = wnd.minWidth;
                        wnd.maxWidth = wnd.width;
                        wnd.isMax    = false;
                }
                else
                {
                        nw = wnd.maxWidth;
                        wnd.minWidth = wnd.width;
                        wnd.isMax = true;
                }

                nh = ((nw * crop.h) / crop.w);
                wnd.x -= (nw - wnd.width);
                wnd.y -= (nh - wnd.height);
                wnd.width  = nw;
                wnd.height = nh;
        }

        function fixThumb()
        {
                if( wnd.isLocked )
                {
                        var sf = wnd.width / crop.w;
                        console.log('Scale factor: ' + sf);

                        thumb.x      = -(crop.x * sf);
                        thumb.y      = -(crop.y * sf);
                        thumb.width  = src.w * sf;
                        thumb.height = src.h * sf;
                }
                else
                {
                        crop.x = (wnd.x - src.x);
                        crop.y = (wnd.y - src.y);
                        crop.w = wnd.width;
                        crop.h = wnd.height;

                        thumb.x = - crop.x;
                        thumb.y = - crop.y;
                }
        }

        onXChanged:      { if(! wnd.isLocked) fixThumb(); }
        onYChanged:      { if(! wnd.isLocked) fixThumb(); }
        onHeightChanged: { fixThumb(); }
        onWidthChanged:  { fixThumb(); }

        PlasmaCore.WindowThumbnail {
                id: thumb
                visible: false;

                x: 0
                y: 0
                width:  parseInt(Qt.application.arguments[6])
                height: parseInt(Qt.application.arguments[7])

                winId: parseInt(Qt.application.arguments[3])
        }

        MouseArea
        {
                anchors.fill: parent

                onDoubleClicked:
                {
                        if( wnd.isLocked )
                        {
                                wnd.togleMinMax();
                        }
                        else
                        {
                                wnd.lock();
                        }
                }
        }

        Button
        {
                id: lockBtn

                anchors.top:   parent.top
                anchors.right: parent.right

                text: 'lock'

                onClicked: { wnd.lock(); }
        }
}

PS. На моем KDE 5.6.5 работает, будет ли еще гдето работать - хз

 , , ,

zaz
()

Запилил безрутовый Reverse Tethering для Android

Форум — Mobile

[update]

Новая версия: https://github.com/vvviperrr/SimpleRT

Реализована поддержка сразу нескольких подключенных android девайсов, притом все девайсы находятся в одной виртуальной сети. Удобно напрямую обмениваться файлами с девайса на девайс.

Днс сервер теперь можно указать вручную, либо оставить используемый по умолчанию.

Код полностью переработан, софтина стала намного стабильнее.

Потенциальные юз-кейсы (помимо очевидного - получения интернета):

  • анализ трафика
  • основа для стенда тестирования

[/update]

Позволяет раздать интернет с ПК на мобильный девайс через usb, без рута, без adb. Зачем оно местному анонимусу? В случаях, когда нет wi-fi, когда не ловит 3g/lte (или ловит, но скорость небольшая), но есть ПК с жирным каналом. Почему бы не воспользоваться им, да еще и попутно подзарядить девайс?

Софтина в 2-х частях, андроидная и десктопная. Андроиды поддерживаются от 4.0 и выше. Оси - только линукс и osx. По факту создается виртуальный туннель, на десктопе настраивается ip forward и nat. Можно использовать для передачи файлов с ПК на девайс и обратно (поднять туннель и запустить ftp/samba/etc сервер на девайсе). Хорошая альтернатива mtp (который под линуксом работает чуть лучше, чем никак).

Для передачи данных по usb используется Android Open Accessory API, т.е ПК выступает в роли аксессуара. Со стороны ПК - libusb, с простой реализацией AOA.

Андроидная часть - простой VpnService, без гуя. При первом коннекте девайс спросит, использовать ли софтину постоянно с этим «аксессуаром» и разрешает ли владелец перехват трафика. При последующих соединениях просто молча запустится тетеринг.

Есть минусы: некоторые приложения (например youtube) не хотят работать с сетью, если нет ни wi-fi, ни 3g соединения. Выход - смириться, либо перед запуском туннеля оставить один из видов соединения. Трафик все равно пойдет по туннелю (на нем дефолтный маршрут). Ну либо поднять рута, в xposed framework есть плагин, который исправляет ситуацию.

Конкуренты с маркета:

Естественно open source. Код далек от идеала, по факту это просто proof of concept. Но работает стабильно. Идеи, пожелания, рекомендации охотно принимаются на гитхабе.

Если нет желания самому собирать апкшку - на гитхабе лежит уже собранная. Если софтина вызовет хоть минимальный интерес у сообщества - так и быть, подарю гуглу 25 баксов и выложу в маркет.

https://github.com/vvviperrr/SimpleRT

пс. подгоните иконку тематическую.

upd. тема на hn - https://news.ycombinator.com/item?id=12198085

Перемещено Klymedy из development

 , , , ,

vvviperrr
()

Ищу хороший клиент MySQL под Андроид

Форум — Mobile

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

 ,

Qwentor
()

Профессионально о блокировке запрещённых сайтов

Форум — Admin

Добрый день! Есть тут админы, работающие в телекоме? Нужен совет.
Как известно, есть одна неприятная для нашего коллеги организация, «Роскомнадзор» называется. Они конечно, козлы, но тем не менее на штраф нарваться сильно не хочется. Вобщем как вы все знаете, все российские операторы должны блокировать доступ своим абонентам к ресурсам, включённым в так называемый «реестр запрещённых ресурсов». О том каким способом блокировать, можно дискутировать, но чиновники в РКН в это тоже вмешиваются. В общем, если у тебя есть лицензия оператора связи (на передачу данных и телематических услуг) - то к тебе прикрепляется чиновкик РКН, шлёт тебя распоряжения и рекомендации. Вобщем нам на неделе прислали распоряжение, согласно которому мы должны в 30 дневный срок установить ПО с помощью которого РКН будет контролировать блокируем мы запрещённые ресурсы или нет. До этого, контроль с их стороны осуществлялся только тем, что они фиксировали тот факт, что мы регулярно получаем выгрузку реестра. Меж тем, вопрос как именно осуществлять блокировку до сих пор является спорным.
Вот взять к примеру ресурс http://www.youtube.com/watch?v=aUI*****P4M, как его блокировать? Варианты блокировки по ip или по домену - не катят, youtube - слишком популярный ресурс, пользователи бучу поднимут. Меж тем в реестре информация о запрещённом ресурсе представлена следующим образом:

<content id="102799" includeTime="2015-02-25T12:39:38" entryType="1" hash="983D0E1A53AA5A8783BB8C1AEC927AF6">
   <decision date="2014-08-21" number="2-3320/14" org="суд"/>
   <url>http://www.youtube.com/watch?v=aUI*****P4M</url>
   <domain>www.youtube.com</domain>
   <ip>72.8.190.47</ip>
</content>
Как осуществлять блокировку по url? Это же трафик всех абонентов через прокси пускать нужно.

 ,

sunny1983
()

Переезд доменных зон

Форум — Admin

Есть машина m1, на котором вертится BIND9+ISC DHCPD и всё это отвечает за DDNS. Переезжаем на новую машину m2. Думал сделать так:

  1. запустить на m2 BIND9 как slave для нынешней зоны;
  2. настроить пересылку обновлений зоны со m1 на m2;
  3. прописать ключи от m2 для ISC DHCPD в конфиге BIND9 m1;
  4. настроить внесение изменений в зону на m2 от ISC DHCPD m1;
  5. дождаться синхронизации файлов зон;
  6. настроить на m1 BIND9 как slave и одновременно на m2 BIND9 как master;
  7. выключить BIND9+ISC DHCPD на m1;
  8. rsync lease файлы m1->m2;
  9. запустить ISC DHCPD на m2;
  10. радоваться.

Но оказалось, что slave хранит зоны в бинарных файлах, а не текстовых как master. И когда говоришь slave что он тепереь master то ругается на неправильный формат файлов. Какая опция BIND9, отвечает что бы slave хранил копии зон в тексте? Какие ещё моменты упущены для максимально плавного с точки зрения клиентов переезда?

 ,

leonidko
()

Не парсятся URL с Emoji

Форум — Linux-org-ru

Парсер ссылок не понимает URL, который содержит Emoji символы

Пример

http://🍓🌽🌊🌾🚀🎾👞🍆.🍕💩.ws

 , , ,

fornlr
()

Организация небольшого проекта на Python

Форум — Development

Запилил маленькую консольную утилиту для генерации заголовочных файлов с описанием регистров и прерываний (пример - http://pasted.co/31caec09), а также скрипта линковщика (а ещё выводит необходимые ключики компилятора). Полезно при программировании некоторых микроконтроллеров (в данный момент поддерживается лишь два семейства ARM).

Проект небольшой, но таки состоит из нескольких файлов. Хотел бы узнать как правильно его структурировать (или все py-файлы в корне это ок?). А также как облегчить его установку и опакечивание (в случае C/C++ проекта я бы добавил цели install/uninstall в Makefile).

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

Ссылка: https://github.com/KivApple/mcu-info-util

 

KivApple
()

Нужна помощь по интерпретатору bash

Форум — Development

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

 

Alexeyy95
()

avconv и плейлист

Форум — Multimedia

Здравствуйте. Нужно реализовать воспроизведение файлов из плейлиста при помощи avconv. Тоесть, чтобы avconv читал файл из плейлиста и транслировал в RTMP. Желательно, без разрыва трансляции. Если это невозможно реализовать при помощи avconv, то посоветуйте программу, которая могла бы воспроизводить видеофайлы, накладывать логотип и отдавать поток RTMP на nginx-rtmp-module. Огромное спасибо заранее.

 , ,

nsoq
()

nginx fastcgi POST/GET/PUT/DELETE

Форум — General

Можно ли средствами nginx разрулить поступление запроса на один и тот же URL разными методами по разным fastcgi?

Те прописать что при приходе на URL запроса методом POST мы заруливаем сюда, при приходе на этот же URL запроса методом GET туда и тд.

 

quest
()