[

воскресенье, 29 декабря 2019 г.

Ubuntu + CoreDNS + DNS-over-TLS


/etc/coredns.conf

.:53 { any # Google forward . tls://8.8.8.8 tls://8.8.4.4 { tls_servername dns.google health_check 5s } # Cloudflare #forward . tls://1.1.1.1 tls://1.0.0.1 { # tls_servername cloudflare-dns.com # health_check 5s #} # Just in case #forward . 8.8.8.8:53 8.8.4.4:53 1.1.1.1:53 errors log }

/etc/systemd/system/coredns.service

[Unit] Description=CoreDNS Service
DefaultDependencies=no
After=systemd-sysusers.service systemd-networkd.service
Before=network.target nss-lookup.target shutdown.target
Conflicts=shutdown.target
[Service] Type=simple User=root Group=root
Restart=always
RestartSec=0
WatchdogSec=3min
ExecStart=/sbin/coredns -conf /etc/coredns.conf [Install] WantedBy=multi-user.target

/etc/resolv.conf

nameserver 127.0.0.1

Commands

Setup

wget https://github.com/coredns/coredns/releases/download/v1.6.6/coredns_1.6.6_linux_amd64.tgz tar xzf coredns_1.6.6_linux_amd64.tgz sudo mv coredns /sbin/ # ... config files ...

Run

sudo systemctl daemon-reload sudo systemctl enable coredns sudo systemctl restart coredns sudo systemctl status coredns

пятница, 7 августа 2015 г.

Перевод guest instance в Ganeti на PvGrub загрузку

За основу взят пост http://blag.welterde.de/posts/2014/06/29-ganeti-pvgrub.html

Имеем ganeti cluster 2.11 (ubuntu 14.04), xen-pvm, debian 7 guest

Внутри гостя выполняем действия из хука (установка grub, 40_custom, ядра).

Ставим pvgrub, например, http://celttechie.github.io/installing-configuring-pv-grub.html (требует обработки напильником).

NB: не забываем сделать gnt-cluster copyfile для pv-grub файлов.
Далее правим параметры instance:
$ gnt-instance modify -H kernel_args='(hd0\,0)/boot/grub/menu.lst' instance_name
$ gnt-instance modify -H kernel_path='/usr/lib/xen/boot/pv-grub-x86_64.gz' instance_name
$ gnt-instance modify -H initrd_path='' instance_name
$ gnt-instance modify -H bootloader_path='' instance_name
$ gnt-instance modify -H bootloader_args='' instance_name
$ gnt-instance modify -H root_path='' instance_name

Ребут инстанса через gnt-instance reboot.

понедельник, 11 августа 2014 г.

Инициализация Ganeti кластера на Ubuntu 14.04 и Xen 4.4

Все по мануалу http://docs.ganeti.org/ganeti/2.11/html/install.html.

Кластер инициализировал так:

gnt-cluster init --enabled-hypervisors=xen-hvm,xen-pvm --nic-parameters link=xenbr0 --master-netdev xenbr0 cluster.host.name

пятница, 1 августа 2014 г.

GORM strangeness

Grails version 2.3.8


Вот такая конструкция не работает

runners = Runner.methodReturningDetachedCriteria(params).findAll {
    lastName =~ "%${lastName}%"
}

Такая тоже

def filter = {
    lastName =~ "%${lastName}%"
} as DetachedCriteria<Runner>
runners = Runner.methodReturningDetachedCriteria(params).findAll(filter)

А такая вполне себе работает

def filter = {
    lastName =~ "%${lastName}%"
} as DetachedCriteria<Runner>
runners = Runner.methodReturningDetachedCriteria(params).where(filter).findAll()

четверг, 15 мая 2014 г.

Hibernate Exceptions In Grails Domain Event


По неосторожности можно наткнуться на

ERROR hibernate.AssertionFailure  - an assertion failure occured (this may indicate a bug in Hibernate, but is more likely due to unsafe use of the session) Message: null id in Domain entry (don't flush the Session after an exception occurs)

пытаясь изменить свойства домена, например, в событии beforeInsert.

Простой пример:
def beforeInsert() {
    someField = fieldModificationService.modify(someField)
}

Если Hibernate сам управляет сохранением данных в базе, а по умолчанию это так, то тут может произойти flush, что в контексте события домена запрещено.

Чтобы этого не происходило можно обернуть сервис в @Transactional(readOnly = true):
@Transactional(readOnly = true)
class FieldModificationService {
    def grailsApplication
    ...
}

воскресенье, 27 апреля 2014 г.

Not In Groovy

5ти минутный ступор: в Groovy есть оператор in, но не not in... Python портит людей.