The Mirages

樱桃沟夹事

redis是一个很NB的nosql,吞吐量很高,在对服务器做benchmark的时候10W qps都没有问题。 但是这样一个大杀器要是用的地方不对就问题也挺多。 然后用了 redis-faina.py 这个工具去检查到底有多慢,发现真的很慢啊,这个时候还没有怀疑是这个python脚本的问题。这个是后话了 然后用strace -rp 进行检查,发现每个get, set都非常慢,有时候居然要100ms来完成,查询了一下,这个get的结果是空啊。 看了下这个redis的qps才2啊, 一台可以支持10W qps的redis服务器怎么在2个qps的情况下会那么慢呢。赶紧检查配置。从头看到尾就发现如下这个不熟悉的配置。 ```c

Redis calls an internal function to perform many background tasks, like # closing connections of clients in timeot, purging expired keys that are # never requested, and so forth. # # Not all tasks are perforemd with the same frequency, but Redis checks for # tasks to perform accordingly to the specified "hz" value. # # By default "hz" is set to 10. Raising the value will use more CPU when # Redis is idle, but at the same time will make Redis more responsive when # there are many keys expiring at the same time, and timeouts may be # handled with more precision. # # The range is between 1 and 500, however a value over 100 is usually not # a good idea. Most users should use the default of 10 and raise this up to # 100 only in environments where very low latency is required. hz 10


台湾游记之台北 办理签证就不说了,很简单,出入境办公室和淘宝都可以搞定。 只是台湾不承认我们的入台证,而我们也不承认《中华民国台湾地区入处境许可证》 内嵌图片 4 出了桃园机场,心情有点失落,天没那么蓝,地也没那么干净,发展水平也一般。想着这里是桃园县,台北应该还是不错的。坐上国光巴士直接到了台北车站。所谓台北车站,这里又是地铁站,也是高铁站,也是普通火车车站。 内嵌图片 1 台北车站依然保留着几十年前的风格。去的当天刚好是台北车站建成多少周年。一群小孩子在那边合唱中,也没有我们的整齐划一,很多孩子都是各顾各的。 在台北车站换了之前网上预订的车票,台铁和高铁居然还要在2个不同的地方换票,这个也太不人性化了,这个就不能合并吗? 还是根本就是2个机构啊。 在台北,当然要去故宫啊,据说这里由于地方受限制,每次只能展出3%的作品,但是翠玉白菜,五花肉和鼎这3个是每次都会展出的,属于镇馆之宝,可惜这里不能进行照相,这个要求也太严格了吧,很多时候我觉得只要不开闪光灯就可以了,难道是怕有人出去仿造? 所以只能在外面照了一个像。应该说北京故宫里能搬的估计都过来了。从史料记载中我们还是发现丢失了很多,几乎是1/3的东西在抗日战争中给丢失了。 也不知道啥时候两个故宫可以合并起来看,所有的东西都放到它原来的位置上去。 内嵌图片 2 傍晚的台北故宫有点冷清,不像这边无论什么时候都是人山人海的。后面的山里据说藏了所有的宝贝,看来这山也都掏空了,但是上面的绿树还都不错。还有居然故宫对面还有盖居民楼的,真是无法无天啊。 逛完了故宫,当然是去士林夜市啊,非常的有名,也非常的让人失望啊。门口就是一家豪大鸡排,整个市场我看虽然是人很多,可是对于一个很注重健康的人来说,真是没啥可吃的。只能是饿着肚子了。这里的东西基本都是油炸出来的。最后就吃了一个鸡排和蚵仔煎以及棺材板,都是够难吃的。 内嵌图片 1 台湾因为都是山,很容易理解,岛屿的形成都是板块互相挤压形成的,所以只要是岛就必定有山。于是这边路上开的最多的就是机车了。烧汽油的应该是,车速可以达到80km每小时,还是够快的。这路上也到处有停机车的地方,而很少有停自行车的地方,只有在台大的时候才很多学生骑自行车的。 内嵌图片 2 在台湾,千万要住民宿哦,民宿就是私人旅店,这个还是让人感觉很美好的,一扫我以前对于私人旅店那种脏乱差的印象。都太干净了,还没进门都得脱鞋了,还好没啥小偷偷这个,每家每户的安保系统都做的很到位,而且都跟保安公司联网的,都是防小人的。 内嵌图片 3 好了,第一天台北的感觉就是这样了,一般。没有特别大的惊奇,本是同根生啊。

《1984》对我们造成的冲击刚刚结束,这个世界近期也不大可能出现那种局面,至少表面上是不会出现,也许我们一直都被监控着呢,比如最近的棱镜门事件。 在尼尔波兹曼在书中写道“奥威尔害怕的是那些强行禁书的人,赫胥黎担心的是失去任何禁书的理由,因为再也没有人愿意读书,奥威尔害怕的是那些剥夺我们信息的人,赫胥黎担心的是人们在汪洋如海的信息中日益变得被动和自私; 奥威尔害怕的是真理被隐瞒,赫胥黎害怕的是真理被淹没在无聊烦琐的世事中。” 作者写的还是电视文化对于传统媒体的冲击,其实在电视文化的时候,读书还是很容易的,因为电视并不能满足我们对于知识的渴求。而现在已经是信息时代了。 在信息时代这几年,我们创造出来的信息已经超过1900年以前的总和了。我们正被淹没在信息的海洋中。而信息时代的信息特征比电视时代更短小,很多人更是只是搜索出来结果就直接关闭了,很少有人去搞清楚前因后果。而这也是作者最为担心的。 而书本主要是为了把前因后果写出来的一种媒体,但是其实很多实用的计算机书籍也不是这样的。当你知道一件事务的前因后果,那你就会有更多的想法,当你看了多本类似的书籍的时候,你就会横向去比较这些书籍的内容,最终形成自己的想法。 虽然作者前面说了很多由于电视媒体的属性,导致观众看电视或者广告都被形象所吸引,而根本不关心它说的是什么内容,为什么是这样的,等等这些深入思考的内容。 这本书给我的最大思考就是别被媒体的表象所蒙蔽了,要有自己的思考才可以,而思考的前提就是你要充分了解这个事情。

领导要求在响应失败的时候也返回200以保证不影响客户网站,这个在F5中很容易的实现,只要一句话就可以了,但是nginx中稍微麻烦了点,要答案的直接看下面这个语句就可以了,加到每个server中就可以了。

1
2
3
4
5
6
proxy_intercept_errors on; 
error_page  404 400 500 503 502 =200 @handler;
location @handler {
default_type text/plain;
return 200;
}

至于为什么,还有没有别的方法且看下面。 本来想用 if语句来实现,但是发现根本不生效,因为无论server_status还是upstream_status出来的时候都已经返回给用户端了。所以下面的代码根本没有效果

1
2
3
4
if ($upstream_status ~ (400|404|500|503|502)){ 
returen 200;
break;
}
1
2
3
4
if ($server_status ~ (400|404|500|503|502)){ 
returen 200;
break;
}

上面两种代码都是没有效果的。那error_page还有别的实现方式吗? 当然有。

阅读全文 »

先说graphite,这个比较复杂点,是python写的。 首先我们了解一下graphite具体是如何工作的。

  1. carbon - 一个Twisted守护进程,监听时间序列数据
  2. whisper - 一个简单的数据库库,用来存储时间序列数据,在设计上类似于RRD
  3. graphite webapp - Django webapp,使用 Cairo来根据需要呈现图形

Graphite-High-Level-458x600 官方的安装文档:http://graphite.wikidot.com/installation 但是这里缺少了一些依赖包。 最好是python2.6 或者以上,虽然官方说2.4也可以,但是出现各种问题最后。 ** 安装graphite** 先导入epel源,我的centos6.4版本,然后yum安装下列包 c yum install -y bitmap bitmap-fonts-compat Django django-tagging fontconfig cairo python-devel python-memcached python-twisted pycairo mod_python python-ldap python-simplejson memcached python-zope-interface mod_wsgi python-sqlite2 python-rrdtool git python-pip 然后git下载如下几个项目 c git clone https://github.com/graphite-project/graphite-web.git git clone https://github.com/graphite-project/carbon.git git clone https://github.com/graphite-project/whisper.git git clone git://github.com/graphite-project/ceres 安装上述几个项目 c cd graphite-web python setup.py install cd .. cd carbon python setup.py install cd .. cd whisper python setup.py install cd .. cd ceres python setup.py install 默认安装路径为/opt/graphite 安装完成后可以是用如下命令检查是否安装成功,不成功的根据提示来安装对应的包 c python check-dependencies.py 其中特别注意pyparsing的版本必须是1.5.7,因为更高的版本是针对Python3的 c pip-python install pyparsing==1.5.7 我的python插件和版本如下 c Conch==8.2.0 Django==1.4.5 PyXML==0.8.4 SOAPpy==0.11.6 Twisted==13.0.0 Twisted-Core==8.2.0 Twisted-Lore==8.2.0 Twisted-Mail==8.2.0 Twisted-Names==8.2.0 Twisted-News==8.2.0 Twisted-Runner==8.2.0 Twisted-Web==8.2.0 Twisted-Words==8.2.0 ceres==0.10.0 distribute==0.6.46 django-tagging==0.3.1 fpconst==0.7.3 iniparse==0.3.1 iotop==0.3.2 mock==1.0.1 mod-python==3.3.1 nagios-plugins-rhev==1.0.0 nose==1.2.1 paramiko==1.7.5 pexpect==2.3 pssh==2.3.1 py-rrdtool==0.2.1 pyOpenSSL==0.10 pycrypto==2.0.1 pycurl==7.19.0 pygpgme==0.1 pyparsing==1.5.7 pysqlite==2.3.5 python-dateutil==1.4.1 python-ldap==2.3.10 python-memcached==1.43 pytz==2013b pyxdg==0.18 simplejson==2.0.9 txAMQP==0.6.2 urlgrabber==3.9.1 whisper==0.9.9 yum-metadata-parser==1.1.2 zope.interface==4.0.5 配置graphite c cd /opt/graphite/conf/ cp carbon.conf.example carbon.conf cp storage-schemas.conf.example storage-schemas.conf cp graphite.wsgi.example graphite.wsgi 复制examples下的apache配置文件到对应的conf.d目录下 c cp /opt/graphite/examples/example-graphite-vhost.conf /etc/http/conf.d/graphite.conf 记得给graphite.conf中的WSGISocketPrefix的目录给创建好就可。 当然你可以不用apache来启动,用python自带的web server也可以 c python /opt/graphite/bin/run-graphite-devel-server.py /opt/graphite & 初始化数据库和本地配置 c cd /opt/graphite/webapp/graphite python manage.py syncdb chown apache:apache /opt/graphite/storage/ cd /opt/graphite/webapp/graphite cp local_settings.py.example local_settings.py 记得修改local_settings.py中时区为Asia/Shanghai, 其他为默认就可以了。 启动apache和carbon c /etc/init.d/httpd reload python /opt/graphite/carbon-cache.py start 好了,这个时候graphite是安装完成了,但是graphite是只负责绘图,不负责收集数据,收集数据使用collectd来完成的。collectd分为服务器端和客户端。在这里,我们服务器端放在跟graphite同一台机器上。安装方法一样 ** 安装collectd** 安装依赖包 c yum install rrdtool rrdtool-devel rrdtool-perl libgcrypt-devel gcc make gcc-c++ 默认epel源里有collectd,但是版本太低,我们还是从官方网站上下载后手动进行安装 c wget http://collectd.org/files/collectd-5.3.0.tar.bz2 tar jxvf collectd-5.3.0.tar.bz2 cd collectd-5.3.0 ./configure --prefix=/opt/server/collectd --enable-all-plugins make make install 安装启动脚本 vim /etc/init.d/collectd c #!/bin/bash # # collectd Startup script for the Collectd statistics gathering daemon # chkconfig: - 99 01 # description: Collectd is a statistics gathering daemon used to collect # system information ie. cpu, memory, disk, network # processname: collectd # config: /etc/collectd.conf # config: /etc/sysconfig/collectd # pidfile: /var/run/collectd.pid # Source function library. . /etc/init.d/functions PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/server/collectd/sbin RETVAL=0 ARGS="" prog="collectdmon" service="collectd" CONFIG=/opt/server/collectd/etc/collectd.conf COLLECTD=/opt/server/collectd/sbin/collectd COLLECTDMONPID=/var/run/collectdmon.pid if \[ -r /etc/sysconfig/$service \]; then . /etc/sysconfig/$service fi check_config() { if test ! -r "$CONFIG"; then return 2 fi if ! $COLLECTD -t -C "$CONFIG"; then return 1 fi return 0 } start () { echo -n $"Starting collectd: " check_config rc="$?" if test "$rc" -ne 0; then RETVAL=6 echo $"not starting due to configuration error" failure $"not starting $service due to configuration error" else daemon $prog -P $COLLECTDMONPID -c $COLLECTD -- -C "$CONFIG" $ARGS RETVAL=$? echo \[ $RETVAL -eq 0 \] && touch /var/lock/subsys/$service fi } stop () { echo -n $"Stopping collectd: " killproc $prog RETVAL=$? echo \[ $RETVAL -eq 0 \] && rm -f /var/lock/subsys/$service } # See how we were called. case "$1" in start) start ;; stop) stop ;; status) status $prog ;; restart|reload) check_config rc="$?" if test "$rc" -ne 0; then RETVAL=6 echo $"not restarting due to configuration error" failure $"not restarting $service due to configuration error" else stop start fi ;; condrestart) \[ -f /var/lock/subsys/$prog \] && restart || : ;; *) echo $"Usage: $0 {start|stop|status|restart|reload|condrestart}" exit 1 esac exit $? # vim:syntax=sh 修改collectd配置文件 首先看客户端的配置文件 c LoadPlugin network <Plugin network> # # client setup: Server "10.1.1.240" "25827" # 10.1.1.240 为collectd服务器端的地址, 25827为监听的端口 # <Server "239.192.74.66" "25826"> # SecurityLevel Encrypt # Username "user" # Password "secret" # Interface "eth0" # TimeToLive "128" </Plugin> 启动collectd就可以了 服务器端配置文件 c LoadPlugin network <Plugin network> # # server setup: Listen "10.1.1.240" "25827" </Plugin> 如果启动没有问题的话,那理论上在服务器端的/opt/server/collectd/var/lib/collectd 目录下可以看到client的目录,和默认load的模块比如cpu的一些rrd文件。 现在我们只能collectd来收集数据,grapite还没有跟collectd连通并进行绘图。我们需要有一个插件将collectd传递给carbon 安装collecd-carbon c mkdir /opt/server/collectd/plugin/ cd /opt/server/collectd/plugin/ git cloen git://github.com/indygreg/collectd-carbon 修改collecd.conf配置文件加载collectd-carbon c <LoadPlugin "python"> Globals true </LoadPlugin> <Plugin "python"> # carbon_writer.py is at path /opt/collectd-plugins/carbon_writer.py ModulePath "/opt/server/collectd/plugin/collectd-carbon/" Import "carbon_writer" <Module "carbon_writer"> LineReceiverHost "10.1.1.240" LineReceiverPort 2003 LineReceiverProtocol "tcp" DifferentiateCountersOverTime true LowercaseMetricNames true TypesDB "/opt/server/collectd/share/collectd/types.db" </Module> </Plugin> 重新启动collectd就可以了,然后就会往服务器端的2003端口写入数据了。 最后,自定义脚本 虽然collectd默认自带了很多的脚本, 但是还是没法完全覆盖我们自己的要求,所以需要自己编写脚本去执行结果,并进行画图。 下面这个是我的事例脚本,很简单,就是吐出2个值,一个是上2秒的qps和最近10000次请求的超时时间的请求数量。 c #!/bin/bash #count the qps and error id=$HOSTNAME while true; do TIME=$(date -d "2 seconds ago" +%Y:%H:%M:%S) start_run=$(date +%s) abc_qps=$(tail -n50000 /opt/server/nginx/logs/abc.access.log | grep -c "$TIME") abc_err=$(tail -n10000 /opt/server/nginx/logs/abc.access.log | awk -F'|' '{if($14 > 0.08) print}'| wc -l) echo 'PUTVAL '"$id"'/qps/gauge-abc_qps '"$start_run"':'"$abc_qps" echo 'PUTVAL '"$id"'/timeout/gauge-abc_err '"$start_run"':'"$abc_err" sleep 10 done 其中最主要的就是输出时候的定义 id/qps/gauge-abc_qps 分别对应下面这个 c <instance-id>/<plugin>-<plugin_instance>/<type>-<type_instance> 其中instance-id我这里用主机名来表示 plugin是qps和timeout两种 gauge是表示type的一种。总计有很多种type: c Generic Graph Types :blank :countr :bytes_txrx :recv_sent :requests :cache Plugin-specific Graph Types :haproxy_sessions :haproxy_traffic :haproxy_status :apache_bytes :apache_requests :apache_scoreboard charge charge_percent cpu current df disk disk_octets disk_merged disk_ops disk_time dns_opscode dns_qtype dns_rcode dns_octets email email_size spam_score spam_check entropy fanspeed frequency frequency_offset gauge hddtemp if_errors if_packets irq load load_percent mails memory old_memory memcached_connections memcached_items memcached_octets memcached_ops mysql_commands mysql_handler mysql_octets mysql_qcache mysql_threads nfs_procedure nfs3_procedures nginx_connections nginx_requests opcode operations partition passenger_instances passenger_processes passenger_queued passenger_requests percent ping processes ps_rss ps_cputime ps_count ps_pagefaults ps_state queue_length qtype rcode swap ols_swap temperature timeleft time_offset if_octets cpufreq multimeter users voltage vs_threads vs_memory vs_processes 写好扩展脚本,把它放入到/opt/server/collectd/plugin/目录,加入可执行权限。 修改collectd.conf文件加载扩展脚本 ```c
LoadPlugin exec Exec “apache” “/opt/server/collectd/plugin/qps_err.sh” # apache为执行这个脚本的用户名 # NotificationExec “user:group” “/path/to/exec”


批评不自由,则评论无意义。读《批评官员的尺度有感》   上面这句是封面的小字,其实是说明美国现在的状态。   美国的民主并不是一下子到达现有的状态,而是通过人民自由争取来的,并不是三权分立的结果,而是人民争取得来的,不然为什么实施同样制度的菲律宾依然腐败严重,人民不自由呢。   而本书是讲述了法律系统中这些自由的案件。最终将第一修正案的解释更加明确化。这都是靠各个法官和公民最终确立下来的。都是根据实际的案例来阐明的。   霍姆斯大法官在一个案件的异议意见中如此写道:“如果我们想确定一种思想是否正确,就应让它在思想市场的竞争中接受检验。” 而汉德法官也发表过如下的意见来说明传媒的重要性:“不管这些作品是适度的政治推论,还是过激,不当的谩骂,在美国这个以自由言论为权利最终根源的国家里,人人皆享有批评政府的自由……钳制这些可能动摇人民一直的言论,无异于镇压所有对立评论和意见……言论自由在直接煽动叛乱,反抗等行为时,才构成犯罪,如果把合法的政治言论当作挑唆煽动,就是驱逐了民主政治的守护神,是最大的不宽容。”   而美国也产生过一些恶法,比如《防治煽动法》这些的法律,但是很快在各种案件中败下阵来。   而本书说的主要一个案子是来源于批评官员的,而官员的武器是所谓的个人的诽谤。虽然地方法院支持了官员的诉求,而最终布伦南裁定了,除非事先已知自己说的发表的内容是虚构的,不然人民享有批评官员的一切权利,就算是谩骂也行。而原话如下:“对公共事务的辩论应该不受抑制,充满活力并广泛公开,它可能包含了对政府或官员的激烈,刻薄,甚至尖锐的攻击。”   我们国家非常担心这个,怕媒体一旦完全开放导致自己垮台。而麦蒂逊当年针对《防治煽动法》的报告说过:“任何事务一旦实际运转,总难避免某种程度上的滥用,这类情形在新闻界体现的尤为明显。不过,我始终认为,留存一些芜枝杂叶,任其自由凋敝,会比直接剪除更有利于树木的生长。”

网上有很多文章写的是iptables通过nat模块进行端口映射,其实这是错误的概念,只是在ipables上做了来和回的2个forward而已。 因为有个项目要一个端口转发,而转发的还刚好是ssh端口。基本架构如下: A:  1.1.1.1 B:  公网地址 2.2.2.2 内网地址 10.10.10.2 C: 10.10.10.3 现在在B上面对10.10.10.3的22端口映射成2.2.2.2:3322端口。   当A ssh 到2.2.2.2:3322端口的时候每次都是通过2.2.2.2来进行内外网转发的。而A 得到的know_hosts里面的key也是真是10.10.10.3的公钥。但是在A的know_hosts文件里10.10.10.3的公钥对应的IP却是2.2.2.2,而不是10.10.10.3。.所以会出现一个情况,当你以后ssh 2.2.2.2的22端口的时候会提示key出错了。   这个也是没有办法的,A一直连接的都是2.2.2.2。   由于一般做forward的机器都是一个公网,一个内网,而tcpdump不能在混杂模式下监听所有端口,所以必须开2个tcpdump进程,后期再用wireshark进行merge后再进行分析。   从分析结果来看,只是在所有的连接中当中会多一步而已,而不会有其他更多的,key交换的时候也同样会进行forward的。

想设置一下Linux下系统登录用户密码输错次数的限制。由于知道是/etc/pam.d/system-auth文件来进行控制的,所以就查看了一下这个文件。   system-auth是由以下几个部分组成的 auth,account,password,session。每个部分又都有不同的方法,针对方法的使用也有不同的控制选项,一般有这些控制选项:required,requisite,sufficient,optional,include 这5种   具体内容man pam.d就都能看到,而很明显的,验证登录是通过auth这个部分来的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
account
this module type performs non-authentication based account management. It is typically used to restrict/permit access to a service
based on the time of day, currently available system resources (maximum number of users) or perhaps the location of the applicant
user -- ’root’ login only on the console.

auth
this module type provides two aspects of authenticating the user. Firstly, it establishes that the user is who they claim to be, by
instructing the application to prompt the user for a password or other means of identification. Secondly, the module can grant
group membership or other privileges through its credential granting properties.

password
this module type is required for updating the authentication token associated with the user. Typically, there is one module for
each ’challenge/response’ based authentication (auth) type.

session
this module type is associated with doing things that need to be done for the user before/after they can be given service. Such
things include the logging of information concerning the opening/closing of some data exchange with a user, mounting directories,
etc.

The third field, control, indicates the behavior of the PAM-API should the module fail to succeed in its authentication task. There
are two types of syntax for this control field: the simple one has a single simple keyword; the more complicated one involves a
square-bracketed selection of value=action pairs.

For the simple (historical) syntax valid control values are:

required
failure of such a PAM will ultimately lead to the PAM-API returning failure but only after the remaining stacked modules (for this
service and type) have been invoked.

requisite
like required, however, in the case that such a module returns a failure, control is directly returned to the application. The
return value is that associated with the first required or requisite module to fail. Note, this flag can be used to protect against
the possibility of a user getting the opportunity to enter a password over an unsafe medium. It is conceivable that such behavior
might inform an attacker of valid accounts on a system. This possibility should be weighed against the not insignificant concerns
of exposing a sensitive password in a hostile environment.

sufficient
success of such a module is enough to satisfy the authentication requirements of the stack of modules (if a prior required module
has failed the success of this one is ignored). A failure of this module is not deemed as fatal to satisfying the application that
this type has succeeded.

optional
the success or failure of this module is only important if it is the only module in the stack associated with this service+type.

include
include all lines of given type from the configuration file specified as an argument to this control.

而所有的pam的方法都在/lib64/security/ 目录下,查询到登录验证是通过pam_tally2这个来进行的。通过man pam_tally2找到了很多对应的方法。因为之前查了很多网上的方法都是只针对普通用户的,不针对root用户的。root的方法跟普通的是不一样的。从这个来看以后还是得多看man帮助。   下面这个就是修改的system-auth,这是修改了auth部分的第2行而已。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
cat /etc/pam.d/system-auth
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth required pam_tally2.so deny=3 onerr=fail no_magic_root even_deny_root unlock_time=120 root_unlock_time=120
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid &gt;= 500 quiet
auth required pam_deny.so

account required pam_unix.so
account sufficient pam_succeed_if.so uid &lt; 500 quiet
account required pam_permit.so

password requisite pam_cracklib.so try_first_pass retry=3
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
password required pam_deny.so

session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so

水电改造 这个是最重要的隐蔽工程。为了防止工长的线不好,我都是自己来买电线。都是买 的海燕的,本来想买熊猫的,可是北京好像没有这个品牌卖的。

  其次,要考虑好家里走几路线,走的路数越多,那总米数就越多。所以这个也是需 要权衡的。我们家总共就60平,走了5路线,分别为灯,厨 房,卫生间,其他插 座,空调。确定好这些之后,我们就要买漏电保护器和空开,空开有2P和1P的。漏 电保护器一般要占4个位置,2P的空 开一般是占2个位置,总共买了3个2P和2个 1P,总共要占用12个位置,所以买了一个13位的强电箱。电路这个东西是很重要 的,所以还 是买有点品牌的东西。一般是西门子,ABB,国产的比较好的也行。反正我自己买的是ABB。但是其实ABB做的好是高压电气的产品。 为了防止买到假货,这些电相关的东西(漏电保护器,空开,电箱,电线)都是在该死的居然之家买的。 东西买好了,然后电工就开工了。电工首先跟你探讨好哪些地方放开关,哪些地方 用4平方线,哪些是2.5平方线,那些地方放空调和热水器, 水管怎么走,热水管 怎么走。这些都是需要有图的。 等确定好这些后,电工就开始弹线,弹线后你确定位置后就可以开始开槽然后布线 了。 需要注意的是,卫生间和厨房最好所有线都从房顶走,因为这2个地方容易漏 水,如果你埋地下,那以后万一要检修的话就麻烦大了。 看我们家卫生间顶上的这些水管。 同时在墙上开槽千万不能开横槽,所以你知道这个特点的话,所以插座分布上下同 一条线上分布的话会比较省线省钱。 另外一个是尽量不要走双路开关,我个人觉 得没什么用,而且非常费线费钱,如果非要实现这种功能,现在有一种无线开关都 可以达到这样的功能。 在水电工完工后,需要对每个地方的线路都要照相好。不然以后要在墙上打孔就得 注意了。下面这个是我们家卫生间一面墙的走线,左边是水路, 右边是电路。而 现在水电工为了方便,所以所有水路都是用的热水管的PPR材料。其实我问过,2个 价钱也都没有差别多少。为了检查水电,我 从管的真伪,走向,线的真伪都查过 了。最终还是非常肯定我们家这位水电工,以后这方面的活直接找他就是了。 我们家电表箱附近的走向。基本所有主线都是用的4平方线。 在水电好了之后就是最牛的工种瓦工开始开工了,这个时候也是比较乱的时候。在 这前需要确定好哪些地方贴瓷砖,什么样的瓷砖。为了这个可是 跑了无数次的各 种市场。最终还是在闽龙买的便宜砖。团购会上也有卖瓷砖的,但是这上面的一般 都是大路活,没有我们家要求的仿古砖,所以必 须自己去淘。有2个品牌的产品精 艺陶和罗马瓷砖。但是看了下价格都偏贵,最便宜的每平米都要100元以上,可瓷 砖这个东西并没有多大的技 术含量。所以只要有自己的测试标准就可以了。我个 人的标准是四周平准度和是否吸水以及硬度。 这些技术标准是比较好确定的,但是要选定风格对应的瓷砖确实难事啊。厨房四周 墙面的砖是否一样,是否需要腰线,砖的大小如何确定,是否需 要斜铺,从厨房 到厨房阳台如何过度,从厨房到客厅如何过度,卫生间相对简单点。 下面这个是我们家厨房的墙砖。最后还送了点垃圾砖,这个是用来铺在橱柜后面 的。所以在这个时候我们其实要把橱柜给定好了。再下面是我们橱 柜设计师的设 计草图。应该说德斯曼的冉师傅是我碰到几个设计师里面最靠谱的,他还对我们家 厨房的电线如何布线,下水,洗菜盆的安放位置都 给考虑好了,而且还给了很好 的意见。 橱柜设计草图。 但是其实瓦工刚进场的时候,马上需要做的是做防水,这个也是非常重要的。不然 以后漏水到楼下就有点你头疼的了。好多朋友只知道做防水都是 用的东方雨虹, 可东方雨虹有很多种不同的型号,有好仕途,吉仕途,水立顿,还有柔性的,通用 型的,各个不同的差别可是非常大的。但是我的 看法是用柔性的比较好,最好是 水立顿,其实也没多少钱,一个卫生间用一桶足够了,当然我们家卫生间就4平方米。 我们家瓦工一开始用的吉仕途101,后来媳妇说这刷的什么呀都没到位,于是工长又买了一桶水立顿来刷了,又刷了1/3把。 防水不光地面要做,还有墙面最好做到2米的样子,这样才能保证洗澡水啥的不会 流到楼下去。在做完防水后要进行防水实验和拉毛。 防水实验我们家就拿沙袋把所有孔和门口全部都堵上,然后进行放水实验,放了大 概有10厘米高的水,这样做了大概有3天时间,做防水实验可 一定要跟楼下打好招 呼,留个电话,不然一旦真漏水了才能尽快补上。 我们家瓦工最让我媳妇恼火的就是拉毛,跟网上标准拉毛的照片都不一样,但是瓦 工老说就按他们的来,结果实在扭不过我媳妇,按照她的照片又 重新拉了一次。 可就这样让我媳妇对于瓦工的印象差了很多。其实我们家瓦工的活确实不错,贴的 砖都没有空鼓,对线也都非常直。就是对于美观没啥概念,都要说好了,不说好的地方虽然贴的很直,但是明显半块砖的应该贴外面,他却贴到了里面。 瓦工在我们家另外一个比人家多的工作就是贴马赛克和找拱形。我们家所有的室内 门洞都是拱形的,这个可把瓦工说害苦了。但是最终的效果还是 非常不错的。 瓦工最重要的活就是贴砖和找平了,这2个做不好,那就非常难受了。

从第一个开始说起吧。 需要在确定工长前确定好的事情: 暖气: 这个制造过程会比较长,而且要上门上次。第一次上门弄好截门和确定暖气线路走向。所以最还先确定。 对于暖气的采购,我们跑了不下5个会场,有家博会的,有森德特卖会的,还有居然和百安居, 最后我们就去了ljlj买的诺奥罗的,暖气片有分钢的和铜铝的,如果是自采暖的,那适合用铜铝的,因为这个加热快,冷的也快,也就是比热容低,而集中供暖 的还是钢的更好点。可钢的也分好多不同的钢材,老实说我也不清楚哪个好点。最后选了比森德低一个档次的怒奥罗。 但是奴奥罗内部也分各种型号和子品牌,所以还是得小心才是。 暖气片是按片数来收费的,然后安装费是按组来收费的(好像一组暖气片安装费是150还是140来着,所以一组暖气片多点还是比较合算),连接管线是每组2米免费,超过的单独收费。最后我们在管线设计上很好的控制住了总体预 算。 暖气片这个项目是7分材料3分安装,所以让给推荐个好的安装师傅也是重要的。我们那个安装师傅据说是给ljlj老总家安装的,至少在我看来活 还是不错的。 暖气安装一般分为2次,分别为:拆除旧暖气,确定新的暖气安放位置和暖气管走向,安装截门(这个非常重要,这个安装好了,暖气片啥时候来安装 都可以了,而不用非等到供暖季节结束再安装了。)。 第2次上门就根据上次确定的位置来进行走线和安装了。 师傅正在绕线中 小工准备挂暖气片中。 窗户: 这个也是制造工期比较长,同时也是隐藏项目非常多的一个项目。 在确定工长的时候最好确定好窗户,现在主要有断桥铝和塑刚两种,断桥铝平开上悬的密封性还是比塑刚推拉的要高很多。但是得注意,必须都是钢化 玻璃,而且像北方地区还得是双层钢化中空玻璃。由于钢化玻璃的制造时间就要15天左右,所以必须要提前确定好。 从最后使用的情况来看,断桥铝的密封性确实高。但是看到七彩门窗有一种通风又隔音的窗户,不知道原理是啥,据说还挺贵,还好我们家不在路边不需要买这样的。 为了这个我们也跑了3次各种不同的市场,最后是在团购会上定的。 而窗户是一般装修中被坑的大头。一般报价650以内的断桥铝的基本都是假的。 下面这个就是之前我们断桥铝窗户的报价单。 可以看到很多项啊。 玻璃 立柱 横栏 五金件 密封胶 玻璃胶 隐形纱窗 定位器等等,如果你的报价没有包含上面所有,那就危险了。这个断桥铝市场在北京基本都被江西人给垄断了。其实这东西成本就那些,可就是价格不 透明,而且很多都不规范,导致很容易被黑。 要不是有有团购会客服,我们家也许也会被坑。 玻璃说是200一平,可要是不懂,到时候说钢化要价钱,升级成浮法玻璃还要加钱。 上门来测量的时候刚好不在,回来一算居然好多都是错误的。居然还把1米2的长度算成1米5,这要都那么算,得多收多少啊。安 装的师傅来来回回5次,不是玻璃有问题,就是颜色有问题。真是够乱的,从这里就看到前期测量的人得多重要,要是测量的胡乱来,那安装必定 出问题,我们家窗户和室内门就是反面的典型例子。 但是一般装修行业负责测量的都是老板他们家亲戚,而安装工人才是从外面找的,我们家安装的武师傅还是很不错的,就是测量的人太2B了。 下面这个是武师傅安装窗户中 防盗门: 如果不是定做的话很快,但是要定做的话大品牌都需要一个月的时间。 这个就看了两次,定了盼盼的防盗门,都是标准尺寸里面最大的。拆门是30元,卖给收破烂的是100元。因为我们家门洞是一个非标准尺寸的,比 一般的要大,所以之前考虑了很久是不是要做非标准的字母门,最后还是算了,一个是价格高,另外是工期太长了。 防盗门一般都是看防盗级别,分甲乙丙丁,可这个有锁的防盗级别和门本身的防盗级,这个你可得问清楚了。但是一般家用的随便点也就成了。   确定工长: 不是说地域歧视,由于现在油工瓦工水电一般都是工长的亲戚邻居啥的,所以为了干活好点的,最好还是找江苏和安徽的。 这河南和山东的瓦工干活还是相对糙一点,一方水土养一方人嘛。 在确定工长的时候还是没有必要找很专业的装修公司,一般的设计师还不如自己来呢。 决定一个工长的好坏,其实从他的量房开始,到出来报价就能得知个一二。经常有些工长一开始报价不高,但是后期增项太多,这样的就不太靠谱了。 所以早期能够很好的量房,跟你确定好设计方案,然后报价又报的非常细致的,基本可以考虑下。最好去他们的其他的施工工地上看看就可以确定下 了。 确定付款方式: 最好是最后验收后付款,但是你找大的装修公司一般都是一开始70%的付款,这样其实很危险的。但是水电部分是单收的,水电做完验收完成就要付款。 最后看他活多不多,如果活太多的工长,那样他根本没有精力照顾到所有人家,这样难免这当中会有各种沟通不及时。 下面这个就是我们之前工长报价的截图,然后他也把他的身份证让我拍照了,这个就不展示了。 拆: 这个都是按平米和米数计算钱的,没多少技术含量,就是尽量别在邻居休息时间干 活,这个期间是整个家里最乱的时候,也 会产生很多建筑垃圾。这个 时候就要找 好收垃圾的了。一般一辆1.5吨的车是300, 像我们家拆的多的话要3车左右。但是 后期还是会有很多垃圾,所以必须压一部分钱,越多越好,我们家压100就少了。

  拆也分水平,有的人可以拆的只剩毛坯房的样子,有的人却连表面的瓷砖什么都不 会拆,所以这个合同里也得注意。 另外一个是拆的时候要注意封闭好排风管道和暖气管道。 不然会有好多后期隐患。同时注意拆的时候别把水管和暖气以及下水道给堵了,这个瓦工也要注意。

0%