четверг, 28 ноября 2013 г.

lsof

Утилита, которая показывает поточные открытые файлы. Можно применять фильтры по юзерах и по местах их дислокации

http://handynotes.ru/2010/01/unix-utility-lsof.html

среда, 27 ноября 2013 г.

Логи в MySQL

Есть пять видов логов:
Log TypeInformation Written to Log
Error logProblems encountered starting, running, or stopping mysqld
General query logEstablished client connections and statements received from clients. Тоесть сдесь логируется все что запрашивается у mysqld, все запросы, а не только те, которые изменяют состояние базы, как в Binary log.
Binary logStatements that change data (also used for replication). Риплика тоже может писать эти логи, если она находится в составе сложной цепочки реплик, и является мастером для другой реплики.
Relay logData changes received from a replication master server
Slow query logQueries that took more than long_query_time seconds to exe

Сайт с поддерживаемыми User Defined Function for MySQL

http://www.mysqludf.org/

но лог не получилось например сбилдить, чтобы установить...

вторник, 26 ноября 2013 г.

четверг, 21 ноября 2013 г.

Как из явавского хранилища ключей получить файлы сертификата и ключа для curl

Для начала нам нужно перефести формат ключей из jks в pkcs12. Также если у нас в хранилище несколько ключей нужно указать алис ключа, который и будет сохранен в другом формате
keytool -importkeystore -srckeystore jvmkeystore.jks \
   -destkeystore somesite_key_and_cert.p12 \
   -srcalias keycert_alias_in_keystore \
   -srcstoretype jks \
   -deststoretype pkcs12

Теперь нам нужно получить отдельно файл ключа и файл сертификата чтобы передать их в curl
openssl pkcs12 \
  -in somesite_key_and_cert.p12 \
  -out somesite_key.pem -nocerts
openssl pkcs12 \
  -in somesite_key_and_cert.p12 \
  -out somesite_cert.pem -clcerts -nokeys

Теперь обращаемся по curl к интересуещему нас сайту по SSL(https)
curl -vvv --cert somesite_cert.pem \
  --key somesite_key.pem \
  "https://somesite.com:443/intr/source"



Наверно бывают случаи когда нам нужно, чтобы ключ и сертификат были в отдельних файлах, но если нам это не нужно мы можем сделать все за меньшее количество шагов и введенного текста:
openssl pkcs12 \
  -in somesite_key_and_cert.p12 \
  -out somesite_key_and_cert.pem -clcerts
И обращение:
curl -vvv --cert somesite_cert.pem \
  "https://somesite.com:443/intr/source"

javax.net.ssl

SSL properties are set at the JVM level via system properties. Meaning you can either set them when you run the program (java -D....) Or you can set them in code by doing System.setProperty.
The specific keys you have to set are below:
javax.net.ssl.keyStore- Location of the Java keystore file containing an application process's own certificate and private key. On Windows, the specified pathname must use forward slashes, /, in place of backslashes.
javax.net.ssl.keyStorePassword - Password to access the private key from the keystore file specified by javax.net.ssl.keyStore. This password is used twice: To unlock the keystore file (store password), and To decrypt the private key stored in the keystore (key password).
javax.net.ssl.trustStore - Location of the Java keystore file containing the collection of CA certificates trusted by this application process (trust store). On Windows, the specified pathname must use forward slashes, /, in place of backslashes, \.
If a trust store location is not specified using this property, the SunJSSE implementation searches for and uses a keystore file in the following locations (in order):
  1. $JAVA_HOME/lib/security/jssecacerts
  2. $JAVA_HOME/lib/security/cacerts
javax.net.ssl.trustStorePassword - Password to unlock the keystore file (store password) specified by javax.net.ssl.trustStore.
javax.net.ssl.trustStoreType - (Optional) For Java keystore file format, this property has the value jks (or JKS). You do not normally specify this property, because its default value is already jks. javax.net.debug To switch on logging for the SSL/TLS layer, set this property to ssl.

Склонировать конкретную бранчу

git clone user@git-server:project_name.git -b branch_name /some/folder

как не вводить длинный пароль рута для mysql

 mysqldump -uroot -p`grep -m1 "^password=" /root/.my.cnf | cut -d= -f2`  mydbname > mydump.sql


grep:
-m - сколько первых совпадений выводить

cut:
-d - какую строку/символ считать разграничителем между колонками
-f - какую колонку выводить

вторник, 19 ноября 2013 г.

Создание приложения сразу со всеми зависимостями

Когда мы мавеном создаем и запускаем приложения, то на выходе мы получаем jar только с кодом проекта, но без зависимостей. Зависимости находятся в локальном репозитории, и уже мавен, когда мы запускаем приложение с помощью его, ссылается в класспазе на джарники из локального репозитория.
Если мы хотим поставить джарник, которому нужна будет только jvm для работы ( все зависимости будут поставляться с ним), мы делаем следующее:
1) Настраиваем плагин ассембли.
<project>
    [...]
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
            </plugin>
        </plugins>
    </build>
    [...]
</project>


2) Вызываем и получаем джарник с зависимостями
$ mvn install assembly:assembly

Полезные плагины мавен help и dependency

Плагин help
Вот так можно получить информацию о плагине и как им пользоваться
$ mvn help:describe -Dplugin=exec -Dfull



Плагин dependency
Чтобы узнать что же у нас попадает в класспаз для запуска нашего проекта:
$ mvn dependency:resolve


Если нужно видеть, от чего мы зависим на праямую, а что подтянули прямые зависимости:
$ mvn dependency:tree


Если нужно еще и увидеть какие артефакты были отвергнуты по причине конфликтов или по другим причинам, то нужно запустить мавен с флагом дебага
$ mvn install -X



четверг, 14 ноября 2013 г.

Screen. Что еще такого узнал

-p  -- если несколько табов, то выбрать указанный
-X stuff "some commands" -- чтобы выполнить какие-то комманды сразу


sudo su -c 'screen -r -x bingo-jenkins -p bash -X stuff "cd ~/liferay-plugins; git reset --hard; git pull;git checkout $branchname; git pull;ant stop-portal-force all-new start-portal -Ddeployer.names=Jenkins
"'
Перенос строки обязательно, потому что в терминал вводится текст.

Как активировать CDI в архиве, который предоставляется контейнеру?

1) Необходимо, чтобы контейнер поддерживал CDI.
2) Для этого достаточно добавить beans.xml в META-INF директорию архива, при этом хмл может быть даже пустым.

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

Portlet @ActionMapping

Когда же нужно пользоваться параметром аннотации value, а когда params?

 Этот вариант для фанатов строгого соотвествия спецификации:
@ActionMapping(value = "addDocOrder")
public void addDocOrder(@ModelAttribute("order").......
Your request should URL should be built like:
<portlet:actionURL>
  <portlet:param name="javax.portlet.action" value="addDocOrder"/>
</portlet:actionURL>

Этот для экономных в байтах по сети
@ActionMapping(params = "action=addDocOrder")
public void addDocOrder(@ModelAttribute("order").......
Your request should URL should be built like:
<portlet:actionURL>
  <portlet:param name="action" value="addDocOrder"/>
</portlet:actionURL>