到新塘综合菜市场买饺子

上午约十点,我从出租屋出发,打算走路到新塘菜市场,找“袁小饺”店,因为我在“美团”上买了一份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:在迪卡侬官方网站买的鞋,边上有黄豆大小的“烫点”

坐上广州班车,出门打工——暂住沐陂村

昨天早上六点八醒,比平时迟些,因为睡得不是很好,公路对面有条流浪狗,时不时大声“背”(吠)几声。我想起,要搭八点到广州的班车,所以有点紧张地赶快刷牙洗面。我张开手提袋,将昨天检好的几件衫放到袋底,然后再放一个装着生活用品的胶袋,好像就搞掂了。我觉得既然袋里还有些空间,那再塞一些生活消耗品,反正都是要用的,能装就装,到了那边能省点钱就省点。面巾纸、肥皂,甚至是一个旧的无线路由器,也被我塞进手提袋里了。

我吃过早餐后,约七点半出门,走路到车站。到了车站,发现它移到上面一点点了,原来的地址在施工。二楼挂着红色横幅——广州全程80元,欢迎乘坐。相比约四个月前的车站,站内还有这些变化:原先传送带式的行李扫描机,没了,现在用一个门框式的机器,连人带行李一起检查,穿过门框,嘀一下就行;原先人工用笔划票来检票的设置,没了,现在用自动的身份证扫描过闸机了。我买到的票,座位号是30,我以为是随机抽的号,但上车一看,30号之前的座位,都有人坐着了,并且我留意到买票时排我前边的几个人,分别是27, 28, 29号。这一班车,我想至少有35人。车票从原先的一百多降到八十元,效果还是很明显的。

我有点累,所以刚上车不久就眯上眼打盹了。我迷迷糊糊中,听到车里有人谈到留守儿童不好管的问题,孩子连技校也不愿意上;也听到有人在电话里跟亲戚谈病情和费用报销的事情。可能这是代表了两拨从和到到广州的人:父母到广州打工的和到广州大医院看病的。

车子到了天河客运站,我发微信信息给之前在豆瓣“广州租房”小组里加上的一个房东,说我到广州了。房东热情地说等着我去看房,还搜索地图,说坐772A路公交车可到,就在“沐陂村村口站”下车。我想,既然房东这么有心。天嘅热,人又累,那我就不考虑其它租房信息,直接背着袋子去他那儿了。

沐陂村村口站到了。我下公交车,看到路边一个铁皮似的站牌,小小的。我分清南北方向后,沿路向前,边走边看两边的店和房屋。房屋门口或墙上贴着“有房租”的广告;还有小超市,快餐店等。我看了下时间,要十二点半了,肚子饿。我心里想,不如吃饱后再去房东那。我倒回几步,进了一家“佰家乐美食”,隔着玻璃指了指,打了一份两菜两荤的快餐,12元。一看到饭菜,我更觉得饿、渴的,背包我也懒得放下了,低头就吃。虽然那份例汤淡得跟水差不多,但我恰恰就很需要水哩。吃了大半,我才发现,原来这里的釀豆腐是皮豆腐底,不是老家常用的水豆腐。这“釀豆腐”让我哭笑不得,吃起来的味道也别扭,既不觉得新鲜,也不觉得味美。我抬头看了看四周,大多数是些“大汉”,有打赤上身肩挂着衣服的,也有虽穿着上衣但尚开着肚子的。我又多看了看,看到他们端着铁盘子去隔间待了会儿后出来,盘子里多了些白饭。原来如此,我也有样学样,跟着线路,也去加了饭。我还问了站在那儿的老板,“可以加饭吗?”

我吃饱后,继续往前走,也是边走边看路两边的房子。当看到“同悦公寓”的广告牌时,我没再往前走了,而是找它的门。找着找着,迎面走来一个小伙,招手问我是不是约好来看房的,我说“是”。然后,他就带我转了个弯,说“大门在这个巷子里”。我跟着,上了楼。小伙说他是代老板管理房屋的,湖北人,姓胡,在这儿有几年了。这栋楼大概是在2019年装修的。胡帅哥带我看了两种房:750元和850元的。我问是不是850元的是因为多了一个窗户。他说面积也会稍大一点儿。当他问我要租哪种时,我说你有心,那我租850元的吧,但能否让我租三个月,因为我刚到广州,还没稳定下来,不确定以后会不会搬到其它地方。胡帅哥说行,然后我们就到他二楼那签合同了,同时他要求我用手机在“粤居码”小程序上登记个人资料,以符合上边的管理要求。

我重点问了一下宽带,胡帅哥说他的网线是60元一个月,付钱后就可以开通使用。我想拉单独光纤入室,以为这样会稳定些。签好合同,领到钥匙后,我用抹布简单擦了下桌子和柜子,把衣服从行李袋里取出放好。然后铺张床单,先躺一躺。唉……年龄大了,不太中用了,我得先休息一下,之后再出去找报装宽带的人或店。

四点多,我先在出租房的楼下站着,看有没人可以打听一下装宽带的事情。一个骑电动车来来去去的,车头挂着租房广告的阿姨,说可以帮我问一下人。然后她打电话,喊来了一个师傅,师傅也是骑着电动车,车头挂着一圈线缆。师傅简要地说,办光纤入户的,一般要绑定本地广州市的手机卡,且要收两百块钱左右的安装费,合约使用期一年以上。月租大概是:移动59元,联通69元,电信89元。我问有没30元/月的套餐,师傅说没有。谢过师傅后,我沿沐陂西街往智慧城的方向走,因为地图上显示最近的联通营业厅就在那儿。路上,我还拨打了一间已搬走的店的旧招牌上的联通报装宽带电话号码,电话那头的回复和之前那个师傅的回答差不多。

用了约四十分钟,我走到智慧城附近。这儿与村里是有很大的差别。这儿的路宽、干净。我看到路边有工行、浦发银行的网点。当地图app显示已经到目的地时,我还有点不相信,因为在我面前的,只是一个约三米宽的门店,里边只有两个工位。我心里想,这样的营业厅,好像和老家城里的手机店差不多大,甚至还要小些。我进去,先拿摆在门口附近的产品介绍纸张来看。产品的内容好像和之前师傅说的差不多。排我前面的有三个人,我得等。轮到我时,工作人员说的,和产品宣传册上的一样。虽然我特别提到,有没适合初到广州,住在城中村民工的宽带套餐,如30元/月的,她答"没有"。出了联通营业厅,我也进了在同一排开了营业厅的电信和移动。电信那会儿没人办业务,就我一个。电信的工作人员给我的报价是129元/月,且这个价格是城中村的优惠价,如附近的楼盘一般是四百多的套餐。移动店里的人不少,且还要取号排队办业务。我估计营业厅说的宽带套餐与师傅说的,也会差不多,就没取号,直接走了。如此,我到营业厅问宽带报装的事情,没进展,因为和城中村里的师傅说得差不多,没我想要的30元/月的光纤入户套餐。令我有点意外的是,联通那儿的工作人员是为说英语的人办理好了业务。一个只有两个工位的营业厅,也有外宾的服务项目,是挺不错的。

从智慧城走回沐陂村出租房时,差不多六点了,下班的高峰期吧,来往车辆挺多的。特别是路旁有仓库的路段,过往着的,不仅有两轮的电动车、四轮的小轿车、六轮的公交车,还有特别长的大货车,都挤在只有两个车道宽的公路上,很容易堵车,空气也不好。我穿着脱了胶的鞋子,小心翼翼地想避开路面的积水,还要经常地看后边有没人骑电动车。

第二天上午八点半左右,我沿着沐陂大街自西往东,在沐陂公园转弯到沐陂路自东往西,走到沐陂村村口公交站时转回到沐陂西街的出租房。是不是这样,我就基本把村里的大路给走了一圈?沐陂大街是一条约三米宽的路。我在路边的包子店里买了“韭菜鸡蛋包”和“萝卜包”,每个一块钱。萝卜包是微辣口味的,我边吃边对老板说,“好辣,好辣”。沐陂路路边的店,有一半以上没开门营业。沐陂公园好像挺小的。我看到有十个左右的老年人在做操,他们几乎将公园“挤满”了。公园的路对面有座庙,我看到有两个木门。

图1:和平县汽车站

图2:沐陂村村口公交站

图3:两荤两素的12元快餐

图4:路边的出租房广告

图5:单间,850元

图6:天河智慧城

图7:沐陂路