rsync config

rsyncd_server.conf:
uid = root
gid = root
use chroot = no
max connections = 100
strict modes = yes
pid file = /webserver/logs/rsync.pid
log file = /webserver/logs/rsyncd.log
ignore error = yes
timeout = 300

[data]
path = /data
read only = no
write only = no
hosts allow = *
list = false
uid = root
gid = root
auth users = root
secrets file = /webserver/rsync/rsyncd_server.passwd

[image]
path = /data/res/static/photos
read only = no
write only = no
hosts allow = *
list = false
uid = root
gid = root
auth users = root
secrets file = /webserver/rsync/rsyncd_server.passwd

rsync.sh:
#!/bin/bash
src1=/media
src2=/webserver
rsync_passwd_file=/webserver/rsync/rsyncd_server.passwd

if [ ! -e “$src1” ] || [ ! -e “$src2” ] || [ ! -e “/usr/bin/rsync” ] || [ ! -e “$rsync_passwd_file” ]; then
echo “Check File and Folder”
exit 1
fi
rsync –daemon –config=/webserver/rsync/rsyncd.conf

inotify.sh:
/usr/bin/killall -9 inotifywait
/bin/sleep 2
/usr/bin/killall -9 rsync
/bin/sleep 2
src=/data
des=data
rsync_passwd_file=/home/kandao/workspace/rms/scripts/rsync_copy/rsyncd_client.passwd
ip=portalxxx.kandaoxx.tech
# server auth name
user=root

# check
if [ ! -e “${src}” ] || [ ! -e “/usr/bin/inotifywait” ] || [ ! -e “/usr/bin/rsync” ] || [ ! -e “${rsync_passwd_file}” ]; then
echo “Check File and Folder”
exit 1
fi
# need cd into local path
cd ${src}
/usr/bin/inotifywait -mrq –format ‘%Xe %w%f’ -e modify,create,delete,attrib,close_write,move ./ | while read file
do
INO_EVENT=$(echo $file | awk ‘{print $1}’)
INO_FILE=$(echo $file | awk ‘{print $2}’)
echo “——————————-$(date)————————————”
echo $file
# create,modify,close_write,move to
if [[ $INO_EVENT =~ ‘CREATE’ ]] || [[ $INO_EVENT =~ ‘MODIFY’ ]] || [[ $INO_EVENT =~ ‘CLOSE_WRITE’ ]] || [[ $INO_EVENT =~ ‘MOVED_TO’ ]]
then
echo ‘CREATE or MODIFY or CLOSE_WRITE or MOVED_TO’
rsync -avzctRP –password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) –exclude-from=/data/rsyncexclude.txt ${user}@${ip}::${des}
fi
# delete move from
if [[ $INO_EVENT =~ ‘DELETE’ ]] || [[ $INO_EVENT =~ ‘MOVED_FROM’ ]]
then
echo ‘DELETE or MOVED_FROM’
rsync -avztRP –password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) –exclude-from=/data/rsyncexclude.txt ${user}@${ip}::${des}
fi
# touch chgrp chmod chown
if [[ $INO_EVENT =~ ‘ATTRIB’ ]]
then
echo ‘ATTRIB’
if [ ! -d “$INO_FILE” ]
then
rsync -avzctRP –password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) –exclude-from=/data/rsyncexclude.txt ${user}@${ip}::${des}
fi
fi
done

rsyncd_server.passwd
root:xxxxpassword

rsyncd_client.passwd
xxxxpassword

rsyncexclude.txt
origin
origin/*
_thumbnails
_thumbnails/*
WEBM
WEBM/*
rsyncexclude.txt

dante+socks5+switchyomega

1.安装dante-server: sudo apt-get install dante-server

2. 修改配置文件:
mv /etc/danted.conf /etc/danted.conf.bak
新建配置文件
touch /etc/danted.conf
nano /etc/danted.conf

logoutput: /var/log/danted.log
internal: eth0 port = 1080
external: eth0
method: username none
user.privileged: proxy
user.notprivileged: nobody
user.libwrap: nobody
client pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect disconnect
}
pass {
from: 0.0.0.0/0 to: 0.0.0.0/0 port gt 1023
command: bind
log: connect disconnect
}
pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: connect udpassociate
log: connect disconnect
}
block {
from: 0.0.0.0/0 to: 0.0.0.0/0
log: connect error
}

3.创建log文件夹
mkdir /var/log/sockd

4.启动Dante
/etc/init.d/danted start
02.png

5.检测是否启动成功
netstat -anp | grep 1080

6. 设置chrome
设置switchyomega: 并配置
or proxyhelper

ps: switchyomega的配置文件:https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt

or

pip install shadowsocks

socks5.json
{
“server”:”ip_of_server”,
“server_port”:6443,
“local_port”:1080,
“password”:”password”,
“timeout”:600,
“method”:”aes-256-cfb”
}

sslocal -c socks5.json

 

ftp config

0. install
sudo apt-get install libpam-pwdfile vsftpd apache2-utils
/usr/sbin/vsftpd

1. Edit /etc/vsftpd.conf
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
local_root=/ftp/data
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES
ftpd_banner=Welcome to Kandao Tech Ltd.

xferlog_enable=YES
xferlog_std_format=YES
xferlog_file=/var/log/xferlog
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log

#virutal user settings
user_config_dir=/etc/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd

2. Edit /etc/pam.d/vsftpd
auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

3. Add a system user for virtual users
useradd –home /home/vsftd –gid nogroup -m –shell /bin/false vsftpd

4. Create virtual users
mkdir /etc/vsftpd
htpasswd -d /etc/vsftpd/ftpd.passwd pub (passpub)
5. Create user conf file
mkdir /etc/vsftpd_user_conf

echo “local_root=/ftp/data/pub”>/etc/vsftpd_user_conf/pub
6. Make user directory
mkdir /ftp/data/pub; chown vsftpd:nogroup /ftp/data/pub

7. retart vsftpd
service vsftpd restart
or /usr/sbin/vsftpd

8. ssl support
1) check whether vsftpd support ssl:
ldd /usr/sbin/vsftpd |grep libssl
2) generate cert
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
3) edit conf:
vi /etc/vsftpd/vsftpd.conf
add following lines:

ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/vsftpd.pem

3) restart: service vsftpd restart

FIFO 读写

ref: http://blog.csdn.net/erlian_beijing/article/details/46698401

FIFO文

#include <sys/types.h>

#include <sys/stat.h>

int mkfifo( const char*pathname, mode_t mode);

参数:

pathname:FIFO的路径名+文件名。

mode:mode_t类型的权限描述符,同open的参数。

返回值:

成功:返回0

失败:如果文件已经存在,则会出错且返回-1。

 

操作FIFO文件时的特点:

系统调用的I/O函数都可以作用于FIFO,如open、close、read、write等。

 

打开FIFO时,非阻塞标志(O_NONBLOCK)产生下列影响:

特点一:不指定O_NONBLOCK(即open没有位或O_NONBLOCK)

1、open以只读方式打开FIFO时,要阻塞到某个进程为写而打开此FIFO

2、open以只写方式打开FIFO时,要阻塞到某个进程为读而打开此FIFO。

3、open以只读、只写方式打开FIFO时会阻塞,调用read函数从FIFO里读数据时read也会阻塞。

4、调用write函数向FIFO里写数据,当缓冲区已满时write也会阻塞。

5、通信过程中若写进程先退出了,则调用read函数从FIFO里读数据时不阻塞;若写进程又重新运行,则调用read函数从FIFO里读数据时又恢复阻塞。

6、通信过程中,读进程退出后,写进程向命名管道内写数据时,写进程也会(收到SIGPIPE信号)退出。

特点二:指定O_NONBLOCK(即open位或O_NONBLOCK)

1、先以只读方式打开:如果没有进程已经为写而打开一个FIFO, 只读open成功,并且open不阻塞。

2、先以只写方式打开:如果没有进程已经为读而打开一个FIFO,只写open将出错返回-1。

3、read、write读写命名管道中读数据时不阻塞。

4、通信过程中,读进程退出后,写进程向命名管道内写数据时,写进程也会(收到SIGPIPE信号)退出。

 

注意:

open函数以可读可写方式打开FIFO文件时的特点:open不阻塞,可以这样理解:因为其本身以可读可写的方式打开,所以不需要别的进程帮其打开。

 

注:关于非阻塞方式或非阻塞打开FIFO,read时返回值的问题:

 

若某个FIFO的最后一个写进程终止了或关闭了该FIFO,那么将为FIFO的读进程产生一个文件结束标志。如果 read()读数据时第一个读到的是文件结束标志,那么就返回0。

 

1、阻塞方式:

1) 写进程未退出,read阻塞,等待写端的输入

2) 写进程终止了或关闭了该FIFO,read非阻塞,为FIFO的读进程产生一个文件结束标志,read的返回值为0。

 

2、非阻塞方式:

假设一个进程以非阻塞读方式打开一个FIFO.该FIFO之前已经被以写方式被其他进程打开,但无数据被写入,那么此时读进程需要立刻返回,那么应该返回什么呢?
我们知道 如果 read()读数据时第一个读到的是文件结束标志,那么就返回0。如果像 我们想的那样 没有数据读应该返回0 ,那么这个0就具有二义性。因为我们不知道是没有数据造成的返回0还是写端关闭造成的返回0.

所以POSIX.1要求,对一个非阻塞的描述符如果无数据可读,则read返回-1,而且 errno被设置为 EAGAIN。

1) 如果在随后调用read函数之前,如果另一个进程已经以写方式打开了该FIFO,并写入了数据,那么正常读取数据。

2) 如果在随后调用read函数之前,如果另一个进程已经以写方式打开了该FIFO,但是并未写入数据,read调用会立刻出错返回-1, 并设置 errnno为EAGAIN。

3)如果在随后调用read函数之前,没有其他进程以写方式打开该FIFO,或是曾经有但是在read读时已经关闭了,那么read返回0,表示读到文件结束标志。

error while loading shared libraries: xxxx.so.x

http://www.cnblogs.com/Anker/p/3209876.html

 

error while loading shared libraries: xxx.so.x” 错误的原因和解决办法

今天在执行一个protobuf程序时,提示error while loading shared libraries: libprotobuf.so.8: cannot open shared object file: No such file or directory错误。google了一下,是由于找不到lib这个文件。

解决办法:

一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如:

tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory

原因一般有两个, 一个是操作系统里确实没有包含该共享库(lib*.so.*文件)或者共享库版本不对, 遇到这种情况那就去网上下载并安装上即可.

另外一个原因就是已经安装了该共享库, 但执行需要调用该共享库的程序的时候, 程序按照默认共享库路径找不到该共享库文件.

所以安装共享库后要注意共享库路径设置问题, 如下:

1) 如果共享库文件安装到了/lib或/usr/lib目录下, 那么需执行一下ldconfig命令

ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表.

2) 如果共享库文件安装到了/usr/local/lib(很多开源的共享库都会安装到该目录下)或其它”非/lib或/usr/lib”目录下, 那么在执行ldconfig命令前, 还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中, 如下:

# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
# echo “/usr/local/lib” >> /etc/ld.so.conf
# ldconfig

3) 如果共享库文件安装到了其它”非/lib或/usr/lib” 目录下,  但是又不想在/etc/ld.so.conf中加路径(或者是没有权限加路径). 那可以export一个全局变量LD_LIBRARY_PATH, 然后运行程序的时候就会去这个目录中找共享库. 

LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开. 比如安装了一个mysql到/usr/local/mysql目录下, 其中有一大堆库文件在/usr/local/mysql/lib下面, 则可以在.bashrc或.bash_profile或shell里加入以下语句即可:

export LD_LIBRARY_PATH=/usr/local/mysql/lib:$LD_LIBRARY_PATH

一般来讲这只是一种临时的解决方案, 在没有权限或临时需要的时候使用.