Monthly Archives: August 2020

折腾WordPress的Media Library在迁移后不显示图片的故障

用WordPress自带的migration tool迁移到新服务器,会遇到这样的问题:虽然之前上传的照片都已经拷贝到wp-content/uploads目录下,但是在Media Library下,这些照片都无法正常显示,原因是有两张表的数据没有导过来:wp_posts和wp_postmeta。

搞了半天,才找出解决办法。

首先,在旧服务器,导出所有attachment类型的posts:

sudo mysqldump wordpress wp_posts --where="post_type='attachment'" > wp_posts.sql

导出所有与attachment有关的wp_postmeta记录:

sudo mysqldump wordpress wp_postmeta --single-transaction --where="post_id in (select id from wp_posts where post_type='attachment')" > wp_postmeta.sql

之后,将两个sql文件上传到新服务器,并导入对应数据库:

mysql -u root -p wordpress < /home/wp_posts.sql

mysql -u root -p wordpress < /home/wp_postmeta.sql

这个方法存在一个问题:导出的记录的id可能在新实例中的表里已经存在了,这就很麻烦了,一个办法是,在sql文件里手动改掉冲突的id;另一种就是放弃所有冲突的id(在sql文件手动删掉对应的脚本)。我在wp_posts里使用手动改id的方法,因为一共只有四五条记录冲突;而在wp_postmeta表,我采用了批量修改新插入记录的ID后导入。具体方法是,首先在新实例的数据库上执行

select max(meta_id) from wp_postmeta;
+--------------+
| max(meta_id) |
+--------------+
| 15840 |
+--------------+
1 row in set (0.00 sec)

找出当前wp_postmeta表最大ID,然后用文本编辑器打开wp_postmeta.sql,查找”),(“,替换为”),(15840+”,也就是在原ID的基础上自增15840,以保证新ID不存在。当然,脚本第一条记录由于不符合”),(“的格式,所以需要手动修改为(15840+”。完成以后,放到服务器上导入,问题顺利解决。

继续折腾:Piwigo相册

前阵子,趁迁移blog的机会,把计划了很久的相册给建了起来。最早用的是Flickr的免费相册,无限容量,而且画质优化也特别棒,可是几年前,免费用户的容量被限制到了1000张照片,远低于我希望管理的照片数,所以就慢慢地放弃了Flickr。之前也试用过其他一些免费云端相册,总有这样那样的限制,还用了一阵子QNAP自带的Photo Station,始终没法习惯他的管理模式,所以也放弃了。

这次试用了一下selfhost的Piwigo相册,出人意料的满意。Selfhost意味着可以为所欲为,不用为容量或者照片数量担心,于是便慢慢的将自己过去几年拍的一些照片,传到了Piwigo里。经过一个月左右的摸索,感觉已经达到了一个比较理想的状态了。

Piwigo的相簿管理非常简单,而且支持子相簿,相簿的封面照片可以自选。同时,每张照片都能看到拍摄时的exif信息,并且支持添加GPS坐标(如果拍摄时自动添加了坐标,则无需手动添加),并显示在地图插件上。

另一个比较有意思的功能是Piwigo支持标签功能,每张照片可以添加多个标签,便于管理。比如我,就创建了彩虹、瀑布、极光、野生动物、湖面倒影的几个标签,方便检索同一类型的照片。

不过,我平时管理的照片,基本都是用相机拍摄的,然而每次出游,Mei都会用自己的手机拍不少照片,其中也不乏一些蛮有意思的作品,我现在还没想好该用什么样的一种方式去管理这些相片。

Raspberry Pi – 继续折腾FlightAirMap

PiAware最大的问题是没办法记录曾经检测过的飞机,于是我又开始折腾起了功能更强大的FlightAirMap

安装过程

Install git, mariadb, apache and PHP with needed modules:

sudo apt-get install git mariadb-server apache2 php5 php5-curl php5-mysql php5-gd php-pclzip

Or this on Stretch:

sudo apt-get install git mariadb-server apache2 php7.0-common php7.0-cgi php7.0-mysql php7.0-curl php7.0 php7.0-xml php7.0-zip php7.0-gd php7.0-json

Get FlightAirMap from git:

cd /var/www
sudo git clone --recursive --depth=1 http://github.com/ysurac/flightairmap

Edit Apache conf /etc/apache2/site-available/000-default.conf, add this in VirtualHost section:

<VirtualHost *:8088>
        ServerName 192.168.68.128/flightairmap
        DocumentRoot "/var/www/flightairmap"
        <Directory /var/www/flightairmap>
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
        </Directory>
</VirtualHost>

Enable mod rewrite:

sudo a2enmod rewrite

Restart apache2:

sudo service apache2 restart

Fix permissions:

cd /var/www/flightairmap
sudo chmod 666 require/settings.php
sudo chmod 777 install/tmp
sudo chmod 777 data

Create database and user, may skip if already created:

mysql -u root -p
update mysql.user set password=password('YOUR_DB_PASSWORD') where user='root';

Then:

CREATE DATABASE `flightairmap`;
GRANT ALL ON `flightairmap`.* TO 'youruser'@'localhost' IDENTIFIED BY 'yourpass';
FLUSH PRIVILEGES;

Now use your browser to go to http://127.0.0.1/install/ (or ip of your server) Run scripts/update_db.php in a shell.

cd /var/www/flightairmap/
php scripts/update_db.php

Add FlightAirMap service:

sudo cp /var/www/flightairmap/install/init/flightairmap.service.systemd /etc/systemd/system/flightairmap.service

Alter paths to match your path, may skip i no change to the installation folder:

sudo nano /etc/systemd/system/flightairmap.service
sudo chmod 644 /etc/systemd/system/flightairmap.service

Then you can run flightairmap daemon:

sudo systemctl enable flightairmap.service

Add update_db.php in /etc/crontab:

sudo 5 * * * * root php /var/www/flightairmap/scripts/update_db.php >/dev/null 2>&1

运行效果:

折腾Raspberry Pi:安装PiAware

PiAware是什么鬼?

官方解释:

您的地面站可以运行 FlightAware 的 PiAware 软件,用于跟踪在 100-300 miles (视线内,取决于天线的安装范围) 内的飞行,并自动将数据传送给 FlightAware。 您可以直接从您的 PiAware 设备或通过 FlightAware.com 跟踪航班。为了表达FlightAware的谢意,发送ADS-B数据的用户将享受以下优待:

  • flightaware.com上的实时数据(存在最多两分钟的标准数据处理延迟)
  • 访问本地设备最近一秒接收的最新实时数据(可通过本地网络连接在统计信息页面访问)
  • 来自本地设备的数据在FlightAware航迹上突出显示
  • 站点性能详细统计
  • 一个免费Enterprise Account (价值每月89.95美刀)

安装过程:

硬件:

将amazon购买的ADS-B接收器连上天线,并插入RasPi的USB口。

软件:

wget https://flightaware.com/adsb/piaware/files/packages/pool/piaware/p/piaware-support/piaware-repository_3.8.1_all.deb
sudo dpkg -i piaware-repository_3.8.1_all.deb

sudo apt-get update
sudo apt-get install piaware

sudo piaware-config allow-auto-updates yes
sudo piaware-config allow-manual-updates yes

sudo apt-get install dump1090-fa

sudo reboot

安装完毕后,登录flighwaware网站激活刚安装完毕的客户端

https://flightaware.com/adsb/piaware/claim

激活以后,就能在本地局域网看到本地地图以及正在追踪的飞机了。

还有一个问题,由于我这个RasPi,之前已经安装了Apache运行wordpress和piwigo相册,而PiAware默认使用的是lighttpd服务器,两者(Apache和lighttpd)同时运行,会造成端口监听冲突,同时也会加重主机的负荷,所以我又多做了几个步骤,把dump1090-fa的服务迁移到了Apache上。

具体步骤很简答,只需要改动两个文件:

第一个是在/etc/apache2/ports.conf中加入对8080端口的监听 :

Listen 8080

其次,将8080端口的服务加入到/etc/apache2/sites-available/000-default.conf:

<VirtualHost *:8080>
        ServerAdmin webmaster@localhost
       DocumentRoot /usr/share/dump1090-fa/html/
       Alias  "/dump1090-fa/data/" "/run/dump1090-fa/"
       Alias  "/data/" "/run/dump1090-fa/"
       Alias  "/dump1090-fa/" "/usr/share/dump1090-fa/html/"
       Alias  "^/dump1090-fa$" "/dump1090-fa/"
        #SetEnvIf Request_URI "/dump1090-fa/data/.*\.json$" Header set "Access-Control-Allow-Origin" "*"
        <Directory "/usr/share/dump1090-fa/html/">
        Require all granted
        Options All
        AllowOverride All
        SetEnvIf Request_URI "/dump1090-fa/data/.*\.json$" Header set "Access-Control-Allow-Origin" "*"
        </Directory>
        <Directory "/run/dump1090-fa/">
        Require all granted
        Options All
        AllowOverride All
        SetEnvIf Request_URI "/dump1090-fa/data/.*\.json$" Header set "Access-Control-Allow-Origin" "*"
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


重启Apache服务

sudo service apache2 restart

禁用lighttpd

sudo systemctl disable lighttpd

sudo update-rc.d -f lighttpd remove

将Apache服务设为自动启动

sudo systemctl enable --now apache2

实际运行效果:

下一步:

Amazon买的ADS-B自带的天线信号有点弱,只能接收到周围25NM左右的范围,接下来可能另外买一个信号强一点的天线,同时需要调整一下摆放位置。

参考资料:

https://flightaware.com/adsb/piaware/install
https://discussions.flightaware.com/t/migrate-dump1090-fa-to-apache/34053/11

Grey fox in San Mateo

今天早上Mei去上班路上,居然遇到了一匹grey fox,正好被行车记录仪拍了下来。

开始以为是coyote,不过网上找了图片仔细对比之后,感觉更有可能是灰福狸。

F1 70th Anniversary GP @ Silverstone

本周,再次开闹钟六点起来看比赛。

本周的比赛是银石背靠背两场的第二场。从上周的表现来看,我本以为这又会是一场Mercedes AMG一二带回的无聊比赛,没想到Red Bull的轮胎策略发挥了奇效,让Verstappen在赛车性能不占优的情况下,出人意料的拿下了冠军,这才是我原本印象中的F1,可以靠进站,加油的策略左右比赛的进程,而最近几年的比赛,由于取消了加油,又统一了轮胎供应商,令比赛的不确定性减少了很多,也让比赛少了很多看点。

除了Max的夺冠,Racing Point的代打车手Hulkenberg也有出色的表现,排位赛跑入前四三,正赛也一度位列第四,只是最后运气不佳,因为车胎的缘故被迫多进一次站而位列第七。不过下周巴塞罗那站,如果Perez不能及时康复,那他应该还有一场表现的机会,祝他好运。

另外,就是Vettel,延续了最近的恶劣表现,发车没多久就自己失误spin,后来又在team radio里和车队发脾气,最后落到一分没得,和队友Leclerc的第三形成了鲜明对比。

这场比赛,Team Radio也有许多亮点,有些也挺搞笑的,我截了几个图大家一起乐呵乐呵。

Max Verstappen, during the race, when asked to back off and manage tires

Hamilton is obviously worried about his tires

Vettel…

Verstappen on final lap

2020 F1 Silverstone Grand Prix

这场比赛真是太戏剧化了,前51圈基本上就是半看半打瞌睡,直到倒数第二圈,博塔斯爆胎了。没想到这还不是全场最高潮的,最后一圈,整场领跑的汉密尔顿也爆胎了,眼看着维斯塔潘从差20多秒一点点追进,最后还是功亏一篑,汉密尔顿拖着一条爆胎冲过了格子旗终点线。维斯塔潘最后回场圈的时候在team radio里气的破口大骂,如果不是倒数第二圈回去换了个胎刷最快圈速,本场冠军就是他的了。。。

另外有一点遗憾的是我今年特别欣赏的年轻车手诺里斯,老老实实跟在队友塞恩斯后面开了大半场,最后被里卡多慢慢追近,并利用DRS的优势超越,白白丢了一个位置。不过我还是很看好他的,希望下一场比赛能继续延续这个赛季的出色表现。

 

 

Continue reading