ZeroSSL is a free ssl certificate provider. I had follow all the instructions on their official website to configure my hostinger domain, but it’s not enough.
At the domain verification step, it declared that Invalid CAA Records eventhough my CNAME record was configured correctly.
Seemingly, Hostinger CCA’s default value is missing something.
The solution is that you need to check the CCA section belonging to DNS Zone. It’s a must to have following yellow records in your CAA list.
If you dont have those records, you need to add it manually one by one. Although, you submit new CAA records, it could take up to 30 minutes for verification.
SELinux một thứ rất đang để học hỏi, nhưng lại khó để thực hành. Đặc biệt là các vấn đề liên quan đến SELinux lại là thứ không phải là thứ xảy ra hàng ngày, hàng giờ.
Chỉ là thi thoảng, khi triển khai máy chủ mới gặp vấn đề, lúc gặp tôi thường là có hai phương án tùy vào tình huống mà:
Tắt luôn SELinux
Đọc, hiểu lý do, viết policy và cài đặt policy cho SELinux.
Cứ mỗi lần triển khải server mới, dính vào nginx, reverse proxy là tôi lại phải nhờ anh google. Lần này tôi quyết định viết lại blog, cũng như là một cách để nhắc nhở mình
cần phải làm gì khi gặp chuyện với SELinux.
I. Xác định xem có phải vấn đề thuộc về SELinux hay không
Cách dễ nhất để biết được nguyên nhân gặp phải thuộc về SELinux đó là chuyển chế độ của SELinux từ Enforce thành Permission. Đây là các lệnh liên quan
getenforce: xem trạng thái của SELinux. Enforce có nghĩa là chặn sạch, block sạch nếu ứng dụng không thỏa mãn luật lệ. Permissive có nghĩa là thông qua, tuy nhiên vẫn sẽ bị log ghi lại.
setenforce: cài đặt trạng thái của SELiux. setenforce 1, chuyển sang chế độ Enforce. setenforce 0 là chuyển sang chế độ Permissive.
Nếu mà chuyển sang chế độ Permissive mà phần mêm chạy ổn áp đúng như mong muốn thì biết lý do là SELinux rồi đấy. Bên cạnh đó, hay chú ý đến cả file log của phần mềm, cuộc đời biết đâu bất ngờ.
II. Xem và hiểu file audit.log
File /var/log/audit/audit.log này cực kì quan trọng chứa thông tin liên quan đến lý do tại sao SELinux lại ngăn chặn phần mềm làm điều này, điều kia. Tuy nhiên khi đọc bằng mắt thường sẽ rất khó hiểu.
Để đọc và hiểu lý do dễ dàng, nên sử dụng lệnh audit2why.
Ví dụ như sau, tôi cat file log, tôi grep các dòng có từ khóa “denied”, tôi tiếp tục sử dụng audit2why để đọc dễ hiểu hơn.
Chắc chắn là khi chạy xong, thông tin sẽ tường mình hơn rất nhiều.
III. Tạo và cài đặt luật lệ để SELinux thông qua
SELinux rất hay ở chỗ nó block phần mêm những nó cũng chỉ rõ ra rằng chúng ta phải làm gì để khắc phục. Đây là một cái rất rất thú vị. Sau
khi đã đọc và hiểu tại sao SELinux block, giờ là lúc bổ sung luật lệ cho SELinux. audit2allow là câu lệnh chúng ta cần.
Câu lệnh trên sẽ tạo ra file my_module.pp. Sử dụng lệnh sau để cài đặt module này vào SELinux.
Sau khi kiểm tra cẩn thận, hay nhớ bật chế độ Enforcing cho SELinux.
Đây là câu chuyện tôi đã trải qua khi phải bắt buộc gia tăng logical volume hệ thống. Trong quá trình phát triển, không gian dữ liệu hệ điều hành chiếm dụng bắt đầu nhiều hơn và nhiều hơn. Đã có những lúc tôi nghịch ngợm với VM, Docker, Backup file quá nhiều, kết cục là ổ cứng 500 GB của tôi dần dần cạn kiệt.
Công ty tôi còn một vài cái ổ cứng 500 GB khác. Tôi quyết định mở rộng logical volume lên thêm nữa sử dụng lợi thế của Logical Volume Manager. Với cách tiếp cận này, việc gia tăng logical volume trở nên đơn giản hơn, với khả năng mở rộng lớn, thực sự là chỉ bị hạn chế bởi số cổng SATA hỗ trợ trên bo mạch chủ.
Vì lý do công nghệ này sử dụng nhiều lớp trừu tượng trung gian. Để giúp các bạn hiểu tôi đang nói về lớp nào tôi sẽ thêm các chú thích về tầng trừu tượng [LEVEL X]. Hình số [1] có chú thích chi tiết từng tầng một.
II. Cách làm
Đây là danh sách những việc phải làm khi muốn mở rộng logical volume[LEVEL 5]. Trường hợp của tôi khá là kẹt khi mà Physical Volume Group hoàn toàn ko còn dung lượng dư. Chính vì như vậy, tôi phải gắn thêm một ổ đĩa cứng mới [LEVEL 1].
Gắn ổ cứng mới [LEVEL 1]
Tạo phân vùng (partition) với định dạng Linux LVM [LEVEL 2]
Tạo physical volume từ phân vùng vừa tạo [LEVEL 3]
Thêm physical volume vừa tạo vào volume group [LEVEL 4]
Thêm dung lượng cho logical volume từ dung lượng trống từ volume group[LEVEL 5]
Cập nhập filesystem
1. Gắn ổ cứng mới
Nghe dễ thật, nhưng tôi lại gặp một vấn đề khác.
Để hệ điều hành nhận ổ cứng mới, tôi đã phải làm theo các bước sau.
2. Tạo phân vùng loại Linux LVM từ ổ đĩa [LEVEL 2]
Cách làm mà tôi sử dụng là phần mềm fdisk. Đây là các chỉ mục quan trọng
Tạo GPG partition table
Tạo phân vùng mới với loại Linux LVM
a. Tạo GPG partition table
Sử dụng lệnh sau với quyền root.
fdisk /dev/sdb
sdb là tên của ổ đĩa. Lưu ý là sdb chứ không phải là sdb1, hoàn toàn không có hậu tố đằng sau. Số 1 ở đây ám chỉ phân vùng chứ không phải là ổ đĩa. Nếu bạn đang gắn ổ cứng thứ 3, ổ cứng của bạn khả năng rất cao sẽ tên là sdc.
Fdisk là phần mềm có nhiều tính năng chết người, Thao tác của phần mềm khá đơn giản, chọn chỉ mục bằng phím, kết thúc bằng enter. Ví dụ để xem hướng dẫn của phần mềm, ấn phím m và kết thúc bằng enter.
Để tạo GPG partition table, hãy chọn chỉ mục có tên là create a new empty GPT partition table.
b. Tạo phân vùngLinux LVM
Chọn chỉ mục có tên là add a new partition
Tiếp theo, tôi sẽ bị yêu cầu nhập
partition number: mặc định
first sector: mặc định
last sector: mặc định
Tôi đã tạo xong phân vùng mới, tuy nhiên định dạng của nó là Linux filesystem, Cái tôi muốn là Linux LVM. Chọn chỉ mục có tên là change a partion type
Phần mềm sẽ chọn phân vùng duy nhất trong trường hợp này là 1. Trong phần chọn loại phân vùng, Linux LVM có mã số là 31.
Kiểm tra lại với chỉ mục có tên print the partition table. Nó nên có phân vùng mới kèm theo là loại phân vùng có tên Linux LVM.
Kết thúc giai đoạn này với chỉ mục mang tên write table to disk and exit
3. Tạo phsyical volume [LEVEL 3]
Tạo physical volume với lệnh sau:
pvcreate /dev/sdb1;
Kiểm tra xem physical volume đã tạo thành công từ /dev/sdb1 với lệnh sau:
pvs;
4. Gán physical volume vào volume group [LEVEL 4]
Tôi cần phải biết xem logical volume mà tôi cần gia tăng thuộc volume group nào. Sử dụng lệnh sau để xem danh sách logical volume hiện đang có cũng như là volume group mà nó thuộc về.
Trong trường hợp của tôi. logical volume mà tôi muốn gia tăng dung lượng là home và root. Cả hai logical volume này thuộc volume group có tên là fedora
Đây là lệnh để tìm xem thông tin của toàn bộ volume group. Hãy chú ý cột VFree, sau khi thêm physical volume vào volume group. giá trị của cột VFree phải tăng lên, tạo tiền đề để gia tăng các logical volume ở bước tiếp theo.
vgs;
Đây là lệnh để gán physical volume /dev/sdb1 vào volume group có tên là fedora.
vgextend fedora /dev/sdc1;
5. Gia tăng dung lượng cho logical volume [LEVEL 5]
Đây là cả chỉ mục cần quan tâm:
Sử dụng lệnh lvextend để gia tăng logical volume
Sử dụng lệnh resize2fs để cập nhật file system
Tôi cần gia tăng logical volume có tên là root và home. Cụ thể là tôi muốn tăng 400 GB cho home và 100% phần còn dư cho root. Đây là cách làm.
Để kiểm tra, hãy sử dụng lệnh sau: lvs. Tuy nhiên filesystem thì hoàn toàn chưa được cập nhật, hãy sử dụng lệnh sau để thấy sự khác biệt df -h, chú ý cột Filesystem, Size và cột Mount on
LVM - Phần mềm quản lý nhiều ổ cứng Logical Volume, tác dụng của LVM đó là cho phép ghép nhiều ổ đĩa cứng với nhau, sau đó tạo ra một lớp trừu tượng trước hệ điều hành. Với lợi thế này, việc gia tăng dung lượng cho hệ điều hành dễ dàng hơn bao giờ hết. Hệ điều hành có thể đang chạy trên hai ổ cứng vẫn đảm bảo được sự trơn tru, đơn giản khi vận hành như đang làm việc với một ổ cứng mà thôi.
Hệ thống từ vựng được sử dụng khi nói đến LVM hơi nhầm lẫn khi dịch qua tiếng Việt
volume: Là một từ trừu tượng, có thể hiểu khi là một cục nào đó chứa dữ liệu
partition: Phân vùng, khi nói đến phân vùng, chúng ta nói đến việc chia ổ cứng thành nhiều phần vùng
physical volume: Khi nói đến LVM, thì physical volume là thứ được tạo ra từ partition
physical volume group: Là nhóm được tạo ra từ nhiều partition
logical volume: Khi nói đến LVM, thì logical volume là volume được tạo ra từ physical volume group
Hiểu nôm na thì ta sẽ có sơ đồ từ vựng thứ tự của các định nghĩa như sau:
II. Các quy trình thường gặp khi làm việc với LVM
a. Tạo logical volume
Tạo phân vùng (partition) có định dạng là Linux LVM từ ổ cứng vật lý. [LEVEL 2]
Sử dụng lệnh fdisk
Tạo physical volume từ phân vùng (partition) vừa tạo [LEVEL 3]
Sử dụng lệnh pvcreate
Tạo physical volume group với physical volume vừa tạo [LEVEL 4]
Sử dụng lệnh vgcreate
Tạo logical volume từ physical volume group[LEVEL 5]
Sử dụng lệnh lvcreate
b. Gia tăng dung lượng cho logical volume
Xác định xem physical volume group cái tạo ra logical volume cần tăng dung lượng xem là nó có còn dung lượng trống hay không. [LEVEL 4]
Sử dụng lệnh vgs, vgdisplay
Nếu còn dung lương trống thì thêm dung lượng vào logical volume[LEVEL 5]
Sử dụng lệnh lvextend, resize2fs
Nếu không còn thì phải thêm physical volume vào physical volume group[LEVEL 3]
Sử dụng lệnh vgextend
Sau đó thì gõ lệnh thêm dung lượng vào logical volume[LEVEL 5]
Sử dụng lệnh lvextend, resize2fs
c. Giảm dung lượng của logical volume
Cực kì nguy hiểm!
Hãy backup trước khi làm việc này. Là người viết, tôi chưa bao giờ thử cái tính năng này. Viết cho nó có chữ thôi chứ, dùng cái tính năng của khỉ này, tôi không dám.
Xác định xem logical volume, bao nhiêu dung lượng đã được sử dụng, dung lượng còn lại có thể giảm được hay không. [LEVEL 5]
Sử dụng lệnh df -h, nó sẽ hiển thị dung lượng sử dụng.
Gõ lệnh để giảm dung lượng của logical volume, dung lượng được giảm sẽ về logical volume group[LEVEL 5]
Sử dụng lệnh lvreduce, resize2fs
III. Các câu lệnh liên quan
Command
Level
Ý nghĩa
lsblk
Level 1, Level 2
Liệt kê danh sách các ổ cứng - hay còn gọi là block devices. Ví dụ như sda, sdb, sdc
fdisk
Level 1, Level 2
Thao tác với ổ cứng ví dụ như tạo phân vùng (partition) trên ổ cứng
pvcreate
Level 3
Tạo physical volume từ phân vùng(partition) trên ổ cứng
pvremove
Level 3
Xóa physical volume
vgcreate
Level 4
Tạo physical volume group từ một hay nhiều physical volume
vgextend
Level 3, Level 4
Thêm physical volume vào physical volume group
vgreduce
Level 3, Level 4
Loại bỏ physical volume khỏi physical volume group
vgremove
Level 4
Xóa logical volume group
vgs, vgdisplay
Level 4
Liệt kê các physical volume group đang có
lvcreate
Level 5
Tạo logical volume từ physical volume group
lvs, lvdisplay
Level 5
Liệt kê các logical volume đang có
lvextend
Level 5
Gia tăng dung lượng cho logical volume
lvreduce
Level 5
Giảm dung lượng cho logical volume
lvremove
Level 5
Xóa logical volume
resize2fs
Level 5
Khi thao tác gia tăng logical volume, lệnh resize2fs được sử dụng để cập nhât filesystem cho logical volume
mkfs
Định dạng cho logical volume ví dụ như là ext2, ext3, ext4 , ntfs. Make File System
IV. Hứa hẹn
Tôi đã gặp tình huống như sau. Tôi có một Đĩa Vật Lý 500GB. Trên ổ đĩa này cài Hệ Điều Hành. Vấn đề đặt ra là làm sao để tôi có thể lắp thêm ổ cứng vật lý mới, tiếp tục sử dụng hệ điều hành bình thường và quan trọng nhất là phải sử dụng lợi thế của Logical Volume Manager.
Trong bài viết tiếp theo, tôi sẽ kể chuyện tôi đã làm như thế nào. Thực tế thì tôi đã cóng tay đến mức phải chạy nháp trên máy ảo trước khi làm thật. Có những chuyện lúc dùng VM không xảy ra, mà đến khi chạy thật mới gặp phải.
Tuy nhiên, sau tất cả thì đến bây giờ mọi thứ vẫn ổn. Tôi khá là tự tin vào cách làm này.
Bài viết này đưa ra cách nhanh nhất để mã hóa cũng như giải mã file trên linux. Việc mã hóa và giải mã sẽ sử dụng mật mã (symmetric-key - key đổi xứng)
I. Mã hóa file
Lệnh này sẽ mã hỏi bạn mật mã, hay ghi nhớ mật mã này. Sau khi quá trình mã hóa kết thúc, một file có tên là tesla.org.gpg sẽ xuất hiện. Đây chính là file đã được mã hóa.
II. Giải mã file
Phần mềm sẽ yêu cầu mật mã. Sau khi quá trình giải mã kết thúc, một file có tên là tesla.org sẽ xuất hiện.
III. Lưu ý.
Nếu mà bạn mã hóa, rồi giải mã ngay lập tức. Khả năng rất cao là khi giải mã phần mềm sẽ không yêu cầu nhập mã. Để yêu cầu gpg hỏi mật khẩu, cần thêm flag --no-symkey-cache,
flag này sẽ rất cần thiết lúc testing.
Đây là hướng dẫn lưu và chạy file config trong game csgo. Dưới đây là ví dụ cụ thể, bạn muốn tập ném smoke,
bạn chắc chắn sẽ phải gõ một đống lệnh mà bạn thậm chí không thể nhớ hết. Bạn không muốn mỗi lần tập ném
smoke lại phải gõ một đống lệnh. Và ngay cả khi có copy/paste, nó cũng quá bất tiện.
Bài hướng dẫn dưới đây giúp bạn khắc phục vấn đề này. Dưới đây là chi tiết cách làm.
Vào và tạo file tại thư mục
Tôi sẽ tạo file có tên là smk.cfg, lưu ý là đuôi file phải là .cfg
Khi phát triển phần mềm việc chia nhánh để phát triển độc lập, song song luôn xảy ra. Có nhánh xong trước, có nhánh sẽ hoàn thành sau. Làm sau để các nhánh chưa hoàn thành có thể có những tính năng từ nhánh chính (nhánh master) là vấn đề của bài viết này.
Kịch bản cụ thể như sau. Có 2 tính năng phát triển độc lập với nhau, theo lẽ đương nhiên, lập trình viên sẽ tạo ra 2 nhánh riêng biệt từ nhánh master. Hai nhánh này sẽ có tên lần lượt là
feature-1
feature-2
Nhánh feature-1 hoàn thành sớm và nhanh chóng merge vào master. Lúc này nhánh master đang có mã nguồn mới nhất từ nhánh feature-1. Vấn đề bây giờ đó là ở nhánh feature-2, nhánh feature-2 hiện tại chưa phát triển xong, tuy nhiên nhánh feature-2 muốn có các tính năng mới nhất mà hiện tại đang có ở nhánh master.
Sẽ có 2 cách làm trong kịch bản này:
Merge từ nhánh master qua nhánh feature-2
Rebase nhánh feature-2 đến nhánh master
Rebase dịch sang tiếng việt có nghĩa là chuyển nền, còn có thể hiểu cách khác là chuyển commit nguồn của một nhánh sang một commit khác.
Lưu ý là nhánh master đang nói ở đây cụ thể là điểm commit mới nhất, cuối cùng trên nhánh master.
Một lần nữa, vấn đề hiện tại đó là làm sao để nhánh feature-2 có các tính năng mới nhất từ nhánh master
và rồi lập trình viên có thể phát triển tiếp trên nhánh feature-2.
II. Giải pháp
1. Merge từ nhánh master qua nhánh feature-2
2. Rebase nhánh feature-2 qua nhánh master
Có thể nhận ra điểm khác biệt ngay lập tức đó là nhánh feature-2 được phát triển dựa vào commit màu xanh dương thay vì là màu xanh lá.
III. Ưu & Nhược Điểm.
1. Merge từ nhánh master qua nhánh feature-2
Ưu điểm: Nhìn rõ các commit lịch sử của nhánh feature-2, từng commit lúc này hoàn toàn ko có dính dáng gì đến commit mới nhất thuộc nhánh master2. Khi áp dụng giải pháp này, giả sử muốn quay lại các commit cũ thuộc nhánh feature-2, hoàn toàn là điểu dễ dàng, mã nguồn hoàn toàn không dính dáng gì đến nhánh feature-1 hết.
Nhược điểm: Git log nhìn sẽ rất xấu.
2. Rebase nhánh feature-2 sang commit mới nhất thuộc nhánh master
Ưu điểm: Git log nhìn sẽ cực kì, cực kì đẹp.
Nhược điểm: Các commit cũ của nhánh feature-2 lúc nhánh này dựa trên commit cũ thuộc nhánh master sẽ bị biến mất trên git log. Thay vào đó, các commit thuộc nhánh feature-2 sẽ hoàn toàn dựa trên commit mới nhất thuộc nhánh master. Giả sử như muốn quay lại các commit cũ, mã nguồn không dính dáng gì đến mã nguồn của feature-1, để làm được việc này khó khăn hơn rất nhiều so với phương pháp merge.
Khi merge hai branch với nhau, có những kiểu merge như sau
no fast forward: không chuyển tiếp nhanh
fast forward: chuyển tiếp nhanh
squash: nén 🏋️
2. Chi tiết từng loại merge
a. No Fast Forward (–no-ff)
Khi merge ở chế độ no fast forward, một commit merge sẽ được tạo ra trên git log cho dù khi merge có xảy ra conflict hay không. Đây là sở đồ khối khi áp dụng cách merge no fast forward
Lưu ý là sự khác nhau giữa các loại merge là ở commit merge cuối cùng (màu hồng)
Như ở trên sơ đồ khối, sự thay đổi của của nhánh(branch) tồn tại ở trên (B1, B2, B3), điểm cuối cùng (màu hồng) thực chất không có chứa thay đổi gì cả, ngoài trừ việc lưu ý rằng đây là commit merge từ nhánh có tên là branch vào nhánh master.
b. Fast Forward (–ff-only)
Khi merge ở chế độ fast forward, các commit từ nhánh mới sẽ chuyển tiếp qua nhánh đích và không có merge commit được tạo ra. Đây là sơ đồ khối các branch trước khi merge, không có commit màu hồng như đồ thị dành cho --no-fast-forward
Và đây là sơ đồ khối sau khi merge từ nhánh branch qua master
Như trong hình vẽ, nếu áp dụng fast forward, hoàn toàn không có merge commit như là no fast forward
c. Squash (–squash)
Squash có nghĩa là đè nén. Khi merge theo kiểu squash tất cả các commit thuộc nhánh sẽ bị nén với nhau lại sau đó merge vào nhánh đích. Đây là sơ đồ khối trước khi áp dụng merge squash (nó giống như là hình trước khi merge theo kiểu fast forward merge.
Còn đây là sơ đồ khối sau khi merge theo kiểu squash.
Như trong sơ đồ khối trên, sau khi merge theo kiểu squash, tất cả thay đổi trong các commit (B1, B2, B3) đều được nén lại thành một commit duy nhất (màu hồng). Khi mở git log của master, người xem sẽ chỉ thấy có commit đã nén mà ko thấy các commit (B1, B2, B3).
3. Ưu điểm và nhược điểm
a. Fast Forward
Ưu Điểm:
Khi nhìn vào git log ở nhánh bị merge vào, người xem sẽ thấy toàn bộ các commit ở trên nhánh gốc. Thêm vào đó, ở trên git log chúng ta sẽ thấy một đường thẳng. Việc sử dụng fast forward cực kì có ích khi ở trên branch bị merge, không có tồn tại thêm các commit mới, lúc này áp dụng fast forward dòng git log là một đường thẳng.
Nhược Điểm:
Khi áp dụng cách này, khi muốn biết là cái commit được tạo ra trên branch nào, khi này sẽ gặp khó khăn khi nhìn trên git log. Đây là hình ảnh lấy ra từ git log--graph khi áp dụng git merge --fast-forward
b. No Fast Forward
Ưu Điểm:
Cũng giống như là fast forward, người xem sẽ thấy toàn bộ commit của branch nhánh khi học xem git log. Thêm vào đó, người dùng còn biết được chính xác là commit được phát triển trên nhánh nào. Ưu điểm cuối cùng là khi nhìn git log--graph đẹp. Đây là hình ảnh ví dụ khi áp dụng git merge--no-ff.
Nhược Điểm:
Giả sử với một người phát triển phần mềm và commit liên tục, một chuỗi các commit nhỏ nhỏ xuất hiện trên git log kết quả là nhìn rất rất là không đẹp, những commit nhỏ nhỏ đó nên được nhóm lại thành một commit.
c. Squash
Ưu Điểm:
Khi nhìn vào git log, sẽ thấy git log cực kì sạch sẽ. Khi phát triển phần mềm, luôn luôn tồn tại những commit có message ít ý nghĩa, khi nhìn vào git log và đọc git message, thấy rất có vấn đề. Đặc biệt là những lập trình viên code và commit liên tục.
Nhược điểm:
Cực kì sạch sẽ quá cũng là vấn đề. Giả sử đó là một chuỗi commit, khi tìm cách debug theo brach ví dụ sử dụng git bisect , nhìn một cái commit đơn độc cũng khá là mệt.