Quantcast
Channel: 钻戒 and 仁豆米
Viewing all 290 articles
Browse latest View live

supervisord的自启动

$
0
0

supervisord在CentOS下如何自启动呢?
很简单,去github拉个脚本即可:

git clone git://github.com/Supervisor/initscripts.git  
cd initscripts/  
cp redhat-init-jkoppe /etc/init.d/supervisord  
cp redhat-sysconfig-jkoppe /etc/sysconfig/supervisord  
chkconfig --add supervisord  
chkconfig supervisord on  

jenkins中execute shell的注意事项

$
0
0

缺省jenkins的execute shell的方式是:

sh -xe hudsonxxx.sh  

说明一下:

-e 打开开关
+e 关上开关
-x 打开开关
+e 关上开关

详细解释一下:

set -e 表示一旦脚本中有命令的返回值为非0,则脚本立即退出,后续命令不再执行;

set -x 表示执行指令后,会先显示该指令及所下的参数。 

set -o pipefail表示在管道连接的命令序列中,只要有任何一个命令返回非0值,则整个管道返回非0值,即使最后一个命令返回0.  

注意在引用nvm以及meteor的环境中,要设置set +e 否则source nvm.sh的过程容易出错!

Rsync的用法

$
0
0

Rsync呢,比scp要快很多。
所以无论是本地文件/目录拷贝,还是远程拷贝,用rsync都比较好。

Rsync的基本参数

  • -a : 归档模式,递归拷贝,带属性。
  • -v : 详细显示信息
  • -r : 递归拷贝,不带属性
  • -z : 压缩
  • -h : 显示友好信息

注意:

rsync的基本用法是:

rsync 源 目的

  • 源中如果最后是/,意思是/*,代表只拷贝目录下的文件,不包括目录本身
  • 源中如果没有/,代表连同目录以及目录下的文件,统统拷贝到目的去

一、本地文件和目录的操作

rsync -zvh backup.tar /tmp/backups/  
rsync -avzh /root/rpmpkgs /tmp/backups/  

二、远程文件的操作

rsync -avz rpmpkgs/ root@192.168.0.101:/home/  
rsync -avzh root@192.168.0.100:/home/tarunika/rpmpkgs /tmp/myrpms  

三、通过ssh来执行rsync,-e参数

rsync -avzhe ssh root@192.168.0.100:/root/install.log /tmp/  
rsync -avzhe ssh backup.tar root@192.168.0.100:/backups/  

四、显示传输过程

rsync -avzhe ssh --progress /home/rpmpkgs root@192.168.0.100:/root/rpmpkgs  

五、文件的排除与包含

rsync -avze ssh --include 'R*' --exclude '*' root@192.168.0.101:/var/lib/rpm/ /root/rpm  

六、完全同步 --delete,源目保持完全一致

rsync -avz --delete root@192.168.0.100:/var/lib/rpm/ .  

七、限制传输文件的最大尺寸,大于200k的文件不会被传输

rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ root@192.168.0.100:/root/tmprpm  

八、传输完成后删除源文件

rsync --remove-source-files -zvh backup.tar /tmp/backups/  

九、新手必备,实际不做任何操作,只显示过程

rsync --dry-run --remove-source-files -zvh backup.tar /tmp/backups/  

十、限速,500kb*8=4M,限速是4兆。

rsync --bwlimit=500 -avzhe ssh  /var/lib/rpm/  root@192.168.0.100:/root/tmprpm/  
rsync只同步变动的部分,如果要同步整个部分,用W参数  
rsync -zvhW backup.tar /tmp/backups/backup.tar  

npm i的安装方法分析

$
0
0

国外的npm registry由于受到墙的影响,所以很不稳定。

那么这种情况下怎么安装比较快呢?

首先得选好国内的源:

  • 淘宝源:registry.npm.taobao.org
  • cnpm源:registry.cnpmjs.org

第二,指定安装源:

npm --registry=https://registry.npm.taobao.org \  
--cache=$HOME/.npm/.cache/cnpm \
--disturl=https://npm.taobao.org/mirrors/node \
--userconfig=$HOME/.cnpmrc

npm获取配置最高优先级的方式是:

npm install --proxy http://username:password@server:port  

次一级的方式是环境变量:

npm_config_proxy=http://server:port  

所以:

HTTPS_PROXY=http://user:password@1.2.3.4:5678 meteor update  
或者
npm_config_proxy=http://user:password@1.2.3.4:5678 meteor update  

都是可行的

meteor的部署

$
0
0

nginx的反向代理:

server_tokens off; # for security-by-obscurity: stop displaying nginx version

# this section is needed to proxy web-socket connections
map $http_upgrade $connection_upgrade {  
    default upgrade;
    ''      close;
}

# HTTP
server {  
    listen 80 default_server; # if this is not a default server, remove "default_server"
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html; # root is irrelevant
    index index.html index.htm; # this is also irrelevant

    server_name todos.net; # the domain on which we want to host the application. Since we set "default_server" previously, nginx will answer all hosts anyway.

    # redirect non-SSL to SSL
    location / {
        rewrite     ^ https://$server_name$request_uri? permanent;
    }
}

# HTTPS server
server {  
    listen 443 ssl spdy; # we enable SPDY here
    server_name todos.net; # this domain must match Common Name (CN) in the SSL certificate

    root html; # irrelevant
    index index.html; # irrelevant

    ssl_certificate /etc/nginx/ssl/todos.pem; # full path to SSL certificate and CA certificate concatenated together
    ssl_certificate_key /etc/nginx/ssl/todos.key; # full path to SSL key

    # performance enhancement for SSL
    ssl_stapling on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;

    # safety enhancement to SSL: make sure we actually use a safe cipher
    ssl_prefer_server_ciphers on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:RC4-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK';

    # config to enable HSTS(HTTP Strict Transport Security) https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security
    # to avoid ssl stripping https://en.wikipedia.org/wiki/SSL_stripping#SSL_stripping
    add_header Strict-Transport-Security "max-age=31536000;";

    # If your application is not compatible with IE <= 10, this will redirect visitors to a page advising a browser update
    # This works because IE 11 does not present itself as MSIE anymore
    if ($http_user_agent ~ "MSIE" ) {
        return 303 https://browser-update.org/update.html;
    }

    # pass all requests to Meteor
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade; # allow websockets
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Forwarded-For $remote_addr; # preserve client IP

        # this setting allows the browser to cache the application in a way compatible with Meteor
        # on every applicaiton update the name of CSS and JS file is different, so they can be cache infinitely (here: 30 days)
        # the root path (/) MUST NOT be cached
        if ($uri != '/') {
            expires 30d;
        }
    }
}

每天备份mongodb

@daily root mkdir -p /var/backups/mongodb; mongodump --db todos --out /var/backups/mongodb/$(date +'\%Y-\%m-\%d')

自启动脚本

# upstart service file at /etc/init/todos.conf
description "Meteor.js (NodeJS) application"  
author "Daniel Speichert <daniel@speichert.pro>"

# When to start the service
start on started mongodb and runlevel [2345]

# When to stop the service
stop on shutdown

# Automatically restart process if crashed
respawn  
respawn limit 10 5

# we don't use buil-in log because we use a script below
# console log

# drop root proviliges and switch to mymetorapp user
setuid todos  
setgid todos

script  
    export PATH=/opt/local/bin:/opt/local/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    export NODE_PATH=/usr/lib/nodejs:/usr/lib/node_modules:/usr/share/javascript
    # set to home directory of the user Meteor will be running as
    export PWD=/home/todos
    export HOME=/home/todos
    # leave as 127.0.0.1 for security
    export BIND_IP=127.0.0.1
    # the port nginx is proxying requests to
    export PORT=8080
    # this allows Meteor to figure out correct IP address of visitors
    export HTTP_FORWARDED_COUNT=1
    # MongoDB connection string using todos as database name
    export MONGO_URL=mongodb://localhost:27017/todos
    # The domain name as configured previously as server_name in nginx
    export ROOT_URL=https://todos.net
    # optional JSON config - the contents of file specified by passing "--settings" parameter to meteor command in development mode
    export METEOR_SETTINGS='{ "somesetting": "someval", "public": { "othersetting": "anothervalue" } }'
    # this is optional: http://docs.meteor.com/#email
    # commented out will default to no email being sent
    # you must register with MailGun to have a username and password there
    # export MAIL_URL=smtp://postmaster@mymetorapp.net:password123@smtp.mailgun.org
    # alternatively install "apt-get install default-mta" and uncomment:
    # export MAIL_URL=smtp://localhost
    exec node /home/todos/bundle/main.js >> /home/todos/todos.log
end script  

meteor中settings.json的运用

$
0
0

meteor中settings.json位于程序的根目录下,里面存放一些配置信息,比如:

{
  "magicPizzaService": "Our1234API5678Key"
}

怎么用呢?

var secretPizzaAccessCode = Meteor.settings.magicPizzaService;  

如果有不同的环境,比如开发环境,生产环境,同一个变量的值是不同的,那该怎么定义呢?

{
  "public": {
    "imARidiculousHumanBeing": "butAtLeastImClean"
  },
  "private": {
    "hackTheGibson": "keyboardCoWbOyS"
  },
  "imStillServerOnly": "soDontPanic"
}

用法:

var ridiculous = Meteor.settings.public.imARidiculousHumanBeing;  
// returns "butAtLeastImClean" on the client.

var cowboys = Meteor.settings.private.hackTheGibson;  
// returns "keyboardCoWbOyS" on the server.

var dontPanic = Meteor.settings.imStillServerOnly;  
// returns "soDontPanic" on the server.

那么,怎么让meteor用到这个settings.json呢?

meteor --settings settings.json  

也可以这么用:

METEOR_SETTINGS='$(cat settings.json)' meteor  

Nginx下lua根据客户端ip进行分发

$
0
0

公司的线上环境分为预发布和正式两个部分。

其实两个部分是在一起的。

这样怎么分发呢?

用Nginx即可,如果是公司来的某个固定ip,则分发到预发布,如果不是,就走正式环境。这样测试就简单多了,运维统一设置一个无线wifi,接入这个wifi就走某个固定ip,到的全是预发布环境,不用这个wifi就走正式环境,非常方便测试。

用lua进行分发:

location / {  
    content_by_lua '
            myIP = ngx.req.get_headers()["X-Real-IP"]
            if myIP == nil then
                myIP = ngx.req.get_headers()["x_forwarded_for"]
            end
            if myIP == nil then
                myIP = ngx.var.remote_addr
            end
            if myIP == "公司出口IP" then
                ngx.exec("@client")
            else
                ngx.exec("@client_test")
            end
        ';
} 

location @client{  
    proxy_next_upstream     error timeout;
    proxy_redirect          off;
    proxy_set_header        Host $host;
    #proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Real-IP $http_x_forwarded_for;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size    100m;
    client_body_buffer_size 256k;
    proxy_connect_timeout   180;
    proxy_send_timeout      180;
    proxy_read_timeout      180;
    proxy_buffer_size       8k;
    proxy_buffers           8 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    proxy_pass http://client;

}
location @client_test{  
    proxy_next_upstream     error timeout;
    proxy_redirect          off;
    proxy_set_header        Host $host;
    #proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Real-IP $http_x_forwarded_for;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size    100m;
    client_body_buffer_size 256k;
    proxy_connect_timeout   180;
    proxy_send_timeout      180;
    proxy_read_timeout      180;
    proxy_buffer_size       8k;
    proxy_buffers           8 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    proxy_pass http://client_test;
} 

Mysql和Psql备份全库

$
0
0

Postgres备份全库:

#!/bin/bash

list=$(psql -tqc "SELECT datname FROM pg_database WHERE datistemplate = false")

for d in $list; do  
  echo "backing up $d"
  pg_dump --no-owner --clean $d > ./pg_$d.sql
done  

使用:

PGHOST=ip PGUSER=postgres PGPASSWORD=pass PGDATABASE=postgres ./pg_dump_all  

Mysql备份全库:

#!/bin/bash

# Grab all user databases while skipping any system ones
list=$(mysql -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWORD --skip-column-names -e "SHOW DATABASES;" | grep -v 'mysql\|_schema')

for d in $list; do  
  echo "backing up $d"
  mysqldump -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWORD --quote-names $d > ./mysql_$d.sql
done  

使用:

$ MYSQL_HOST=ip MYSQL_USER=root MYSQL_PASSWORD=pass ./mysql_dump_all

lua与redis结合应用于nginx的动态upstream

$
0
0

技术实现很简单:

nginx分发请求的时候,upstream是由lua从redis中读取配置动态生成的。

装好nginx+lua,过程不表。 把lua redis的模块配到路径中

wget https://raw.github.com/nrk/redis-lua/version-2.0/src/redis.lua  

nginx配置如下:

server {  
  listen 80;
  server_name _;
  server_name_in_redirect off;
  port_in_redirect off;
  root /root/html;

  location / {
    set $upstream "";
    rewrite_by_lua '
      -- load global route cache into current request scope
      -- by default vars are not shared between requests
      local routes = _G.routes

      -- setup routes cache if empty
      if routes == nil then
        routes = {}
        ngx.log(ngx.ALERT, "Route cache is empty.")
      end

      -- try cached route first
      local route = routes[ngx.var.http_host]
      if route == nil then
        local redis  = require "redis"
        local client = redis.connect("localhost", 6379)
        route        = client:get(ngx.var.http_host)
      end

      -- fallback to redis for lookups
      if route ~= nil then
        ngx.var.upstream = route
        routes[ngx.var.http_host] = route
        _G.routes = routes
      else
        ngx.exit(ngx.HTTP_NOT_FOUND)
      end
    ';

    proxy_buffering             off;
    proxy_set_header            Host $host;
    proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_redirect              off;
    proxy_connect_timeout       10;
    proxy_send_timeout          30;
    proxy_read_timeout          30;
    proxy_pass                  http://$upstream;
  }
}

送进redis一些数据

redis-cli =>  
SET localhost 127.0.0.1:49153  

测试一下:

curl -i -X HEAD "http://127.0.0.1/" # -> 404,没这个域名  
curl -i -X HEAD "http://localhost/" # -> 正常  

单用户nvm的安装

$
0
0

增加个pm2用户:

groupadd pm2  
useradd -m -s /bin/bash -g pm2 pm2  

clone整个nvm项目

sudo su - pm2  
git clone https://github.com/creationix/nvm.git ~/.nvm  
cat<EOF>>~/.bashrc  
export NVM_DIR="/home/pm2/.nvm"  
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm
EOF  
source ~/.bashrc  

安装node

nvm list  
nvm install v4.4.7  
npm i pm2 -g  

Python+Selenium + PhantomJS 环境的搭建

$
0
0

无废话,先安装辅助包

yum install -y openssl-devel.x86_64 bzip2-devel.x86_64 sqlite-devel.x86_64 readline-devel.x86_64  

然后下载Python2.7.3编译安装

wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2  
tar jxvf Python-2.7.3.tar.bz2  
cd Python-2.7.3  
./configure --prefix=/usr/local/python2.7.3
make  
make install  

安装pip利器:

wget https://bootstrap.pypa.io/get-pip.py  
/usr/local/python2.7.3/bin/python get-pip.py

安装selenium

/usr/local/python2.7.3/bin/pip install selenium

安装PhantomJS

npm install -g phantomjs  

最后修改下PATH

export PATH=/usr/local/python2.7.3/bin:$PATH  

搞定。

来段小程序测一下:

from selenium import webdriver  
from selenium.webdriver.common.keys import Keys

driver = webdriver.PhantomJS(service_args=['--ssl-protocol=any'])  
driver.implicitly_wait(10)  
driver.get('http://www.python.org/')  
assert "Python" in driver.title  
elem = driver.find_element_by_name("q")  
elem.send_keys("pycon")  
elem.send_keys(Keys.RETURN)  
assert "No results found." not in driver.page_source  
print(driver.title)  
driver.quit()  

免流端口大全

$
0
0

移动免流端口:137 138 139 264 524

电信免流端口:189 8080

联通免流端口:130 131 132 155 156 185 186 145 176

kvm的虚机中如何在线挂接一块新网卡

$
0
0

比较古怪的需求,公司拉了根专线到机房。

而使用专线的机器是一台虚机,实机有自己的路由。

虚机就只能使用实机的第三块网卡,上连出去了,而且必须制定host的路由,这里给的子网掩码是255.255.255.252,所以只能虚机有ip,实机根本不能配ip地址。

首先把实机dell r720的第三块网卡em3改一下,连接到网桥br1

cat /etc/sysconfig/network-scripts/ifcfg-em3  
DEVICE=em3  
HWADDR=XX:XX:XX:XX:XX:XX  
TYPE=Ethernet  
UUID=6b68220d-d5ed-496f-b8d1-4c6d9cbb1234  
ONBOOT=yes  
NM_CONTROLLED=no  
BRIDGE=br1  

再做个网桥br1

cat /etc/sysconfig/network-scripts/ifcfg-br1  
DEVICE=br1  
BOOTPROTO=none  
ONBOOT=yes  
TYPE=Bridge  

注意,这个网卡和网桥都无地址,实在是可怜,连ip都不够用

启动他们

ifup em3  
ifup br1  

虚机挂接新设备:

virsh attach-interface --domain vis-16-13-28 \  
        --type bridge \
        --source br1 --model virtio \
        --mac f0:00:ac:30:2d:1d --config

然后ssh登录虚机,配置好虚机中eth1的ip/mask,不要难过配gateway啊

最后加路由:

route add -host 172.17.11.182 dev eth1  

搞定。

Nginx代理Jenkins时”No valid crumb was included in the request"错误的修复

$
0
0

如题,Jenkins前端用Nginx做了代理。

万分恼怒的是正在配置Jenkins任务,保存时确报出个"No valid crumb was included in the request"的错误,东西都没存住,杀人的心都有了。

如何修改呢?

首先,修改jenkis的启动配置,centos下是:

JENKINS_JAVA_OPTIONS="-Djava.awt.headless=true -Dhudson.security.csrf.requestfield=crumb"  

然后,修改Nginx配置:

...
server {  
    listen                    80;
    server_name               build.xxx.com;
    ignore_invalid_headers    off;
...

mvn的调试

$
0
0

mvn的调试

mvn的parent pom里面指定了local file repo

    <repositories>
        <repository>
            <id>project.local</id>
            <name>project</name>
            <url>file://${project.basedir}/../repo</url>
        </repository>
    </repositories>

而且指定了-s setting.xml,里面也有artifactory的repos. 在子module里不知道是否正常获得了。

执行下面命令就可以了:

mvn help:evaluate  
${project.repositories}

CentOS 6之下Rabbitmq的安装

$
0
0

之前有一篇是从源码安装的,那是没问题的。

这篇是如何从CentOS下用rpm安装

首先去http://www.rabbitmq.com/releases/erlang/

这里是Rabbitmq的官网,里面有现成的erlang

挑个最新的64位的centos 6的包:

erlang-19.0.4-1.el6.x86_64.rpm

安装它:

yum localinstall -y erlang-19.0.4-1.el6.x86_64.rpm  

然后再到:http://www.rabbitmq.com/install-rpm.html

看看最新的rabbitmq的版本: rabbitmq-server-3.6.9-1.el6.noarch.rpm

注意后面有个 (Signature) 的链接

安装:

装签名:
rpm --import http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-3.6.9-1.el6.noarch.rpm.asc  
装包:yum install -y http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.9/rabbitmq-server-3.6.9-1.el6.noarch.rpm

生成配置:

查找默认配置位置:

find / -name "rabbitmq.config.example",  

我这边搜索结果是:

/usr/share/doc/rabbitmq-server-3.9.1/rabbitmq.config.example

复制默认配置:

cp /usr/share/doc/rabbitmq-server-3.9.1/rabbitmq.config.example /etc/rabbitmq/  

修改配置文件名:

cd /etc/rabbitmq  
mv rabbitmq.config.example rabbitmq.config  

编辑配置文件,开启用户远程访问:vi rabbitmq.config 在 64 行,改为:{loopback_users, []}

开启 Web 界面管理:

rabbitmq-plugins enable rabbitmq_management  

重启 RabbitMQ 服务:

service rabbitmq-server restart  

开放防火墙端口:

iptables -I INPUT -p tcp -m tcp --dport 15672 -j ACCEPT  
iptables -I INPUT -p tcp -m tcp --dport 5672 -j ACCEPT  
service iptables save  
service iptables restart  

浏览器访问:http://192.168.1.114:15672 默认管理员账号:guest 默认管理员密码:guest

添加新授权用户(如下图所示):

添加 Host(如下图所示):

给添加的 Host 设置权限(如下图所示):

交换机绑定队列(如下图所示):

mvn build的时候控制日志输出

$
0
0

最近在弄jenkins的自动打包部署

出现个问题,项目是用的mvn,打包的时候,如果是在控制台下还好。

如果是在jenkins下,看console output,往中心仓库artifactory提交包的时候,会显示下面一堆:

Uploaded: http://xxx:8081/artifactory/libs-release-local/abc/maven-metadata.xml (315 B at 17.1 KB/sec)  
Uploading: http://xxx:8081/artifactory/libs-release-local/abc/d/admin-9.1.war  
20000/21969 KB  
20002/21969 KB  
20004/21969 KB  
20006/21969 KB  
20008/21969 KB  
20010/21969 KB  
20012/21969 KB  
20014/21969 KB  
20016/21969 KB  
20018/21969 KB  
20020/21969 KB  
20022/21969 KB  
20024/21969 KB  
20026/21969 KB  
20028/21969 KB  
20030/21969 KB  
20032/21969 KB  
20034/21969 KB  
20036/21969 KB  
20038/21969 KB  
20040/21969 KB  
20042/21969 KB  
20044/21969 KB  
......

长度无比长,垃圾东西。如何将之屏蔽呢?

首先去修改mvn的日志级别,缺省是INFO,提高到WARN:

MAVEN_OPTS=-Dorg.slf4j.simpleLogger.defaultLogLevel=warn mvn -ff  clean install  

我去,INFO是都没了,但是这个居然还在!!!!

查了下java的日志级别:

ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF  

上面只有FATAL和OFF了,说明这个是个副产品,不是mvn控制的,而是上传的时候产生的。

没办法了,祭出shell大法:

mvn -ff  clean install | egrep "(^\[INFO\])"  

把开头是[INFO]的显示出来,如果不够,还可以加上[DEBUG]

mvn -ff  clean install | egrep "(^\[INFO\]|^\[DEBUG\])"  

如果要取反,不显示以[INFO]和[DEBUG]打头的那些行:

mvn -ff  clean install | egrep -v "(^\[INFO\]|^\[DEBUG\])"  

最后,mvn全静默,只有出错才显示的方式:

mvn -ff -q clean install  

CentOS指定缺省的java

$
0
0

坑人啊。友军装了个最小版本的CentOS,啥也没有。

麻烦来了,java也没装,从相同环境的机器中直接拷贝过来了一份。

修改/etc/profile增加好PATH

export JAVA_HOME=/usr/local/jdk1.7.0_79  
export PATH=$JAVA_HOME/bin:$PATH  

平时倒也相安无事,但是用jenkins远程部署到这台机器上的时候就出麻烦了,找不到java,没办法,因为ssh过来的PATH是这样:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin  

根本没有java的路径,没办法,强行指定一个吧:

alternatives --install /usr/bin/java java /usr/local/jdk1.7.0_79/bin/java 2  

搞定

Linux命令行使用Bitcoin的比特币钱包

$
0
0

研究了一下在Linux命令行使用bitcoin的钱包客户端,方法如下

首先,跑到 https://bitcoin.org/en/download ,看看都有什么客户端。我们选linux-x64的客户端,下载:

wget https://bitcoin.org/bin/bitcoin-core-0.14.1/bitcoin-0.14.1-x86_64-linux-gnu.tar.gz  
tar zxvf bitcoin-0.14.1-x86_64-linux-gnu.tar.gz  
cd bitcoin-0.14.1/bin/  

第一次执行的话,打开一个screen,通常这个要运行8小时之久,且会下载130G的数据

screen  
./bitcoind
ctrl+a+d  

首先打开网页看看现在比特币的进度,都已经挖了多少块了

curl https://blockexplorer.com/api/status?q=getBlockCount  
{"blockcount":470886}

上面显示470886块了。看看我们下载到多少了

./bitcoin-cli getinfo
{
  "version": 140100,
  "protocolversion": 70015,
  "walletversion": 130000,
  "balance": 0.00000000,
  "blocks": 5773,
  "timeoffset": -1,
  "connections": 8,
  "proxy": "",
  "difficulty": 678760110082.9902,
  "testnet": false,
  "keypoololdest": 1497233202,
  "keypoolsize": 101,
  "unlocked_until": 0,
  "paytxfee": 0.00000000,
  "relayfee": 0.00001000,
  "errors": ""
}

blocks我们才下到5773,早呢。闪人干别的先......

第二天查看,blocks追齐了当前块后。
我们先停了bitcoind,然后让它运行在daemon后台模式

./bitcoin-cli stop
./bitcoind -daemon

缺省情况下,其实系统已经给你生成了一个钱包地址,查看一下:

./bitcoin-cli getaddressesbyaccount ""
[
  "1MSLyex8LMsXDuWEbA85VqAac6GcZxh87C"
]

"1MSLyex8LMsXDuWEbA85VqAac6GcZxh87C"就是你的钱包地址了。

赶紧加个密吧

/bitcoin-cli walletpassphrase "hahahahaha"

加密后,如果要进行操作,需要先解密钱包
下面的操作是解密钱包60秒,然后dump私钥

./bitcoin-cli walletpassphrase "hahahahaha" 60
./bitcoin-cli dumpprivkey "1MSLyex8LMsXDuWEbA85VqAac6GcZxh87C"

ok,钱包弄好了,下一步就是找个交易市场,进行交易了。

Debian的旧source

$
0
0

为了刷Hpt5325这个路由器,也是拼了。

问题来了,这个路由器用的是debian 6 squeeze,那么debian都有什么版本呢?

  • 下一代 Debian 正式发行版的代号为 stretch — 发布时间尚未确定
  • Debian 8 (jessie) — 当前的稳定版
  • Debian 7 (wheezy) — 被淘汰的稳定版
  • Debian 6.0 (squeeze) — 被淘汰的稳定版
  • Debian GNU/Linux 5.0 (lenny) — 被淘汰的稳定版
  • Debian GNU/Linux 4.0 (etch) — 被淘汰的稳定版
  • Debian GNU/Linux 3.1 (sarge) — 被淘汰的稳定版
  • Debian GNU/Linux 3.0 (woody) — 被淘汰的稳定版
  • Debian GNU/Linux 2.2 (potato) — 被淘汰的稳定版
  • Debian GNU/Linux 2.1 (slink) — 被淘汰的稳定版
  • Debian GNU/Linux 2.0 (hamm) — 被淘汰的稳定版

我们去http://mirrors.163.com/debian/dists/ 看看:

有stretch、jessie、wheezy,就是没有squeeze,这下完蛋了!!!

没办法,去https://www.debian.org/distrib/archive 找找archive吧。

找个离得近的日本archive站,http://ftp.riken.jp/Linux/debian/debian-archive/debian/

里面果然有squeeze啊,善莫大焉!!!

编辑一下/etc/source.list

deb http://ftp.riken.jp/Linux/debian/debian-archive squeeze main contrib non-free  

这下刷机得以继续啊,顺便普及一下source.list的格式

deb    ###   地址                           ###  版本代号   ###  限定词  
deb    ###   http://mirrors.163.com/debian/ ###  wheezy    ###   main non-free contrib  

组合一下,其实就是要去:

http://mirrors.163.com/debian/dists/wheezy的目录下,去main|non-free|contrib这三个目录下去找软件。  
Viewing all 290 articles
Browse latest View live