Настройки сети с помощью 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");