?

Log in

No account? Create an account

C++ Builder JSON REST запрос

Для примера выполняем запрос к docker registry, получаем список образов ( images ). RAD Studio CE 10.3 без дополнительных библиотек.

Запрос через curl. Ответ:
curl http://1.1.1.1:5000/v2/_catalog
{"repositories":["alpine","docker","nginx"]}


Unit1.cpp
ListBox1->Items->Clear(); //Чистим, будем выводить сюда репы
RESTClient1->ResetToDefaults(); 
RESTClient1->BaseURL = repoUrl; //Тут устанавливает путь к репозиторию: http://1.1.1.1:5000/v2/

 try {
  //Для RESTRequest1->Resource устанавливаем _catalog
  //Полный запрос получится http://1.1.1.1:5000/v2/_catalog
  RESTRequest1->Execute(); //Выполняем запрос.

  TJSONValue *jResponse = RESTResponse1->JSONValue; //Сам ответ
  TJSONObject *JSON = (TJSONObject*)TJSONObject::ParseJSONValue(jResponse->ToString()); //Парсим его
  TJSONPair *pair = JSON->Get("repositories"); //Получаем содержимое "массива" repositories
  TJSONObject *jRepos = (TJSONObject*) pair->JsonValue; //В объект его и идём дальше
  TJSONArray *jVal = (TJSONArray*)TJSONObject::ParseJSONValue(jRepos->ToString()); //Делаем из него массив, для дальнейшего обхода

  int size = jRepos->Size(); //Кол-во репозиториев

  for (int i = 0; i < size; ++i) {
   TJSONValue* LItem   = jVal->Get(i);
   String repo = LItem->ToString(); //Имя образа, будет с кавычками. Далее удаляем их
   repo.Delete(1,1);
   repo.Delete(repo.Length(),1);
   ListBox1->Items->Add(repo); //Добавляем в список
  }
 } catch (const Exception& e) {
  MessageDlg("Exception: Нет подключения к репозиторию!", mtError, TMsgDlgButtons() << mbOK, 0);
 }

Метки:

Конвертирование сертификатов от ru-цента в PKCS12 ( PFX )

1. Объединяем root и промежуточные сертификаты:

# cat root_pem_thawte_ssl123_1.crt intermediate_pem_thawte_ssl123_1.crt > intermediate_and_root.pem

2. Конвертируем

# openssl pkcs12 -export -in DOMAIN_CERT -inkey DOMAIN_KEY -out certificate.pfx -certfile ОБЪЕДИНЁННЫЙ_СЕРТ_ВЫШЕ.

Метки:

Нужный софт:

apt-ftparchive

Нужные пакеты кидаем в pool/main, что и куда запихивать можно смотреть тут:

http://ftp.debian.org/debian/pool/main/

Конфиги:

aptftp.conf

APT::FTPArchive::Release {
 Origin "Your origin";
 Label "Your label";
 Suite "unstable";
 Codename "sid";
 Architectures "amd64 i386 source";
 Components "main";
 Description "Your description";
};

aptgenerate.conf

Dir::ArchiveDir ".";
Dir::CacheDir ".";
TreeDefault::Directory "pool/";
TreeDefault::SrcDirectory "pool/";
Default::Packages::Extensions ".deb";
Default::Packages::Compress ". gzip bzip2";
Default::Sources::Compress ". gzip bzip2";
Default::Contents::Compress "gzip bzip2";

BinDirectory "dists/unstable/main/binary-amd64" {
 Packages "dists/unstable/main/binary-amd64/Packages";
 Contents "dists/unstable/Contents-amd64";
 SrcPackages "dists/unstable/main/source/Sources";
};

BinDirectory "dists/unstable/main/binary-i386" {
 Packages "dists/unstable/main/binary-i386/Packages";
 Contents "dists/unstable/Contents-i386";
 SrcPackages "dists/unstable/main/source/Sources";
};

Tree "dists/unstable" {
 Sections "main"; # contrib non-free";
 Architectures "amd64 i386 source";
};

Конфиги кладутся в isofiles и подгоняются под собственные нужды.

Потом выполняем, находясь в isofiles

Снос старого: rm -f packages-i386.db packages-amd64.db

Генерация архивов Packages:

apt-ftparchive generate -c=aptftp.conf aptgenerate.conf 

Генерация Release:

apt-ftparchive release -c=aptftp.conf dists/unstable >dists/unstable/Release

Читать дальше...Свернуть )

Debian preseed


Создание образа для автоустановки Debian:

Ставим софт:

# sudo aptitude install curl
# sudo aptitude install rsync
# sudo aptitude install genisoimage

Создаем папки:

# mkdir cgdeb
#
cd cgdeb
#
mkdir iso loopdir isofiles workspace

Тянем ISO файл:

#  cd iso
# wget iso_file
#  cd ..

Монтируем ISO и копируем файлы в отдельную папку:

# sudo mount -o loop iso/debian-testing-amd64-netinst.iso loopdir
# rsync -v -a -H --exclude=TRANS.TBL loopdir/ isofiles/
# sudo umount loopdir
# chmod u+w isofiles

Распаковываем initrd

# cd workspace
# gzip -d < ../isofiles/install.amd/initrd.gz | cpio --extract --verbose --make-directories --no-absolute-filenames

Создаём сам файл ответов ( https://www.debian.org/releases/stable/armel/apbs02.html.ru )

# vim preseed.cfg

Собираем обратно initrd

# su -c 'find . | cpio -H newc --create --verbose | gzip -9 > ../isofiles/install.amd/initrd.gz'

ЕСЛИ ДОБАВЛЯЕМ СВОИ ПАКЕТЫ, ТО ИДЁМ СНАЧАЛА СЮДА:

https://veonis.livejournal.com/10655.html

Создаём md5 суммы файлов

# cd ../isofiles
# chmod u+w md5sum.txt
# md5sum `find -follow -type f` > md5sum.txt

Собираем новый ISO

# sudo genisoimage -o debian-testing-amd64-netinst-custom-preseed.iso -r -J -no-emul-boot -boot-load-size 4 -boot-info-table -b isolinux/isolinux.bin -c isolinux/boot.cat .

При последующих сборках нужно удалять исошник, иначе старый и новый сольются, вреда никакого, но размер увеличится по принципц старый_новый ISO

Для использования при нужно выбрать установку без графики.

Метки:

Установка Debian Preseed

Создание образа для автоустановки Debian:

Ставим софт:

# sudo aptitude install curl

# sudo aptitude install rsync
# sudo aptitude install genisoimage


Создаем папки:


# mkdir cgdeb
# cd cgdeb
# mkdir iso loopdir isofiles workspace


Тянем ISO файл:

cd iso
# wget iso_file

cd ..


Монтируем ISO и копируем файлы в отдельную папку:

# sudo mount -o loop iso/debian-testing-amd64-netinst.iso loopdir
# rsync -v -a -H --exclude=TRANS.TBL loopdir/ isofiles/
# sudo umount loopdir
# chmod u+w isofiles


Распаковываем initrd

# cd workspace
# gzip -d < ../isofiles/install.amd/initrd.gz | cpio --extract --verbose --make-directories --no-absolute-filenames

Создаём сам файл ответов ( https://www.debian.org/releases/stable/armel/apbs02.html.ru )


# vim preseed.cfg


Собираем обратно initrd

# su -c 'find . | cpio -H newc --create --verbose | gzip -9 > ../isofiles/install.amd/initrd.gz'


Создаём md5 суммы файлов

# cd ../isofiles
# chmod u+w md5sum.txt
# md5sum `find -follow -type f` > md5sum.txt

Собираем новый ISO

# sudo genisoimage -o debian-testing-amd64-netinst-custom-preseed.iso -r -J -no-emul-boot -boot-load-size 4 -boot-info-table -b isolinux/isolinux.bin -c isolinux/boot.cat .

При последующих сборках нужно удалять исошник, иначе старый и новый сольются, вреда никакого, но размер увеличится по принципц старый_новый ISO

Для использования при нужно выбрать установку без графики.

Метки:

SQUID, нагрузка на CPU

Как-то был заблокирован гугловый домен clients1.google.com, так как отъедал вагоны трафика, но при этом squid начал кушать CPU как не в себя. Так как авторизация идёт через AD, то зается negotiate_kerberos_auth. Он и жрет процессор.

Вариант лечения 1:
Отключаем кэш.
Так как юзается CentOS 7, то для systemd

/etc/systemd/system/multi-user.target.wants/squid.service

Environment=KRB5_KTNAME=/etc/krb5.keytab
Environment=KRB5RCACHETYPE=none

После чего нагрузка почти пропала.

Вариант лечения 2:
Мне больше понравился, так как просто лочит всё нафиг.

iptables -A INPUT -p tcp --dport 3128 -m string --string "clients1.google.com" --algo kmp -j DROP

Блочит все запросы на указанный домен.

Метки:

Что бы писался нужно сменить дефолтный формат записи в rsyslog.conf:

$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

на

$ActionFileDefaultTemplate RSYSLOG_SyslogProtocol23Format

и в config.php LogAnalyzer прописать

$CFG['Sources']['Source1']['LogLineType'] = 'syslog23';

Может возникать есть в /etc/systemd/system/multi-user.target.wants уже прописался файл, не симлинк. Решается удаление или переносом файла в /usr/lib/systemd/system и созданием линка на него.

Столкнулся на CentOS 7.3 при установке zabbix-agent 3.0 из RPM.

Файл /usr/share/zabbix/includes/defines.inc.php

Параметр ZBX_GRAPH_FONT_NAME заменить на DejaVuSans

Метки: