unable to make backup link of `./usr/bin/chattr’ before installing new version: Operation not permitted

在公司服务器上使用apt-get upgrade遇到这个问题。通过查阅资料,发现问题的关键在于,chattr需要升级但是chatter无法被删除。

使用:

lsattr /usr/bin/chattr

发现chattr的属性包括i和a,i代表immutable,不可更改,a代表append only,只能增加。这样问题就清楚了,chattr不可更改导致无法升级,至于出现这个情况的原因也不清楚。于是使用chattr更改自己的i和a属性

chattr -i /usr/bin/chattr
chattr -a /usr/bin/chattr

没有任何效果,而且提示我chattr的用法。出现这种提示的原因往往都是用错了指令,我反复确认指令都没有错。

于是在本地机器上验证chattr的属性,发现是没有i和a属性的,而且上述指令也可以正常工作。

实在没有办法,使用sftp将本地的chattr传到服务器上,命名为chattr_new,再用传上去的chattr_new更改chattr的属性

chattr_new -i /usr/bin/chattr
chattr_new -a /usr/bin/chattr

然后在执行apt-get upgrade,没有任何报错。

注:
chattr是用来防止误删操作的,即使是root用户,在chattr为文件添加了i属性后,root用户也无法删除。
lsattr则是用来查看文件的这方面的属性的。

Ubuntu下Docker安装遇到的问题记录

Ubuntu下安装docker的几点问题记录

1.要注意系统的内核和版本是否支持,内核最低要求为3.10,版本最低为12.04,这两点必须同时满足。
使用uname -a查看系统内核
Linux jiang-PC 4.4.0-72-generic #93-Ubuntu SMP Fri Mar 31 14:07:41 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
这里4.4.0-72则是内核的版本号
使用cat /etc/issue查看系统版本号
Ubuntu 16.04 LTS \n \l

2.注意查看docker的日志记录
使用service docker start(或者systemctl docker start)启动docker时,没有任何输出提示,但是往后执行可能就发现docker没有正常启动,但是又不知道问题出在哪里。/var/log/upstart/docker.log记录了docker启动日志。

3.AppArmor的问题
AppArmor enabled on system but the docker-default profile could not be loaded。出现这个问题时,使用
apt-get install apparmor即可解决

附一段webserver的Dockerfile:

# 这是服务器环境的Docker,会安装好php,nginx等环境,并且进行配置
# author:jiangpengfei
# date: 2017-04-19

FROM ubuntu:16.04
RUN apt-get update \
    && DEBIAN_FRONTEND=noninteractive apt-get install -y software-properties-common \
    && DEBIAN_FRONTEND=noninteractive apt-add-repository -y ppa:nginx/stable \
    && DEBIAN_FRONTEND=noninteractive apt-get update \
    && DEBIAN_FRONTEND=noninteractive apt-get install -y nginx
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y php7.0
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y php-redis
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y php-mysql
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y php-imagick \
    && apt-get autoremove \
    && apt-get autoclean
# 上面是从ubuntu的源中安装必要组件,下面开始进行配置
RUN mkdir /var/www/family \
    && mkdir -p /var/log/nginx/access/ \
    && touch /var/log/nginx/access/default.log

COPY family /etc/nginx/sites-enabled 
COPY start.sh /usr/local/bin
EXPOSE 9090 81
CMD ["start.sh"]