逛广州天河公园

吃过早餐后,约九点多,躺在床上时,我突然想去看看新闻里提到的天河公园“相亲角”。我先在网上查了一下出行的线路,从附近的“沐陂村口”坐496路公交车到“科韵路站”下车,走一小段路就能到了。

差不多十点时,我上了公交车,当走到天河公园的“小东门”时,约十点半。来的路上,在建业路那,科技园区里有“国家级”的科技公司字样。路的另一边建筑物有中国银行、建设银行和广州酒家等。

进到公园里,游人不少,各个年龄段的都有:青年、中老年;牵着小孩手的、推婴儿车的,也有护着不能自主走路老人的;有男女一起的、有亲戚一大家的、也有一个人跑步健身的。公园里树多、草坪绿,空气挺好的。路边的,一般是多茎多须的榕树;偶尔也可以看到小掇的竹子。我不识得路,也分不清方向,就是随着较多的人流走。走到一个湖,湖的一边有老年人跳广场舞,另一边是很多小孩往湖边扔食物,引得水里那些暗红的身影围绕着游动,时不时会有一条鲤鱼冒出水面,张开大嘴,吞下食物,投喂鱼食的小孩看到后会很高兴。我再往前走,看到一个小卖部,里边写着鱼料3元一包。前边正中是个多层级的平台,每上几个台阶就是一个平台,就像一个多层的蛋糕。每个平台里隔一段会有一桌围聚的人:有打纸牌的、也有下象棋的。越往上走,越接近原生态的山。路是人走出来的小土路,四通八达,想走哪儿就去哪。公园设有几个公厕,挺方便的。

我感觉我已经走了大半圈,从东门到北门,再到了小卖部,没看到新闻里提到“人山人海的相亲角”。我就去问路人。

“请问,‘相亲角’应该怎么走?”
“左边沿路,往上走,就会看到的了。现在没到时间,要12:30左右才会挂(信息)牌,下午两点左右的时候人较多。你再在公园里转一转。”
“‘相亲角’这么有名,为什么没有在公园的地图立牌里标出呢?”
“哪里出名。有的(信息)挂了很久了。你不要加群啊,小心被骗。”路人好心地提醒我。
“是不是这里?我之前经过一个小广场,有两边立着几条像晾衣绳的杆子,里边有不少人踢毽子。”我指着我手机上拍的一张相片问。
"是的,是这里。那些线是用来挂征婚信息纸张的。"

我没等到十二点半“相亲角”开放,因为肚子饿,原路搭496路公交车返回了。

路边的银行

科韵路,科技园

天河公园,小东门

公园路边的榕树

广东技术师范大学

湖

小土路

相亲角

到新塘综合菜市场买饺子

上午约十点,我从出租屋出发,打算走路到新塘菜市场,找“袁小饺”店,因为我在“美团”上买了一份5块钱的15个“玉米鲜肉云吞”。

我沿“沐陂大街”,由西向东,一直走到“沐陂公园”那儿。我停了下来,站在立交桥下,查看手机app上的地图。我在犹豫:前边有条分岔路:一条上坡,沿立交桥下走;另一条是需要穿过桥洞,不知道是能到哪。我问附近一个站着,戴着施工安全帽的人,他回答说往上坡走就行。我走出立交桥后,看到了路边建筑有“天河星作”的字样,知道到“合景路”了。我再往前走一小段,看到了“私立华联学院”的大门。这附近有“沐陂村”的公交站。然后我再走约五百米,左转进入“酉约新村大街”,再拐两个弯,看到了座公祠:“惠言简公祠”。我看了两遍,才记下了名字。

公祠旁边有菜市的入口,我走进,看到门附近有一间铺的招牌是“客家豆腐”,摆着有水豆腐卖。我继续往前走,边走边四周看,找“袁小饺”的招牌。走不一会儿,看到了。这是一间如报亭般的玻璃房,里边有三个工作人员。我在窗口打了招呼,说从“美团”下的单子。工作人员用手机扫码核销后,将饺子装进一条胶袋里递出来,我接住。我继续在市场里逛。菜市场很大,估计有几千平方米,顶栅好像是铁皮的,半开放的。这里有很多档(铺)位。有卖鱼的、卖鸡的、卖青菜的,也有卖干货,卖包装食品的。档位上基本上摆满了货品,逛市场的人不多。我倒回到之前进来时的豆腐铺。买了一块“嫩豆腐”,1.5元钱。那里还有2元/块的“老豆腐”。老板熟练地用一张小铁皮将水豆腐从托板里铲开,放进胶袋里。

我走出市场,找到停在路边的共享单车,准备骑回出租房。上车之前,我特意将装着豆腐和饺子的胶袋各自打上活结,想避免路上颠簸将饺子抛出。骑了约15分钟,回到了。果然,有几个饺子从单车的车筐篮的间隙里漏出,挂着。豆腐的情况不太好,因为颠簸,将成整块的豆腐,给震碎、震裂了。我心疼地提起豆腐的袋子,四周看了个遍,评估约有一半的豆腐还是成型的。我只想到,不让豆腐给颠簸的抛出车筐篮,但没料到豆腐是软的,是经不起震动的。

我煮开了水,放入八个饺子,再将在“美团”上买的秋葵放到锅里。煮几分钟,最后放进水豆腐。即使有些是碎成小块的豆腐,我都放进锅里了,一锅熟。煮好后,我托着锅底,夹豆腐吃,觉得还不错:咬开的豆腐不会有小坑,口感嫩滑,不会布,有豆腐味;汤底也不会煮成豆浆那般。不知道是否因为我过久没吃水豆腐了,这次在广州吃的,觉得比在和平的东水豆腐还要好点。

“私立华联学院”的门口

用 roudcube webmail 的 password plugin 更改密码后 postfix 报错 SQL prepare failed: disk I/O error

环境:服务端是 postfix + sqlite3 ,当 roundcube webmail 配置了 password 插件后,用户能更改密码,但之后 postfix 报错,错误信息是 SQL prepare failed: disk I/O error 。影响的结果是,收不了邮件。

原因:roundcube 的 sqlite 连接配置时,使用了 PRAGMA journal_mode = WAL ,但 postfix 不支持。

尝试:可将 sqlite 的 journal_mode 更改回原来的 delete 。如在Linux里执行命令: sqlite3 /var/vmail/postfixadmin.db 'PRAGMA journal_mode=delete;'

# sqlite3 /var/vmail/postfixadmin.db
SQLite version 3.40.1 2022-12-28 14:03:47
Enter ".help" for usage hints.
sqlite> PRAGMA journal_mode;
delete

参考:

在 debian 12 安装 postfix + dovecot + sqlite3 + postfixadmin + roundcube

需求:在 debian 12 系统里搭建用 postfix 和 dovecot ,用 sqlite3 存储,postfixadmin 管理,roundcube 作为 webmail 。

步骤:

参考的配置文件内容:

# postconf -n
alias_database = hash:/etc/aliases
alias_maps = hash:/etc/aliases
append_dot_mydomain = no
biff = no
compatibility_level = 3.6
inet_interfaces = all
inet_protocols = all
mailbox_size_limit = 0
mydestination = $myhostname, mail.drsvps.2xinxian.top, localhost.drsvps.2xinxian.top, , localhost
myhostname = mail.drsvps.2xinxian.top
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
myorigin = /etc/mailname
readme_directory = no
recipient_delimiter = +
relayhost =
smtp_tls_CApath = /etc/ssl/certs
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem
smtpd_tls_key_file = /etc/ssl/private/postfix.key
smtpd_tls_security_level = may
virtual_alias_maps = sqlite:/etc/postfix/sqlite_virtual_alias_maps.cf, sqlite:/etc/postfix/sqlite_virtual_alias_domain_maps.cf, sqlite:/etc/postfix/sqlite_virtual_alias_domain_catchall_maps.cf
virtual_mailbox_domains = sqlite:/etc/postfix/sqlite_virtual_domains_maps.cf
virtual_mailbox_maps = sqlite:/etc/postfix/sqlite_virtual_mailbox_maps.cf, sqlite:/etc/postfix/sqlite_virtual_alias_domain_mailbox_maps.cf
virtual_transport = lmtp:unix:private/dovecot-lmtp
# cat /etc/postfix/sqlite_virtual_alias_maps.cf
dbpath = /var/vmail/postfixadmin.db
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
# cat /etc/postfix/sqlite_virtual_alias_domain_maps.cf
dbpath = /var/vmail/postfixadmin.db
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = printf('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
# cat /etc/postfix/sqlite_virtual_alias_domain_catchall_maps.cf
dbpath = /var/vmail/postfixadmin.db
query  = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = printf('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
# cat /etc/postfix/sqlite_virtual_domains_maps.cf
dbpath = /var/vmail/postfixadmin.db
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
# cat /etc/postfix/sqlite_virtual_mailbox_maps.cf
dbpath = /var/vmail/postfixadmin.db
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
cat /etc/postfix/sqlite_virtual_alias_domain_mailbox_maps.cf
dbpath = /var/vmail/postfixadmin.db
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = printf('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'
# postconf -M
smtp       inet  n       -       y       -       -       smtpd
pickup     unix  n       -       y       60      1       pickup
cleanup    unix  n       -       y       -       0       cleanup
qmgr       unix  n       -       n       300     1       qmgr
tlsmgr     unix  -       -       y       1000?   1       tlsmgr
rewrite    unix  -       -       y       -       -       trivial-rewrite
bounce     unix  -       -       y       -       0       bounce
defer      unix  -       -       y       -       0       bounce
trace      unix  -       -       y       -       0       bounce
verify     unix  -       -       y       -       1       verify
flush      unix  n       -       y       1000?   0       flush
proxymap   unix  -       -       n       -       -       proxymap
proxywrite unix  -       -       n       -       1       proxymap
smtp       unix  -       -       y       -       -       smtp
relay      unix  -       -       y       -       -       smtp -o syslog_name=postfix/$service_name
showq      unix  n       -       y       -       -       showq
error      unix  -       -       y       -       -       error
retry      unix  -       -       y       -       -       error
discard    unix  -       -       y       -       -       discard
local      unix  -       n       n       -       -       local
virtual    unix  -       n       n       -       -       virtual
lmtp       unix  -       -       y       -       -       lmtp
anvil      unix  -       -       y       -       1       anvil
scache     unix  -       -       y       -       1       scache
postlog    unix-dgram n  -       n       -       1       postlogd
maildrop   unix  -       n       n       -       -       pipe flags=DRXhu user=vmail argv=/usr/bin/maildrop -d ${recipient}
uucp       unix  -       n       n       -       -       pipe flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail     unix  -       n       n       -       -       pipe flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp      unix  -       n       n       -       -       pipe flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -t$nexthop -f$sender $recipient
scalemail-backend unix - n       n       -       2       pipe flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
mailman    unix  -       n       n       -       -       pipe flags=FRX user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}
submission inet  n       -       n       -       -       smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# doveconf -n
# 2.3.19.1 (9b53102964): /etc/dovecot/dovecot.conf
# Pigeonhole version 0.5.19 (4eae2f79)
# OS: Linux 6.1.0-9-amd64 x86_64 Debian 12.0 ext4
# Hostname: mail.drsvps.2xinxian.top
auth_mechanisms = plain login
disable_plaintext_auth = no
first_valid_uid = 150
last_valid_uid = 150
mail_gid = mail
mail_location = maildir:/var/vmail/%d/%n
mail_privileged_group = mail
mail_uid = vmail
namespace inbox {
  inbox = yes
  location =
  mailbox Drafts {
    special_use = \Drafts
  }
  mailbox Junk {
    special_use = \Junk
  }
  mailbox Sent {
    special_use = \Sent
  }
  mailbox "Sent Messages" {
    special_use = \Sent
  }
  mailbox Trash {
    special_use = \Trash
  }
  prefix =
}
passdb {
  args = /etc/dovecot/dovecot-sql.conf.ext
  driver = sql
}
protocols = " imap lmtp pop3"
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0660
    user = postfix
  }
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    group = postfix
    mode = 0600
    user = postfix
  }
}
ssl_cert = </etc/ssl/certs/postfix.pem
ssl_client_ca_dir = /etc/ssl/certs
ssl_dh = # hidden, use -P to show it
ssl_key = # hidden, use -P to show it
userdb {
  args = /etc/dovecot/dovecot-sql.conf.ext
  driver = sql
}
# cat /etc/nginx/sites-enabled/postfixadmin
server {
        listen 8082 default_server;
        listen [::]:8082 default_server;

        # SSL configuration
        #
        listen 8083 ssl default_server;
        listen [::]:8083 ssl default_server;

        ssl_certificate     /etc/ssl/certs/postfix.pem;
        ssl_certificate_key /etc/ssl/private/postfix.key;

        root /opt/www/postfixadmin/public;

        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;

        server_name _;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
               include snippets/fastcgi-php.conf;
               fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        }
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #       deny all;
        #}
}
cat /opt/www/postfixadmin/config.local.php
<?php
$CONF['configured'] = true;
$CONF['database_type'] = 'sqlite';
$CONF['database_name'] = '/var/vmail/postfixadmin.db';

$CONF['aliases'] = '0';
$CONF['mailboxes'] = '0';
$CONF['domain_quota'] = 'NO';
$CONF['password_expiration'] = 'NO';
$CONF['setup_password'] = '$2y$10$n6BEmoey9hBdqRiXt.aI2OR6KwY2SObjH88ibJYX2hcMWfetgWQIe';
# cat /etc/nginx/sites-enabled/mail
server {
        listen 80;
        listen [::]:80;

        # SSL configuration
        #
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;

        ssl_certificate     /etc/ssl/certs/postfix.pem;
        ssl_certificate_key /etc/ssl/private/postfix.key;

        root /opt/www/mail/public_html;

        # Add index.php to the list if you are using PHP
        index index.php index.html index.htm index.nginx-debian.html;

        server_name mail.drsvps.2xinxian.top;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
               include snippets/fastcgi-php.conf;
               fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #       deny all;
        #}
}

参考命令:

    9  hostnamectl set-hostname mail.drsvps.2xinxian.top
   10  vi /etc/hosts
   11  exec bash
   12  apt update
   13  man useradd
   14  man useradd
   15  useradd -r -u 150 -g mail -d /var/vmail -s /sbin/nologin -c "Virtual Mail User" vmail
   16  ls -l /var/
   17  mkdir -p /var/vmail
   18  chmod -R 770 /var/vmail
   19  chown -R vmail:mail /var/vmail
   20  apt install postfix postfix-sqlite
   21  apt install php-fpm nginx php-imap php-mbstring
   22  ls
   23  ls
   24  more exec_recipe.log 
   25  ls
   26  more recipe_-398.log 
   27  ls
   28  ls
   29  cd /etc/nginx/sites-enabled/
   30  ls
   31  cp default postfixadmin
   32  vi postfixadmin 
   33  systemctl restart nginx
   34  cd /opt/
   35  ls
   36  mkdir www
   37  cd www
   38  ls
   39  wget https://github.com/postfixadmin/postfixadmin/archive/refs/tags/postfixadmin-3.3.13.tar.gz
   40  tar -xzvf postfixadmin-3.3.13.tar.gz 
   41  mv postfixadmin-postfixadmin-3.3.13 postfixadmin
   42  cd postfixadmin
   43  ls
   44  cp -a config.inc.php config.local.php 
   45  vi config.local.php 
   46  vi config.local.php 
   47  vi config.local.php 
   48  cd ..
   49  chown -R www-data:www-data postfixadmin
   50  touch /var/vmail/postfixadmin.db
   51  chown vmail:mail /var/vmail/postfixadmin.db
   52  ls -l /var/vmail/postfixadmin.db 
   53  usermod -a -G mail www-data
   54  chmod 770 /var/vmail/postfixadmin.db 
   55  ls
   56  cd postfixadmin
   57  ls
   58  vi /etc/nginx/sites-enabled/postfixadmin 
   59  systemctl restart nginx
   60  vi config.local.php 
   61  cd ..
   62  ls
   63  ls -l
   64  cd postfixadmin
   65  ls
   66  vi config.local.php 
   67  ls -l /var/vmail/postfixadmin.db
   68  apt install php-sqlite
   69  apt install php-sqlite3
   70  systemctl restart php8.2-fpm
   71  cd public/
   72  ls
   73  cd ..
   74  ls
   75  mkdir templates_c
   76  chown -R www-data:www-data templates_c/
   77  vi /etc/postfix/sqlite_virtual_alias_maps.cf
   78  vi /etc/postfix/sqlite_virtual_alias_domain_maps.cf
   79  vi /etc/postfix/sqlite_virtual_alias_domain_catchall_maps.cf
   80  vi /etc/postfix/sqlite_virtual_domains_maps.cf
   81  vi /etc/postfix/sqlite_virtual_mailbox_maps.cf
   82  vi /etc/postfix/sqlite_virtual_alias_domain_mailbox_maps.cf
   83   
   84  postconf -e "virtual_mailbox_domains = sqlite:/etc/postfix/sqlite_virtual_domains_maps.cf"
   85  postconf -e "virtual_alias_maps =  sqlite:/etc/postfix/sqlite_virtual_alias_maps.cf, sqlite:/etc/postfix/sqlite_virtual_alias_domain_maps.cf, sqlite:/etc/postfix/sqlite_virtual_alias_domain_catchall_maps.cf"
   86  postconf -e "virtual_mailbox_maps = sqlite:/etc/postfix/sqlite_virtual_mailbox_maps.cf, sqlite:/etc/postfix/sqlite_virtual_alias_domain_mailbox_maps.cf"
   87  postconf -n
   88  postconf -e "smtpd_sasl_type = dovecot"
   89  postconf -e "smtpd_sasl_path = private/auth"
   90  postconf -e "smtpd_sasl_auth_enable = yes"
   91  postconf -e "smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination"
   92  postconf -e "virtual_transport = lmtp:unix:private/dovecot-lmtp"
   93  postconf -e "smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem"
   94  postconf -e "smtpd_tls_key_file = /etc/ssl/private/postfix.key"
   95  postconf -n
   96  vi /etc/postfix/master.cf
   97  apt-get install dovecot-imapd dovecot-lmtpd dovecot-pop3d dovecot-sqlite
   98  vi /etc/dovecot/conf.d/10-mail.conf
   99  vi /etc/dovecot/conf.d/10-auth.conf
  100  vi /etc/dovecot/conf.d/auth-sql.conf.ext 
  101  vi /etc/dovecot/dovecot-sql.conf.ext
  102  vi /etc/dovecot/dovecot-sql.conf.ext
  103  vi /etc/dovecot/conf.d/10-ssl.conf
  104  vi /etc/dovecot/conf.d/10-master.conf
  105  systemctl restart dovecot
  106  journalctl -u dovecot
  107  journalctl -u dovecot -n 20
  108  journalctl -u dovecot -n 20 --no-pager
  109  wget -O -  https://get.acme.sh | sh -s email=my@example.com
  110  /root/.acme.sh/acme.sh --issue -d mail.drsvps.2xinxian.top --webroot /var/www/html 
  111  ln -s /root/.acme.sh/mail.drsvps.2xinxian.top_ecc/fullchain.cer /etc/ssl/certs/postfix.pem
  112  ln -s /root/.acme.sh/mail.drsvps.2xinxian.top_ecc/mail.drsvps.2xinxian.top.key /etc/ssl/private/postfix.key
  113  systemctl restart dovecot
  114  ss -anp | grep :110
  115  cd ..
  116  ls
  117  wget https://github.com/roundcube/roundcubemail/releases/download/1.6.9/roundcubemail-1.6.9-complete.tar.gz
  118  tar -xzvf roundcubemail-1.6.9-complete.tar.gz 
  119  mv roundcubemail-1.6.9 mail
  120  chown -R www-data:www-data mail
  121  ls
  122  cd ..
  123  ls
  124  cd www
  125  ls
  126  touch round.db
  127  chown www-data:www-data round.db
  128  ls
  129  mv mail /var/www/html/
  130  mv round.db /var/www
  131  vi /etc/nginx/sites-enabled/default 
  132  systemtl restart nginx
  133  systemctl restart nginx
  134  exit
  135  ls
  136  vi /etc/nginx/sites-enabled/default 
  137  systemctl restart nginx.service 
  138  tail /var/log/nginx/error.log 
  139  tail /var/log/nginx/access.log 
  140  cd /var/www/html/mail/
  141  ls
  142  ls -l
  143  cd config/
  144  ls
  145  cp -a config.inc.php.sample config.inc.php
  146  tail /var/log/nginx/error.log 
  147  cd ..
  148  ls
  149  vi index.php 
  150  cd config/
  151  ls
  152  mv config.inc.php config.inc.php.bak
  153  php
  154  ls
  155  cd ..
  156  ls
  157  php index.php 
  158  tail logs/
  159  ls -l logs/
  160  tail /var/log/nginx/error.log 
  161  tail /var/log/php8.2-fpm.log 
  162  vi /etc/nginx/sites-enabled/default 
  163  systemctl restart nginx
  164  apt install php-dom php-xml php-intl
  165  systemctl restart php8.2-fpm.service 
  174  vi mail/config/config.inc.php
  197  vi /etc/nginx/sites-enabled/default 
  198  systemctl restart nginx
  199  vi /etc/nginx/sites-enabled/default 
  200  systemctl restart nginx
  201  tail /var/log/nginx/error.log 
  203  ls
  204  vi /etc/nginx/sites-enabled/default 
  206  systemctl restart nginx
  207  tail /var/log/nginx/error.log 
  213  cd /etc/nginx/sites-enabled/
  214  ls
  215  cp postfixadmin mail
  216  vi mail 
  217  systemctl restart nginx
  218  tail /var/log/nginx/error.log 
  219  ls -l /opt/www/mail/public_html/
  220  vi mail 
  221  systemctl restart nginx
  222  ls -l /opt/www/mail/
  223  tail /var/log/nginx/error.log 
  224  vi mail
  225  systemctl restart nginx
  226  cd /opt/www/
  227  ls
  228  cd mail/
  229  ls
  230  ls
  231  vi config/config.inc.php
  232  vi /opt/www/postfixadmin/config.local.php 
  233  tail logs/errors.log 
  234  journalctl -u dovecot.service -n 20 --no-pager
  235  ls
  236  vi /etc/dovecot/dovecot-sql.conf.ext 
  237  journalctl -u dovecot.service -n 20 --no-pager
  238  ls
  239  vi /etc/dovecot/dovecot-sql.conf.ext 
  240  tail logs/errors.log 
  241  apt install sqlite3
  242  sqlite3 /var/vmail/postfixadmin.db 
  243  ls
  244  cd plugins/
  245  ls
  246  cd password/
  247  ls
  248  cp config.inc.php.dist config.inc.php
  249  vi config.inc.php
  259  ls -l /etc/ssl/private/postfix.key
  260  ls -l /root/.acme.sh/mail.drsvps.2xinxian.top_ecc/mail.drsvps.2xinxian.top.key
  261  vi /etc/dovecot/conf.d/10-master.conf 
  262  systemctl restart dovecot.service 
  263  journalctl -u dovecot.service -n 20 --no-pager
  264  chown dovecot /root/.acme.sh/mail.drsvps.2xinxian.top_ecc/mail.drsvps.2xinxian.top.key
  265  journalctl -u dovecot.service -n 20 --no-pager
  266  cd /etc/nginx/sites-enabled/
  267  ls
  268  vi mail 
  269  nginx -t
  270  nginx -s reload
  271  vi /etc/dovecot/conf.d/10-ssl.conf 
  272  vi /etc/dovecot/conf.d/10-auth.conf
  273  systemctl restart dovecot.s
  274  systemctl restart dovecot.service 
  275  vi /etc/dovecot/conf.d/10-auth.conf
  276  vi /etc/dovecot/conf.d/10-master.conf 
  279  systemctl restart dovecot.service 
  283  vi /etc/postfix/sqlite_virtual_alias_maps.cf
  284  sqlite3 /var/vmail/postfixadmin.db 
  285  ls -l /var/vmail/postfixadmin.db
  286  vi /etc/postfix/sqlite_virtual_alias_maps.cf
  287  systemctl restart postfix dovecot.service 
  288  journalctl -u postfix@-.service -n 20 --no-pager
  289  postmap -q he@drsvps.2xinxian.top sqlite:/etc/postfix/sql/sqlite_virtual_alias_maps.cf
  290  postmap -q he@drsvps.2xinxian.top sqlite:/etc/postfix/sqlite_virtual_alias_maps.cf
  297  journalctl -u postfix@-.service -n 20 --no-pager
  322  apt install postfix-sqlite
  323  ls -l a /var/vmail/
  324  journalctl -u postfix@-.service -n 20 --no-pager
  327  vi /etc/postfix/master.cf
  328  sqlite3 /var/vmail/postfixadmin.db 'PRAGMA journal_mode=delete;'
  329  cd /opt/www/mail/
  330  grep -rnw ./ -e "journal_mode"
  331  vi program/lib/Roundcube/db/sqlite.php
  332  journalctl -u postfix@-.service -n 20 --no-pager
  336  vi /etc/dovecot/conf.d/10-ssl.conf 
  337  vi /etc/dovecot/conf.d/10-auth.conf 
  338  systemctl restart dovecot
  339  vi config/config.inc.php

参考:

逛“迪卡侬”广州天河奥体店

上周三,我在沐陂街的“上海包子”买了两个包子和一杯豆浆。吃过之后,我看了下时间,不到九点。我在手机上查看了地图,显示最近的一间"迪卡侬"店,走路需要约52分钟。线路大概是:沐陂西街,车陂北路,康体路,奥体南路。

太阳挺晒的,走车陂北路时,就我一个人在走,偶尔有公交车驶过,骑电动车的人相对多些。路两边半植被、半工地的。说是公园吧,但见不到游园的人;说是工地吧,但听不到施工的噪音。路边停有不少旧的轿车,估计已经报废了,因为车身有很厚的尘,有的车甚至被牵牛花给缠上了。有点荒凉,这让我想起了游戏《半衰期:爱莉克斯》里的场景。

我走出车陂北路,到了车陂路,这才有些“城市”的感觉,因为车陂路很宽,很多车来往,过路口要等红绿灯。我继续往前走,看到地铁“黄村”站的出入口。地铁口附近停有很多的电动自行车,是不是上班族们用来接驳到出租房的?我看路牌时,一开始不知道“奥体南路”的由来。但当看到路边有弧线的大型建筑,且标有“奥林匹克体育中心”的牌子时,我才反应过来,“奥体”是它的缩写。我沿着“奥体南路”向东走,过了十字路口后,就看到标有“迪卡侬”字样的建筑了。

我没急着进店,因为我看到在店门口有张露天乒乓球台,有两个人边打着乒乓球边用广州话聊天。乒乓球台是用低围栏圈起来的,如同小的比赛场地。在乒乓球区的里边是个小篮球场,也有人在投篮。我看到围栏里标有开放的时间段,没写价格,应该是迪卡侬免费开放给公众使用的。

我进店,里边的冷气让我觉得很凉爽,才想起自己是一路顶着太阳走过来的,是挺热的。我边走边看货架侧的商品分类名称,找“男跑鞋”。找到货架后,我看到149元的鞋,是摆在明显的位置:货架的八分位区,大概在我胸口位置的高度。我顺手拿起鞋,看了一下鞋舌上的布标,产地是福建莆田。我心里不免感叹,约五年前的100元的鞋子,现在已经涨价到150元了,虽然说牌子还是这个牌子,产地也还是在国内。我在货架的尾区,看到挂有“特价”的两列鞋子,但即使是特价,也是一些较高价区款式的“打折价”,不是我想要的。我是想大众款且是平价的鞋子。款式不必新、奇,价格实惠就行。

我出了店,在门口的桌凳上坐着休息。无意间,看到在店里、店外打扫卫生的阿姨,是穿着迪卡侬的129元通勤鞋。我往回走到奥体南路,体育场侧时,看到有两个年轻人在拍录视频。我小步路过,避免影响到他们。此时,有直升机嗡嗡地朝着体育场上空飞过,划过蓝天。但不应景的是,此时我闻到一股尿骚味,估计有人趁着天黑没人,往路边的工地围档铁皮撒尿了。唉……不过,也可以理解的,因为我走路约一个小时,没看到有“公厕”的指示牌子。

当我走到车陂北路口时,受不住了,人累并且天气热。我就用手机扫码,骑了一辆“青桔”的单车往回赶路了。

前天,我在淘宝的app上看“迪卡侬”店的直播,我打字跟主播说:以前迪卡侬是“屌丝”般的我“盲选”——不知道买什么短袖衫、短裤时就买迪卡侬的;不知道穿什么鞋时,就买迪卡侬的……因为五年前,迪卡侬的东西价格便宜,质量又算好,穿着舒服。如短袖衫20元一件,能穿两年以上;100元的鞋子既可以上班时穿,周末跑步时也可以穿。那时的迪卡侬产品可以“闭着眼睛买”,即使码数买大或买小了,自己穿不合身,也可以送给家里人或亲戚朋友。现在不能闭着眼睛买买买迪卡侬了,短袖衫涨到40元一件,我要考虑一下要不要买其它牌子的了;运动鞋涨到150元一双,我也要考虑鞋子质量是不是真的比以前好了。主播回复我说,现在产品款式有升级,物价总体上涨,迪卡侬涨价难免的。中秋节后有七五折的活动,可以留意。

我没等到淘宝迪卡侬店的七五折活动,就在迪卡侬它自己的网店,买了一双100元的户外徒步鞋。虽然产品页上,它说不适合在柏油路上行走,但我就喜欢这99.9元的价格,所以就买了。到货后一看,果真是户外用的:鞋底硬、鞋面紧密。胶水粘合有不齐的痕迹,甚至有黄豆大小的烫点,明显有瑕疵。我穿上新鞋着地,似乎套上了只定型的塑料框,脚每一次落在瓷砖上就咯一声响。嘿……久违了,这种穿皮鞋的感觉。

图1:广州黄村附近的奥林匹克体育场

图2:迪卡侬广州奥体店

图3:口号:中建八局助力绿美羊城高质量跨越发展

图4:在迪卡侬官方网站买的鞋,边上有黄豆大小的“烫点”