Настройки сети с помощью PowerShell 4.0
Сергей Яремчук
New-NetIPAddress -InterfaceAlias Ethernet -IPv4Address 192.168.0.2 -DefaultGateway 192.168.0.1
Set-NetIPAddress -InterfaceAlias Ethernet -PrefixLength 24
Remove-NetIPAddress -IPAddress 192.168.0.2
Get-DnsClientServerAddress
Set-DNSClientServerAddress -InterfaceIndex 12 -ServerAddresses "192.168.0.1","8.8.8.8"
Get-NetRoute
New-NetRoute -DestinationPrefix "0.0.0.0/0" -NextHop "192.168.0.1" -InterfaceIndex 12
Test-NetConnection -ComputerName SRV01.example.org -source localhost, SRV02.example.org
Test-NetConnection -Port 80 -InformationLevel Detailed
Set-NetTCPSetting -SettingName DatacenterCustom -ECNCapability Enabled -CongestionProvider DCTCP
New-NetTransportFilter –SettingName DatacenterCustom –DestinationPrefix 172.16.0.0/16
-----------------------------------------------------------------------------------------------------------------
Набор утилит dtools. Управляем множеством UNIX-систем
Сергей Яремчук
$ sudo apt-get install git
$ git clone https://github.com/ajdiaz/dtools.git
$ cd dtools
$ sudo cp dt dthost dtstatus /usr/bin
$ sudo cp -r lib /usr/lib/dtools
$ sudo cp -r doc/man/ /usr/share/man/man1
dt pattern command arguments
localhost www smtp mysql
host1 www mysql wp
host2 www pg wp
$ dt tag:www list
$ dt tag:mysql+tag:wp list
$ dt tag:mysql:tag:wp list
$ dt exp:.* list | dthost
$ dt sys:host3 add mysql
ssh-keyscan host >> ~/.ssh/known_hosts
$ dt -i exp:.* ssh-copy-id ~/.ssh/id_dsa.pub
-----------------------------------------------------------------------------------------------------------------
Инфокиоск своими руками
Игорь Орещенков
$ sudo apt-get install openssh-server chromium-browser
$ sudo apt-get -y --print-uris install openssh-server chromium-browser
$ sudo dpkg -i ./*.deb
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m tcp -dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 53 -j ACCEPT
-A OUTPUT -p udp -m conntrack --ctstate NEW -m udp --dport 53 -j ACCEPT
-A OUTPUT -p udp -m conntrack --ctstate NEW -m udp --dport 123 -j ACCEPT
-A OUTPUT -d www.webserver.com -p tcp -m conntrack --ctstate NEW -m multiport --dports 80,443
-A OUTPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
$ sudo /etc/network/if-up.d/iptables-rules
$ sudo useradd -m -U -G nopasswdlogin kioskuser
$ sudo passwd kioskuser
[Desktop Entry]
Name = Kiosk
Comment = Kiosk Mode
Exec = /usr/bin/kiosk
Type = Application
#!/bin/sh
/usr/bin/openbox &
/usr/bin/chromium-browser
$ sudo chmod a+x /usr/bin/kiosk
$ sudo su –
# mkdir -p /home/kioskuser/.config/openbox
# cp /etc/xdg/openbox/* /home/kioskuser/.config/openbox
/usr/bin/chromium-browser
# chown kioskuser:kioskuser /home/kioskuser/.config
...
...
...
нужно заменить на
...
1
...
+ : kioskuser : :0
- : ALL : LOCAL
account required pam_access.so
Section "ServerFlags"
Option "DontVTSwitch" "true"
EndSection
[SeatDefaults]
allow-guest = false
greeter-hide-users = true
autologin-user = kioskuser
autologin-user-timeout = 0
user-session = openbox
...
while true;
do /usr/bin/chromium-browser --kiosk http://www.webserver.com
sleep 5s;
done
set superusers="kioskadmin"
password kioskadmin PaSsWoRd
export superusers
echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' --unrestricted {" | sed "s/^/$submenu_indentation/"
echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$type-$boot_device_id' --unrestricted {" | sed "s/^/$submenu_indentation/"
$ sudo update-grub
-----------------------------------------------------------------------------------------------------------------
Установка и настройка Katello, Pulp и Candlepin. Знакомимся с новым поколением Red Hat Network
Денис Силаков
$ ping -c1 localhost
$ ping -c1 `hostname -s`
$ ping -c1 `hostname -f`
# rpm -Uvh http://fedorapeople.org/groups/katello/releases/yum/1.4/RHEL/6Server/x86_64/katello-repos-1.4.4-1.el6.noarch.rpm
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# wget -O /etc/yum.repos.d/epel-rhsm.repo http://repos.fedorapeople.org/repos/candlepin/subscription-manager/epel-subscription-manager.repo
# yum-config-manager --enable rhel-6-server-optional-rpms
# rhn-channel --add --channel=rhel-x86_64-server-optional-6
# yum install -y katello-all
# katello-configure --user-name=admin --user-pass=123456 --user-email=admin@rosalab.ru --org-name=ROSA
# yum install subscription-manager
# yum install katello-agent
# rpm -Uvh https://_имя_хоста_katello/pub/candlepin-cert-consumer-latest.noarch.rpm
# subscription-manager register --org ROSA
# subscription-manager list --available
# subscription-manager release --set=6.1
-----------------------------------------------------------------------------------------------------------------
Облако от VMware. Часть 1. Разворачиваем vCloud Director
Александр Руденко
USE [ИМЯ_БД]
GO
ALTER DATABASE [ИМЯ_БД] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [ИМЯ_БД] SET ALLOW_SNAPSHOT_ISOLATION ON;
ALTER DATABASE [ИМЯ_БД] SET READ_COMMITTED_SNAPSHOT ON WITH NO_WAIT;
ALTER DATABASE [ИМЯ_БД] SET MULTI_USER;
GO
USE [ИМЯ_БД]
GO
CREATE LOGIN [ИМЯ_ПОЛЬЗОВАТЕЛЯ] WITH PASSWORD = 'ПАРОЛЬ', DEFAULT_DATABASE =[ИМЯ_БД], DEFAULT_LANGUAGE =[us_english], CHECK_POLICY=OFF
GO
CREATE USER [ИМЯ_ПОЛЬЗОВАТЕЛЯ] for LOGIN [ИМЯ_ПОЛЬЗОВАТЕЛЯ]
GO
USE [ИМЯ_БД]
GO
sp_addrolemember [db_owner], [ИМЯ_ПОЛЬЗОВАТЕЛЯ]
GO
# vi /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=
NETMASK=<маска-подсети>
# service network restart
# yum -y install alsa-lib libICE libSM libX11 libXau libXdmcp libXext libXi libXt libXtst pciutils redhat-lsb
# bash /<путь_к_пакету>/vmware-vcloud-director-5.5.1-1654672.bin
# /opt/vmware/cloud-director/jre/bin ./keytool –keystore /etc/certificates.ks –storetype JCEKS –storepass <ПАРОЛЬ> -genkey –keyalg RSA -alias http
./keytool –keystore /etc/certificates.ks –storetype JCEKS –s torepass <ПАРОЛЬ> -genkey –keyalg RSA –alias consoleproxy
# bash /opt/vmware/vcloud-director/bin/configure
-----------------------------------------------------------------------------------------------------------------
USB_ModeSwitch, или «Кот в мешке»
Павел Закляков
cd C:\Program Files\USBPcap
USBPcapCMD.exe -d \\.\USBPcap2 -o - | "C:\Program Files\Wireshark\Wireshark.exe" -k -i -
tail -f /var/log/messages
# usb_modeswitch -W -v 19d2 -p 1514 -M "5553424312345678000000000000061b000000020000000000000000000000"
# rpm -ihv usb_modeswitch-1.2.3-1.el6.rf.x86_64.rpm
# rpm -ihv usb_modeswitch-data-20120120-1.el6.rf.noarch.rpm
$ wget http://www.draisberghof.de/usb_modeswitch/usb-modeswitch-2.1.1.tar.bz2
$ tar -xvf usb-modeswitch-2.1.1.tar.bz2
$ cd usb-modeswitch-2.1.1
# make install
usb-modeswitch -h
-----------------------------------------------------------------------------------------------------------------
Программирование USB в Android. Используем для связи интерфейс USB
Сергей Ильичев
private TextView lgView;
private UsbManager mUsbManager;
private UsbDevice mDevice;
private UsbDeviceConnection mConnection;
private UsbEndpoint mEndpointIntr.
lgView = (TextView)findViewById(R.id.logTextView);
mUsbManager = (UsbManager)getSystemService(Context.USB_SERVICE);
Листинг 1. Обработчик события onResume()
public void onResume() {
super.onResume();
//заполняем контейнер списком устройств
HashMap deviceList = mUsbManager.getDeviceList();
Iterator deviceIterator = deviceList.values().iterator();
lgView.setText( "Devices Count:" + deviceList.size() );
while (deviceIterator.hasNext()) {
UsbDevice device = (UsbDevice) deviceIterator.next();
//пример определения ProductID устройства
lgView.setText( lgView.getText() + "\n" + "Device ProductID: " + device.getProductId() );
}
//определяем намерение, описанное в фильтре намерений AndroidManifest.xml
Intent intent = getIntent();
lgView.setText( lgView.getText() + "\n" + "intent: " + intent);
String action = intent.getAction();
//если устройство подключено, передаем ссылку в функцию setDevice()
UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
setDevice(device);
lgView.setText( lgView.getText() + "\n" + "UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action) is TRUE");
} else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
if (mDevice != null && mDevice.equals(device)) {
setDevice(null);
lgView.setText( lgView.getText() + "\n" + "UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action) is TRUE");
}
}
}
Листинг 2. Функция setDevice()
private void setDevice(UsbDevice device) {
lgView.setText( lgView.getText() + "\n" + "setDevice " + device);
//определяем доступные интерфейсы устройства
if (device.getInterfaceCount() != 1) {
lgView.setText( lgView.getText() + "\n" + "could not find interface");
return;
}
UsbInterface intf = device.getInterface(0);
//определяем конечные точки устройства
if (intf.getEndpointCount() == 0) {
lgView.setText( lgView.getText() + "\n" + "could not find endpoint");
return;
} else {
lgView.setText( lgView.getText() + "\n" + "Endpoints Count: " + intf.getEndpointCount() );
}
UsbEndpoint epIN = null;
UsbEndpoint epOUT = null;
//ищем конечные точки для передачи по прерываниям
for (int i = 0; i < intf.getEndpointCount(); i++) {
if (intf.getEndpoint(i).getType() == UsbConstants.USB_ENDPOINT_XFER_INT) {
if (intf.getEndpoint(i).getDirection() == UsbConstants.USB_DIR_IN) {
epIN = intf.getEndpoint(i);
lgView.setText( lgView.getText() + "\n" + "IN endpoint: " + intf.getEndpoint(i) );
}
else {
epOUT = intf.getEndpoint(i);
lgView.setText( lgView.getText() + "\n" + "OUT endpoint: " + intf.getEndpoint(i) );
}
} else {
lgView.setText( lgView.getText() + "\n" + "no endpoints for INTERRUPT_TRANSFER"); }
}
mDevice = device;
mEndpointIntr = epOUT;
//открываем устройство для передачи данных
if (device != null) {
UsbDeviceConnection connection = mUsbManager.openDevice(device);
if (connection != null && connection.claimInterface(intf, true)) {
lgView.setText( lgView.getText() + "\n" + "open device SUCCESS!");
mConnection = connection;
} else {
lgView.setText( lgView.getText() + "\n" + "open device FAIL!");
mConnection = null;
}
}
}
}
Листинг 3. Пример кода для отправки данных устройству
//определение размера буфера для отправки исходя из максимального размера пакета
int bufferDataLength = mEndpointIntr.getMaxPacketSize();
lgView.setText( lgView.getText() + "\n" + mEndpointIntr.getMaxPacketSize() );
ByteBuffer buffer = ByteBuffer.allocate(bufferDataLength + 1);
UsbRequest request = new UsbRequest();
buffer.put(message);
request.initialize(mConnection, mEndpointIntr);
request.queue(buffer, bufferDataLength);
try
{
if (request.equals(mConnection.requestWait()))
{
//отправка прошла успешно
//lgView.setText( lgView.getText() + "\n" +
//"sending CLEAR!!!");
}
}
catch (Exception ex)
{
//что-то не так...
//lgView.setText( lgView.getText() + "\n" +
//"sending not clear...");
}
Листинг 4. Файл AndroidManifest.xml
Листинг 5. Файл фильтра device_filter.xml (каталог /res/xml)
-----------------------------------------------------------------------------------------------------------------
Очереди. Теория и практика
Александр Календарев
INSERT INTO queue (data) VALUES (‘bla-bla-bla’);
START TRANSACTION;
SELECT id,data FROM queue ORDER BY id desc LIMIT 1;
DELETE queue WHERE id=…;
COMMIT;
START TRANSACTION;
SELECT id,data FROM queue WHERE is pop=0 ORDER BY id desc LIMIT 1;
UPDATE queue SET isPop = 1 WHERE id=…;
COMMIT;
#include
#include
#include
#include "zmq.h"
// объявляем контекст 0MQ и 0MQ сокет
int main (int argc, char const *argv[]) {
void* context = zmq_ctx_new();
void* respond = zmq_socket(context, ZMQ_REP);
// 0MQ слушает сообщения на порту 4040
zmq_bind(respond, "tcp://*:4040");
// в цикле ожидаем сообщения
for(;;)
{
zmq_msg_t request;
// инициализация сообщения
zmq_msg_init(&request);
// прием сообщения
zmq_msg_recv(&request, respond, 0);
printf("Received: hello\n");
// закрываем сообщение, освобождаем ресурсы
zmq_msg_close(&request);
// sleep one second
sleep(1);
zmq_msg_t reply;
// инициализация ответа на 5 байт
zmq_msg_init_size(&reply, strlen("world"));
// копируем само сообщение в область ответа
memcpy(zmq_msg_data(&reply), "world", 5);
// отправляем ответ
zmq_msg_send(&reply, respond, 0);
// закрываем ответ, освобождаем ресурсы
zmq_msg_close(&reply);
}
// закрываем контекст
zmq_close(respond);
// освобождаем ресурсы
zmq_ctx_destroy(context);
return 0;
}
#include
#include
#include
#include "zmq.h"
int main (int argc, char const *argv[]) {
// объявляем контекст 0MQ и 0MQ сокет
void* context = zmq_ctx_new();
void* request = zmq_socket(context, ZMQ_REQ);
//соединяется с 0MQ сервером
zmq_connect(request, "tcp://localhost:4040");
int count = 0;
for(;;) {
zmq_msg_t req;
// инициализация сообщения, выделение ресурсов
zmq_msg_init_size(&req, strlen("hello"));
//копирование сообщения в область передачи
memcpy(zmq_msg_data(&req), "hello", 5);
printf("Sending: hello - %d\n", count);
// отправляем сообщение
zmq_msg_send(&req, request, 0);
// закрываем сообщение, освобождаем ресурсы
zmq_msg_close(&req);
zmq_msg_t reply;
// инициализируем ответ
zmq_msg_init(&reply);
// принимаем ответ
zmq_msg_recv(&reply, request, 0);
printf("Received: hello - %d\n", count);
// закрываем ответ, освобождаем ресурсы
zmq_msg_close(&reply);
count++;
}
// закрываем контекст
zmq_close(request);
// освобождаем ресурсы
zmq_ctx_destroy(context);
return 0;
}
-----------------------------------------------------------------------------------------------------------------
Меньше кода, больше дохода. Часть 4. Разработка front-end-слоя
Михаил Ушаков
@Inject
@Path("context:/css/bootstrap.css")
private Asset bootstrapStylesheet;
@Environmental
protected JavaScriptSupport javaScriptSupport;
javaScriptSupport.importStylesheet(commonStylesheets);
@Import(stylesheet = "context:layout/layout.css")
public class Layout
{
// …
}
Layout present
...
org.got5
tapestry5-jquery
3.3.7
...
...
devlab722-repo
http://nexus.devlab722.net/nexus/content/repositories/releases
false
devlab722-snapshot-repo
http://nexus.devlab722.net/nexus/content/repositories/snapshots
false
...
configuration.add(JQuerySymbolConstants.SUPPRESS_PROTOTYPE, "false");
javaScriptSupport.importJavaScriptLibrary(jQueryCore);
-----------------------------------------------------------------------------------------------------------------