1.执行autoheader,使其生成config.h.in文件。
2.执行autoconf,使其生成configure文件。
3.执行./configure,生成makefile文件。
4.make生成ssh
月度归档:2018年10月
利用systemd作守护进程的脚本
#!/bin/sh
path_current=`pwd`
path_script=$(cd "$(dirname "$0")"; pwd)
mode=$1
name=receipt
systemd_dir=/usr/lib/systemd/system
app_process=`ps -ef | grep "$program"| grep -v grep`
force=$2
case "$mode" in
'install')
if [ -d $systemd_dir ];then
if [ -f $systemd_dir/${name}.service ] && [ "$force" != "--force" ]; then
echo "The ${name}.service had exist.!!!"
echo "Force to install by command: install --force"
exit
fi
echo "Description=$name service" > $systemd_dir/${name}.service
echo "After=network.target" >> $systemd_dir/${name}.service
echo "" >> $systemd_dir/${name}.service
echo "[Service]" >> $systemd_dir/${name}.service
echo "ExecStart=$path_script/$name --config=$path_script/config/config.toml" >> $systemd_dir/${name}.service
echo "KillMode=process" >> $systemd_dir/${name}.service
echo "Restart=on-failure" >> $systemd_dir/${name}.service
echo "RestartSec=3s" >> $systemd_dir/${name}.service
echo "" >> $systemd_dir/${name}.service
echo "[Install]" >> $systemd_dir/${name}.service
echo "WantedBy=multi-user.target" >> $systemd_dir/${name}.service
systemctl daemon-reload
systemctl enable $name
systemctl start $name
else
echo "it's not support systemd feature"
fi
;;
'uninstall')
if [ -f $systemd_dir/${name}.service ]; then
systemctl stop $name
systemctl disable $name
rm -f /etc/systemd/system/multi-user.target.wants/${name}.service
rm -f $systemd_dir/${name}.service
fi
;;
'migrate')
echo "it's ready to migrate database...."
$path_script/$name --config=$path_script/config/config.toml --migrate=true
;;
'start')
echo "it's ready to start op...."
systemctl start $name
systemctl status $name
echo "start end......"
;;
'stop')
echo "it's ready to check process..."
systemctl stop $name
systemctl status $name
echo 'success to kill.'
;;
'status')
echo "it's ready to check status..."
systemctl status $name
;;
*)
basename=`basename "$0"`
echo "Usage: $basename {install|uninstall|start|stop} [ server options ]"
exit 1
;;
esac
exit 1
zipkin的docker配置
参照https://github.com/openzipkin/docker-zipkin的配置
version: '3.1'
services:
storage:
image: openzipkin/zipkin-mysql:2.11.7
container_name: zipkin-mysql
# Uncomment to expose the storage port for testing
# ports:
# - 3306:3306
zipkin:
image: openzipkin/zipkin:2.11.7
restart: always
container_name: zipkin
ports:
- 9411:9411
environment:
- STORAGE_TYPE=mysql
- MYSQL_HOST=zipkin-mysql
# Uncomment to enable scribe
- SCRIBE_ENABLED=true
# Uncomment to enable self-tracing
- SELF_TRACING_ENABLED=true
# Uncomment to enable debug logging
- JAVA_OPTS=-Dlogging.level.zipkin=DEBUG -Dlogging.level.zipkin2=DEBUG
depends_on:
- storage
常用的govendor命令
初始化目录
govendor init
添加缺失的包
govendor add +missing
获取没有下载包
govendor fetch +missing
sql5.7报错
match error:Error 1055: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘appstore_wps_cn.app_stores.app_type’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by”
如何解决?
SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
SELECT @@sql_mode
SELECT app_id,app_type,MAX(app_ver)app_ver,sdk_ver,app_name,client_id,client_os,package_info,down_url FROM `app_stores` WHERE `app_stores`.`deleted_at` IS NULL AND ((`app_type`='tools') AND (`client_os`='pc') AND (`sdk_ver`<='00002.00007')) GROUP BY app_id
mintty的Cmake配置
cmake_minimum_required(VERSION 3.12)
project(src C)
set(CMAKE_C_STANDARD 11)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -include std.h -Wall -Wextra -Wundef -Werror -mtune=atom -g -O0 -fstack-check")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -static-libgcc -MMD -MP")
#当使用add_definitions设置时,res.rc文件是无法编译通过的,要使用CMAKE_C_FLAGS。
#add_definitions(-static-libgcc -MMD -MP -std=gnu99 -include std.h -Wall -Wextra -Wundef -Werror -mtune=atom -g -O0 -fstack-check)
message("CMAKE_C_COMPILER=${CMAKE_C_COMPILER}")
message("CMAKE_RC_COMPILER=${CMAKE_RC_COMPILER}")
include_directories(.)
link_directories(/usr/lib/w32api)
add_executable(mintty WIN32
appinfo.h
base64.c
base64.h
charset.c
charset.h
child.c
child.h
config.c
config.h
ctrls.c
ctrls.h
jumplist.c
jumplist.h
mcwidth.c
minibidi.c
minibidi.h
print.h
printers.c
res.h
sixel.c
sixel.h
sixel_hls.c
sixel_hls.h
std.c
std.h
term.c
term.h
termclip.c
termline.c
termmouse.c
termout.c
termpriv.h
textprint.c
win.h
winclip.c
winctrls.c
winctrls.h
windialog.c
winids.h
winimg.c
winimg.h
wininput.c
winmain.c
winpriv.h
winsearch.c
winsearch.h
wintext.c
wintip.c
res.rc)
target_link_libraries(mintty libusp10.a libgdiplus.a libcomctl32.a libimm32.a libwinmm.a libwinspool.a libole32.a libuuid.a)
validator检验
package validator
import (
"fmt"
"reflect"
)
func isStructPtr(t reflect.Type) bool {
return t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Struct
}
func isNilOrZero(v reflect.Value) bool {
switch v.Kind() {
default:
return reflect.DeepEqual(v.Interface(), reflect.Zero(v.Type()).Interface())
case reflect.Interface, reflect.Ptr:
return v.IsNil()
}
}
func CheckRequired(obj interface{}, fields ...string) error {
reflectType := reflect.TypeOf(obj)
reflectValue := reflect.ValueOf(obj)
if !isStructPtr(reflectType) {
return fmt.Errorf(
"expected unnamed object value to be a pointer to a struct but got type %s "+
"with value %v",
reflectType,
obj,
)
}
elem := reflectValue.Elem()
for i := 0; i < len(fields); i++ {
name := fields[i]
val := elem.FieldByName(name)
if isNilOrZero(val) {
return fmt.Errorf("the field of [ %s ] can't be empty", name)
}
}
return nil
}
ubuntu18.04安装php5.5.38失败解决方案
configure: error: jpeglib.h not found.
configure: error: png.h not found.
apt install aptitude,另一个比apt更好的包管理工具
aptitude install libjpeg-dev libpng-dev