Ubuntu에서 snap으로 package 설치 후 permission denied

Ubuntu 18.04에서 snap으로 pycharm-community를 설치했는데 실행이 되지 않는 문제가 있었습니다.
문제를 확인 해 보니 https://askubuntu.com/questions/930437/permission-denied-error-when-running-apps-installed-as-snap-packages-ubuntu-17 에 다음과 같은 가이드가 있습니다.

I ran into this because my home directory is symlinked from /home/$USER to another mount point. I fixed it with the suggestion from: https://bugs.launchpad.net/snapcraft/+bug/1620771

In short, you need to add your non-standard home directory to apparmor's HOMEDIRS variable:

$ sudo dpkg-reconfigure apparmor

or: create a file in /etc/apparmor.d/tunables/home.d/ that points to your home directory's mount point:

@{HOMEDIRS}+=/mnt/hdd/.home/

Then, just for good measure, you should delete apparmor's cache and reboot:

$ sudo rm -f /etc/apparmor.d/cache/* /var/cache/apparmor/snap.*$ sudo reboot

처음의 dpkg-reconfigure apparmor만 해도 문제가 해결되었는데, home directory가 /home이 아니어서 문제가 되었습니다.


ubuntu에서 netplan을 이용한 네트워크 설정 SW

집에서 NAS로 사용하고 있는 ubuntu 18.04 서버를 20.04으로 업데이트 했는데, 네트워크 설정 부분이 많이 바뀌었네요.
업데이트 직후는 별 문제 없었지만 kernel module을 재설치하고 설정 파일을 만지다 보니 network이 안잡혀서 당황했습니다.
사실 netplan은 이전 버전인 18.04에서도 사용되고 있었는데, 점점 ubuntu의 설정이 systemd에 친화적으로 바뀌고 있네요.

수십년간 linux/unix에서는 /etc/network/interfaces 를 이용해서 network을 설정했습니다. 하지만 이러한 설정이 cloud 배포라던가, wireless 환경에서 공유기 암호를 넣는다던가 하는 설정에는 점점 더 적합하지 않습니다. netplan은 사용자의 환경에 맞추어서 backend renderer를 NetworkManager나 systemd 를 지정하게 해서 network 설정을 추상화 합니다. 최근 추세에 맞추어서 설정 파일도 yaml이고요.


netplan으로 네트워크를 설정하는 방법은 예제에 있는 것처럼 다음과 같이 설정하면 됩니다.
1. /etc/netplan에 임의의 설정 파일 추가 (01-netcfg.yaml)
2. network interface 이름 확인 (ifconfig -a나 ip -a)
3. 다음과 같이 설정 파일 추가
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
addresses:
- 10.10.10.2/24
gateway4: 10.10.10.1
nameservers:
addresses: [10.10.10.1, 1.1.1.1]

여기서 network interface가 enp3s0이고, address, gateway, name server는 적절하게 수정하면 됩니다.



Android Room에서 버전 간 호환성 문제

Room Persistence Library는 Android에서 Data object을 추상화 하는데에 크게 도움이 되어서 많이 사용합니다.

Room은 해당 Table의 Schema를 별도의 Table에 Hash로 가지고 있는데, 이 Hash 값이 변경되면 DB의 변경으로 간주하는데, 일부 버전 간 호환성 문제가 있어서 주의해야 합니다.

1. NonNull 을 사용하는 경우 (1.0.0-alpha8)
Room migrations: Upgrading to versions with breaking changes 에 언급 된 것처럼 1.0.0-alpha8 에서 NonNull annotation을 사용하면 Table의 Schema가 변경된 것으로 인식합니다. 실제로 Schema의 Constraint에 NOT NULL이 추가되게 됩니다.

2. Field의 순서가 변경되는 경우 (1.1.0-alpha1)
Release Node에 다음과 같이 모호하게 써 있네요.
Version 1.1.0-alpha1
January 22, 2018

Bug Fixes
Order of fields do not invalidate schema anymore. b/64290754

이 문제가 Java > Kotlin으로 Data Class를 변환하다가 발생했었습니다. Kotlin의 멤버 변수 선언 위치가 일부 생성자에 강제되는 경우가 있는데, 이것 때문에 Field의 순서가 바뀌었고 Room에서 관리하던 Hash 값이 변경되어서 에러가 발생했네요. 다른 Schema 변경과는 다르게 DB의 버전만 하나 올려주면 Room이 Hash를 다시 계산해서 문제 없이 동작 합니다.



1 2 3 4 5 6 7 8 9 10 다음