четверг, 25 июля 2013 г.

Включаем поддерку нестандартных модулей Qt при сборке с помощью CMAKE

О сборке Qt проектов с помощью CMake написано много. Однако в моем проекте я столкнулся со следующей трудностью - при использовании модуля QtXml проект не собирался. Хотя в секцию target_link_libraries была добавлена запись ${QT_LIBRARIES}.
Как оказалось, для включения дополнительных модулей (Network, SQL, SVG, XML etc) необходимо добавить в CMakeLists.txt запись вида SET(QT_USE_QTXML TRUE).

пятница, 8 марта 2013 г.

Включаем поддержку C++11 в Qt Creator

Дано - Kubuntu 12.10 Linux, Qt 4.8.3, gcc 4.7.2. Хочется попробовать все фишки новго стандарта. Компилятор их поддерживает, однако QtCreator ругается на их использование. Причина в том, что компилятор по умолчанию компилирует код, используя стандарт C++03. Исправить это можно путем добавления в описание проекта (.pro файл) строчку:
QMAKE_CXXFLAGS += -std=c++0x
Теперь можно с легкостью познать всю мощь нового стандарта.
По материалам: http://www.richelbilderbeek.nl/CppAuto.htm

понедельник, 4 марта 2013 г.

Смена канала обновления Google Chrome.

Сидеть на канале "stable" не интересно. Основные плюшки внедряются в каналы "dev"  и "beta". Переключить браузер на новый канал из настроек не получится - необходимо качать для каждого канала собственную сборку. Для Linux ситуация усугубляется тем, что для каждого пакетного менеджера надо еще и пакет свой собрать. Ссылки на  скачку установочных пакетов для всех поддерживаемых операционных систем (Windows, Linux, MacOS, Android) и всех каналов (stable, beta, dev) можно найти здесь. Для линукса поддерживается только "deb" и "rpm", кстати.

пятница, 1 марта 2013 г.

KolibriOS и MenuetOS. Различия.

Всегда интересовал данный вопрос. Во многих источниках писали через слеш названия обоих операционных систем. Может последовать неправильный вывод, что это одна и та же операционная система.
На самом деле, KolibriOS первоначально развивалась как форк MenuetOS, однако уже к версии 0.50 различия в коде составили 50%. А в 2007 году (так и не понял, какая версия) модель памяти была изменена и программы для двух ОС стали бинарно несовместимы.
Причина форка в том, что автор оригинальной системы MenuetOS Вилле Турьянмаа сосредоточил свои усилия на создании 64-битной версии своей системы. И закрыл ее исходники. Кстати, в отличии от KolibriOS, Menuet64 имеет полную поддержку сетевого стека и драйвера на самые распространенные сетевые карты. Вот вам и opensource.
Так что пока 32-битная версия MenuetOS потихоньку загнивает, KolibriOS во всю пилится русскоязычными и не очень программистами. Советую обратить свое внимание на последнюю. Все-таки  размер русскоязычного сообщества облегчает вхождение.
Подробнее про разногласия и форк: http://kolibri-n.org/inf/let_it_fly/index.php 

четверг, 7 февраля 2013 г.

Решение проблемы с установкой пакетов через apt на свежеустановленном Debian.

Итак, на машину только что установлена система с первого диска Debian. Обновляем список пакетов командой:
root@webserver:/home/kutsd# apt-get update
После этого пытаемся поставить что-либо командой:
root@webserver:/home/kutsd# apt-get install mc
На что получаем ошибку следующего типа:

root@webserver:/home/kutsd# apt-get install mc
Чтение списков пакетов... Готово
Построение дерева зависимостей       
Чтение информации о состоянии... Готово
Будут установлены следующие дополнительные пакеты:
  libglib2.0-0 libglib2.0-data shared-mime-info
Предлагаемые пакеты:
  zip unzip bzip2 arj xpdf-reader pdf-viewer dbview odt2txt gv catdvi djvulibre-bin imagemagick python-boto python-tz
НОВЫЕ пакеты, которые будут установлены:
  libglib2.0-0 libglib2.0-data mc shared-mime-info
обновлено 0, установлено 4 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 2 173 kB/5 039 kB архивов.
После данной операции, объём занятого дискового пространства возрастёт на 16,7 MB.
Хотите продолжить [Д/н]? y
Смена носителя: вставьте диск с меткой
 'Debian GNU/Linux 6.0.6 _Squeeze_ - Official i386 CD Binary-1 20120929-15:56'
в устройство '/media/cdrom/' и нажмите ввод
Все дело в том, что система считает что у нас есть весь набор дисков и пытается установить ПО с диска. Для того, чтобы запретить ей искать ПО на дисках, а качать его из интернета необходимо в файле /etc/apt/sources.list закомментировать любые строчки источником cdrom. В моем случае это была строка:
deb cdrom:[Debian GNU/Linux 6.0.6 _Squeeze_ - Official i386 CD Binary-1 20120929-15:56]/ squeeze main
После этого надо еще раз обновить список пакетов и можно устанавливать пакеты из сети.

пятница, 1 февраля 2013 г.

Выполнение команд на удаленном сервере

Я писал скрипт бэкапа данных с удаленного сервера и столкнулся с проблемой. Вот строчки скрипта:

ssh testuser@192.168.0.188 
cd testdir
Как мне казалось, тут нет никакой ошибки. Однако первый же запуск окончился неудачей. Как оказалось, ssh устанавливает соединение и сразу же передает управление консоли удаленного сервера. Однако скрипт-то запущен на локальной машине! Поэтому нас встречает приглашение от удаленного сервера. Завершив сеанс ssh по Ctrl+C, я смог наблюдать как команды скрипта выполнялись дальше. Но на локальной машине, а не на удаленной.
Я нашел выход следующим образом: ssh может выполнять указанную команду самостоятельно, при этом он открывает соединение, выполняет команду и закрывает соединение. Поскольку команд у меня несколько, я обернул их в скрипт и запускаю его следующим образом:
ssh testuser@192.168.0.188 ./backupserv.sh

Беспарольный вход по ключу на удаленный сервер по ssh

Иногда может быть удобно авторизовываться на удаленном сервере по ключу, а не по паролю. Это, например, может понадобиться при создании скриптов для работу с удаленны сервером. Инструкция:
1. Генерируем новый ключ:
kutsd@kutsd-desktop:~$ ssh-keygen -t rsa -b 4096
Главное на этом шаге - не указывать passphrase. Иначе его будут требовать при подключении к удаленному серверу. Те же неудобства, что и при вводе пароля.
2. Заливаем публичный сгенерированный ключ на удаленный сервер:
kutsd@kutsd-desktop:~$ ssh-copy-id testuser@192.168.0.188
Это единственный шаг, где у нас спросят пароль от удаленной машины.
3. Пробуем подключиться:
kutsd@kutsd-desktop:~$ ssh 'testuser@192.168.0.188'

Если все-таки появляется требование ввода пароля - поможет ключ -vvv для ssh. Он покажет полную отладочную информацию, в том числе и то, на каком этапе авторизация обламывается.

вторник, 29 января 2013 г.

Удаление ключей Microsoft Office 2003 из системы

Дано: WinXp, на ней был когда-то поставлен офис, после чего снесен. Лицензия на него потеряна. Чтобы не было никаких проблем при проверках решено было снести его ключи. Лежат они по адресу HKEY_LOCAL_MACHINE \Software\Microsoft\Office\11.0\Registration. Если офисом пользоваться не планируется, можно удалить всю папку 11.0.
По материалам: Изменение ключа продукта для Office XP, Office 2003 и выпуска 2007 системы Microsoft Office

понедельник, 28 января 2013 г.

Распаковать msi пакет

Иногда требуется распаковать msi пакет без его установки, например чтобы вытащить из него нужные файлы или оценить его содержание. Это можно сделать командой:
msiexec /a путь_к_файлу_c_расширением_msi /qb TARGETDIR=путь_к_директории_для_извлечения_данных
По материалам: 

пятница, 25 января 2013 г.

Список пользователей в Linux

Существует 2 способа узнать список пользователей в Linux:
cat /etc/passwd
и
getent passwd
Вторая команда предпочтительнее т.к. при этом будут показаны все пользователи, а не только локальные.

Удаленные приложения в Linux. Организация RemoteApp

Часто может потребоваться использовать на своей машине приложения, запущенные на сервере. Это экономит ресурсы клиентской машины и позволяет не устанавливать приложения на весь парк машин. Например, таким образом может быть организована работа с   1с.
Что мы имеем - сервер Windows Server 2008R2, настроенная служба терминалов, установленное приложение.
Организация доступа из под Windows хорошо описана, например здесь и здесь.
Нам же необходимо получить тот же функционал на Linux.
Для начала нам необходимо установить клиент rdp:
sudo apt-get install freerdp
После этого нам необходимо узнать полный путь к нашему приложению на сервере. После этого запускаем клиент:
xfreerdp -u Administrator -p password --app --plugin rail.so --data "notepad.exe" -- 192.168.0.1
Эта команда откроет нам окно с запущенным notepad.exe на сервере 192.168.0.1, причем клиент сам залогинится с переданными ему в параметрах логином и паролем. Окно будет декорировано как и все остальные и разницы с локальными приложениями во внешнем виде не будет.
По материалам:
1. Windows, meet Linux. Linux, meet RemoteApp. - статья о том, как организовать полную интеграцию удаленных приложений в систему на примере открытия офисных файлов программами их набора Microsoft Office, установленных на удаленном сервере.
2. Подробное описание технологии RemoteApp.

Русская справка man в консоли

Для русификации справки в linux - man - необходимо установить пакет manpages-ru командой

sudo apt-get install manpages-ru
Однако перевод не полный и не всегда актуальный, однако может помочь понять в общих чертах назначение конкретной команды.

Как удалить все файлы в директории по маске

Cron был запущен с заданием каждую минуту загружать определенный файл в директорию. Со временем там скопилось несколько тысяч однотипных файлов вида "имя_файла.номер". Потребовалось их удалить. Вручную удалять не вариант. С этим может справиться стандартная утилита find.
Исходная команда:

root@FILESERVER:~# find . -type f -name "order_load.*" -delete
Разберем ее параметры:
. - директория где мы будем искать
-type f - какого типа файлы нам искать (f - обычные файлы)
-name "order_load.*" - маска названия файла 
-delete - удалять найденные файлы

четверг, 24 января 2013 г.

Решение проблемы "CMAKE_CXX_COMPILER-NOTFOUND" при использовании cmake

Дано: чистая система (ubuntu в моем случае). Потребовалось собрать пакет из исходников. При запуске cmake он ругался на отсутствие в системе C++ компилятора. Пакет gcc был уже установлен. Может показаться, что если установлен gcc (GNU compiler collection), можно будет сразу же собирать на машине программы из исходных кодов. Это не так. Для сборки нам надо будет поставить пакет build-essential командой:
sudo apt-get install build-essential -y
который, собственно, и установит нам в систему libstdc++ и g++.

вторник, 22 января 2013 г.

Организация нескольких серверов посредством виртуальных машин

Как оказалось, сделать это средствами VirtualBox довольно легко. Имеется такая конфигурация - сеть, в которой есть сервер на Windows Server 2008R2, он же раздает DHCP. Моя машина (kutsd-desktop 192.168.0.173). На ней стоит VirtualBox, в котором поднят Debian. Необходимо иметь доступ к этой системе с любой машины сети. Заходим в настройки виртуальной машины, открываем параметры сетевого адаптера и выставляем тип подключения в "Сетевой мост". После этого виртуальная машина сама предоставит имеющийся сетевой интерфейс (в моем случае eth0) виртуальной системе. Система сама получит настройки от DHCP сервера. В моем случае виртуальная система получила ip 192.168.0.183 .

kutsd@kutsd-desktop:/$ ifconfig | grep "inet addr"
          inet addr:192.168.0.173  Bcast:192.168.0.255  Mask:255.255.255.0


kutsd@kutsd-desktop:/$ ping 192.168.0.183
PING 192.168.0.183 (192.168.0.183) 56(84) bytes of data.
...
^C
--- 192.168.0.183 ping statistics ---
9 packets transmitted, 9 received, 0% packet loss, time 8000ms
rtt min/avg/max/mdev = 0.251/0.402/0.865/0.190 ms
kutsd@kutsd-desktop:/$ ssh 192.168.0.183
kutsd@192.168.0.183's password: 
kutsd@debian-virtual:~$ uname -a
Linux debian-virtual 2.6.32-5-686 #1 SMP Sun Sep 23 09:49:36 UTC 2012 i686 GNU/Linux

Установка Skype в Ubuntu 12.10

Установка Skype в Linux оказалась не такой уж и тривиальной, как могло показаться на первый взгляд. Первым делом я зашел на официальный сайт скайпа и скачал там .deb пакет. Однако установка его провалилась. Хотя инсталлятор и выводл сообщение об успешной установке, физически же файлы не копировались в нужные папки.
Для ручной установки необходимо добавить в список репозиториев (/etc/apt/sources.list) официальный репозиторий скайпа:
deb http://download.skype.com/linux/repos/debian/ stable non-free
Затем обновляем кэш пакетов и устанавливаем Skype:
sudo apt-get update

sudo apt-get install skype

По материалам: Тема: Как установить skype


среда, 16 января 2013 г.

Решение ошибки 0x0000007B при установке Windows XP

При установке Windows XP на определенном этапе вылетает синий экран (BSOD) с кодом 0x0000007B. Оказалось, уставновщик XP  не имеет на борты SATA драйверов. Если они так необходимы, можно вшить их в дистрибутив. Если нет - достаточно в BIOS отключить AHCI - строчки типа:
  • Configure SATA as: IDE
  • AHCI Mode: Disabled
  • SATA Controller Mode: Compatibility
  • SATA Operation: ATA
  • SATA Native Mode: Disable
(В разных версиях BIOS для разных материнских плат по разному).
По материалам:

вторник, 15 января 2013 г.

Настройка прокси-сервера для обновления продуктов лаборатории Касперского

Столкнулся с небольшой проблемой - обновление антивируса Касперского не работает через прокси-сервер. Для пользователей возникают некоторые неудобства - постоянно всплывает окно с требованием ввести логин/пароль для прокси. И хотя введенные данные валидны, антивирус не может соединиться со своим сервером обновлений и поэтому считает что эта пара логин/пароль не действительно и снова требует их ввести.
Оказалось, что адреса серверов обновления не добавлены в разрешающие правила. Официальная техподдержка Касперского выдает следующий список серверов обновления. По ip добавить не получится, поскольку ip-адреса серверов могут меняться.
Я, чтобы не добавлять весь этот список отдельным ACL, просто разрешил домен kaspersky.com в SQUIDе со всеми поддоменами. Обновление заработало, пользователи счастливы.
По материалам:
Касперский не работает через Squid  
Где хранится список серверов обновлений лаборатории касперского

понедельник, 14 января 2013 г.

Смешанный доступ к шаре в SAMBA

Иногда возникают такие ситуации, что необходимо предоставить пользователям общие папки, при этом закрыв некоторые расшаренные папки паролем.
По умолчанию в последних версиях SAMBA security mode bit стоит в значении user. Это соответсвует строки конфига smb.conf security = user. Это значит, что сервер не будет обрабатывать входящие запросы до тех пор, пока пользователь не авторизуется. А нам требуется как раз таки вход в папку без ввода логина и пароля.
Данная проблема имеет решение. Для этого нам надо будет настроить параметр Map to guest в значение Bad User (строка конфига "Map to guest = Bad User"). Это значит, что запросы с неправильным паролем будут отклонены, если такое имя пользователя существует. Если не существует, то такие запросы будут считаться как попытки зайти гостем (guest account).
Поскольку в Windows и Linux имена гостей различаются, надо настроить оображение между ними. Для этого необходимо в файл "smbusers" записать строку "nobody = guest" и в конфиге SAMBA в в секции "global" дописать строку "username map = /etc/samba/smbusers", которая, собственно, и указывает на файл с отображениями.
После этого в нужной нам секции достаточно будет указать "guest ok = yes".
Следует также учитывать, что этот метод не работает с опцией "valid users".
Итого у нас были произведены изменения в 2х файлах:
smbusers
nobody = guest
smb.conf

[global]
...
security = user
Map to guest = Bad User
username map = /etc/samba/smbusers
...
[testshare]
...
guest ok = yes
...



По материалам:
Samba and guest shares with "security = user"
Описание параметра Map to guest
Описание параметра security

четверг, 10 января 2013 г.

Устранение проблемы ошибки 0xc000005 при печати

Данная ошибка довольно распространена (1 2 3 4). Чаще всего она возникает с сетевыми принтерами HP. Предложенные в обсуждениях, указанных выше, решения являются половинчатыми и не исправляют ситуацию в 100% случаев. Самой распространенной версией о происхождении ошибки является версия о корявых драйверах.
Решить ее можно просто - удалить сетевой принтер и установить локальный, создав новый TCP/IP порт. После следует указать лишь IP адрес принтера (его можно узнать, распечатав тестовую страницу с сетевыми настройками). После этого печать вылетать не будет.

вторник, 8 января 2013 г.

Настройка Qt Creator для использования OpenMP

Для настройки работы Qt Creator (при использовании компилятора msvc от Microsoft Vusial Studio) с OpenMP необходимо в конфигурационном файле проекта (.pro) добавить следующие строчки:
LIBS += -openmp
QMAKE_CXXFLAGS += -openmp
QMAKE_LFLAGS += -openmp

Доступ к логическим дискам при использовании Ubuntu LiveUSB

При работе в LiveUSB системе Ubuntu при попытке доступа к логическим дискам машины может возникать ошибка монтирования вида:
Adding read ACL for uid 999 to `/media/ubuntu' failed: Operation not supported (g-io-error-quark, 15)
Эта ошибка известна и задокументирована. Возникает она потому, что система пытается получить доступ к  каталогу`/media/ubuntu', который не создан. (В данном случае ubuntu - имя пользователя.) Для решения данной проблемы достаточно создать этот каталог командой:
sudo mkdir /media/ubuntu

Инициализация многомерного массива в C++

Довольно популярная проблема, с который сталкиваются начинающие программисты, пытаясь выделить в куче двумерный массив строчкой типа:
int A[10][10] = new int[100][0];
В C++ такой фокус не прокатит, поэтому необходимо сперва объявить А как массив указателей, а для каждого указателя уже выделить память:
int** A = new int* [100];
for(int i=0; i<100; i++)
    A[i] = new int[50];
 

пятница, 4 января 2013 г.

Настройка Firefox через групповые политики AD

Для настройки Firefox необходимо установить специальную версию, поддержкой которой занимается FrontMotion . На странице http://www.frontmotion.com/FMFirefoxCE/download_fmfirefoxce.htm есть актуальный локализованный дистрибутив и (внизу страницы) шаблоны групповой политики. После развертывания Firefox на локальных машинах можно управлять настройками через групповые политики.
Источники:
Описание процесса установки
Описание процесса настройки
Справочная информация от Microsoft

См. также:
Описание процесса развертывания и настройки Chrome