Hexa's Blog

Quản lý version của ngôn ngữ theo dự án với ASDF

28/10/2020 Linux

Trong quá trình phát triển phần mềm, khả năng rất cao là mỗi dự án chúng ta sẽ cần đến một ngôn ngữ lập trình khác nhau, thêm vào mặc dù là chung ngôn ngữ nhưng phiên bản của ngôn ngữ lập trình thay đổi theo dự án. Việc quản trị ngôn ngữ lập trình và phiên bản của nó là cực kì quan trọng.

Phần mềm mà tôi thích sử dụng đó là asdf https://asdf-vm.com/ . Cách cài đặt thì có thể tìm thấy trực tiếp trên trang chủ của asdf. Bài viết này sẽ nói về những tính năng hay ho mà asdf tôi sử dụng hàng ngày.

Cơ chế hoạt động của asdf là tạo ra một lớp bọc phía bên ngoài cho các executable file , ứng với mỗi phiên bản, asdf sẽ chọn lựa và chạy file tương ứng. Việc quản lý version được làm tự động, lập trình viên chỉ việc config.

1. Cài đặt ngôn ngữ lập trình

ASDF cài đặt nhiều ngôn ngữ lập trình cũng như phiên bản của ngôn ngữ đó giúp bạn, cú pháp đơn giản, không cần config nhiều. Cần lưu ý là bạn phải cài plugin trước, Danh sách plugin có thể tìm ở đây https://asdf-vm.com/#/plugins-all.

Ví dụ như muốn cài elixir, thì bạn sẽ cần elixir-plugin.

  • Để cài đặt plugin, bạn sử dụng lệnh sau, trong đó elixir là tên plugin.
asdf plugin-add elixir
  • Để cài đặt ngôn ngữ, chạy lệnh sau, trong đó 1.9.1 là version.
asdf install elixir 1.9.1
[1] elixir 1.9.1
[1] elixir 1.9.1

2. Sử dụng bộ ngôn ngữ lập trình

Một dự án sẽ sử dụng rất nhiều ngôn ngữ lập trình, ví dụ như elixir cho backend, nodejs cho frontend, thêm vào đó trong trường hợp tôi dùng elixir tôi cần quan tâm đến cả erlang nữa. asdf sẽ giúp lập trình viên nhanh chóng chuyển phiên bản của ngôn ngữ lập trình theo dự án.

Ví dụ dưới đây là project_1project_2, hai dự án này nằm ở hai thư mục khác nhau. cả hai có điểm chung là đều sử dụng elixir tuy nhiên nhu cầu về phiên bản lại khác nhau, một cái là 1.9.1 , cái còn lại là 1.9.2

[2] project_1, elixir 1.9.1
[2] project_1, elixir 1.9.1
[3] project_2, elixir 1.9.2
[3] project_2, elixir 1.9.2

Tính năng này được để cập rất chi tiết tại đây https://asdf-vm.com/#/core-configuration.

Để làm được điều này, nói ngắn gọn bạn sẽ cần tạo file .tool-versions ở mỗi project. Trong file này sẽ liệt kê chi tiết version của language. Như trên hình, khi kiểm tra phiên bản của elixir, phiên bản đã hiển thị khác nhau.

File: project_1/.tool_versions

elixir 1.9.1
erlang 22.1
nodejs 10.16.3

File: project_2/.tool_versions

nodejs 13.0.1
erlang 22.1
elixir 1.9.2

How to create an application shortcut on Fedora?

06/06/2023 Linux

Inside $HOME, there is a directory named ~/.local/share/applications which containts all application shortcuts for the current user. To make a new application shortcut you need to make a new file named *.desktop with the following schema.

[Desktop Entry]
Type=Application
Name=Postman
Comment=Postman
Icon=/home/nguyenvinhlinh/Software/Postman-7.0.9/icon.png
Path=/home/nguyenvinhlinh/Software/Postman-7.0.9
Exec=/home/nguyenvinhlinh/Software/Postman-7.0.9/Postman
Terminal=false
Categories=Development;

To refresh/update application.desktop, you can use the following command:

update-desktop-database ~/.local/share/applications

If it all works correctly, a new application shortcut will be displayed on Gnome Search.

[1] GNOME Search
[1] GNOME Search

How to verify Hostinger domains for ZeroSSL certificate using DNS(CNAME)?

10/10/2020 SSL

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.

[1] Invalid CCA Record
[1] Invalid CCA Record

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.

[2] CCA List
[2] CCA 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.

|------+---------------------------+-------|
| name | content                   |   TTL |
|------+---------------------------+-------|
| @    | 0 issue "sectigo.com"     | 14400 |
| @    | 0 issuewild "sectigo.com" | 14400 |
|------+---------------------------+-------|

Reference: https://help.zerossl.com/hc/en-us/articles/360015629499-Verification-error-Invalid-CAA-Records

Đối mặt với SELinux

09/10/2020 Linux

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.

cat  /var/log/audit/audit.log | grep denied | audit2why

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.

cat  /var/log/audit/audit.log | grep denied | audit2allow -a -M my_module

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.

semodule -i my_module.pp

Sau khi kiểm tra cẩn thận, hay nhớ bật chế độ Enforcing cho SELinux.

LVM, Gia tăng logical volume!

10/05/2020 Linux

I. Giới thiệu

[1] Các lớp trừa tượng - LVM

Đâ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.

- Cắm ổ cứng mới vào bo mạch chủ
- Bật máy tính
---> Hệ điều hành không boot lên được
- Không cắm ổ cứng mới vào bo mạch chủ vội
- Bật máy tính, vào hệ điều hành
- Bây giờ mới cắm ổ cứng vào bo mạch chủ
---> Hệ điều hành không nhận được ổ đĩa mới  (kiểm tra với lệnh `lsblk`, hoặc phần mềm `gnome-disk`)

Để hệ điều hành nhận ổ cứng mới, tôi đã phải làm theo các bước sau.

- Format toàn bộ dữ liệu của ổ cứng mới (Nó đã được sử dụng và có hệ điều hành cũ trên đó)
- Cắm ổ cứng mới vào bo mạch chủ
- Bật hệ điều hành.
---> Hệ điều hành khởi động thành công, sau khi đăng nhập nó đã nhận được ổ đĩa mới.
Như trên hình, `sdb` là ổ đĩa mới.

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.

[2] Tạo GPT Partition table

b. Tạo phân vùng Linux LVM

Chọn chỉ mục có tên là add a new partition

[3] Tạo phân vùng mới

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
    Command (m for help): n
    Partition number (1-128, default 1): 1
    First sector (2048-4194270, default 2048): 2048
    Last sector, +sectors or +size{K,M,G,T,P} (2048-4194270, default 4194270): 4194270

    Created a new partition 1 of type 'Linux filesystem' and of size 2 GiB.

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

[4] Đổi loại phân vùng

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.

[4a] Đổi loại phân vùng

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

[5] Lưu lại thiết lập

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ề.

lvs;

Trong trường hợp của tôi. logical volume mà tôi muốn gia tăng dung lượng là homeroot. 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à roothome. 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.

lvextend fedora/home --size +400GB;
lvextend fedora/root --extents +100%FREE;

Để 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

df -h;

Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 7.8G     0  7.8G   0% /dev
tmpfs                    7.8G  245M  7.6G   4% /dev/shm
tmpfs                    7.8G   50M  7.8G   1% /run
tmpfs                    7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/mapper/fedora-root  116G  111G    0G 100% /
tmpfs                    7.8G   52K  7.8G   1% /tmp
/dev/sda1                976M  255M  655M  28% /boot
/dev/mapper/fedora-home  258G  258G    0G 100% /home

Trong trường hợp của tôi, hai filesystem mà tôi cần quan tâm là:

/dev/mapper/fedora-root
/dev/mapper/fedora-home

Để cập nhập filesystem sử dụng lệnh resize2fs

resize2fs /dev/mapper/fedora-root;
resize2fs /dev/mapper/fedora-home;

Bước cuối cùng, kiểm tra lại thông tin filesystem với df -h:

df -h;

Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                 7.8G     0  7.8G   0% /dev
tmpfs                    7.8G  245M  7.6G   4% /dev/shm
tmpfs                    7.8G   50M  7.8G   1% /run
tmpfs                    7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/mapper/fedora-root  211G  111G  100G  52% /
tmpfs                    7.8G   52K  7.8G   1% /tmp
/dev/sda1                976M  255M  655M  28% /boot
/dev/mapper/fedora-home  658G  258G  400G  39% /home

Phù phù phù, đã xong rồi đó.

Phân Vùng LVM - Ý Nghĩa và Phát Triển

09/05/2020 Linux

I. Logical Volume Manager (LVM)

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:

Ổ Đĩa (LEVEL 1) → Partition (LEVEL 2) → Physical Volume (LEVEL 3) → Physical Volume Group (LEVEL 4) → Logical Volume (LEVEL 5)
[1] Các Mức độ trìu tượng của LVM
[1] Các Mức độ trìu tượng của LVM

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.

[2] Chắc là không sao đâu!
[2] Chắc là không sao đâu!
  • 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.

Mã hóa và giải mã file trên linux sử dụng GPG

09/05/2020 Linux

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

gpg --symmetric tesla.org

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

gpg tesla.org.gpg

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.

CSGO, Cách lưu và chạy file config

09/01/2020 CSGO

Đâ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.

  1. Vào và tạo file tại thư mục
C:\Program Files (x86)\Steam\steamapps\common\Counter-Strike Global Offensive\csgo\cfg

Tôi sẽ tạo file có tên là smk.cfg, lưu ý là đuôi file phải là .cfg

  1. Edit nội dung file và lưu lại
sv_cheats 1;
sv_infinite_ammo 1;
ammo_grenade_limit_total 5;
mp_warmup_end;
mp_freezetime 0;
mp_roundtime 60;
mp_roundtime_defuse 60;
sv_grenade_trajectory 1;
sv_grenade_trajectory_time 10;
sv_showimpacts 1;
mp_limitteams 0;
mp_autoteambalance 0;
mp_maxmoney 60000;
mp_startmoney 60000;
mp_buytime 9999;
mp_buy_anywhere 1;
mp_restartgame 1;

bind "ALT" "noclip";
  1. Trong game, vào console và chạy lệnh
exec smk

smk chính là tên file config vừa nãy tôi đã tạo.

CSGO, Thiết lập để tập ném smoke

09/01/2020 CSGO

sv_cheats 1;
sv_infinite_ammo 1;
ammo_grenade_limit_total 5;
mp_warmup_end;
mp_freezetime 0;
mp_roundtime 60;
mp_roundtime_defuse 60;
sv_grenade_trajectory 1;
sv_grenade_trajectory_time 10;
sv_showimpacts 1;
mp_limitteams 0;
mp_autoteambalance 0;
mp_maxmoney 60000;
mp_startmoney 60000;
mp_buytime 9999;
mp_buy_anywhere 1;
mp_restartgame 1;
bot_kick;
bot_stop;
bind "ALT" "noclip";
bind "i" "bot_place";
alias +jumpthrow "+jump;-attack"; alias -jumpthrow "-jump"; bind mouse5 +jumpthrow;

CSGO, Thiết lập crosshair

09/01/2020 CSGO

cl_crosshair_drawoutline "0"
cl_crosshair_dynamic_maxdist_splitratio "0.35"
cl_crosshair_dynamic_splitalpha_innermod "1"
cl_crosshair_dynamic_splitalpha_outermod "0.5"
cl_crosshair_dynamic_splitdist "7"
cl_crosshair_friendly_warning "1"
cl_crosshair_outlinethickness "0.5"
cl_crosshair_sniper_show_normal_inaccuracy "0"
cl_crosshair_sniper_width "1"
cl_crosshair_t "0"
cl_crosshairalpha "250.000000"
cl_crosshaircolor "5"
cl_crosshaircolor_b "0"
cl_crosshaircolor_g "0"
cl_crosshaircolor_r "255"
cl_crosshairdot "0"
cl_crosshairgap "-2.500000"
cl_crosshairgap_useweaponvalue "0"
cl_crosshairscale "0"
cl_crosshairsize "3.000000"
cl_crosshairstyle "4"
cl_crosshairthickness "1.150000"
cl_crosshairusealpha "1"
cl_fixedcrosshairgap "3"