diff options
author | Valentin Popov <valentin@popov.link> | 2024-09-05 00:16:37 +0300 |
---|---|---|
committer | Valentin Popov <valentin@popov.link> | 2024-09-05 00:16:37 +0300 |
commit | 7eff3fde5720eb23449e2f8c8ea0b8218efe4dde (patch) | |
tree | fbaedd693902c1a6d56a005b28b189ef76fe23f4 /src | |
parent | ecf9a15e77509d344ab4ee02ae0dbf8a116021f1 (diff) | |
download | popov.link-7eff3fde5720eb23449e2f8c8ea0b8218efe4dde.tar.xz popov.link-7eff3fde5720eb23449e2f8c8ea0b8218efe4dde.zip |
Initial Astro project
Diffstat (limited to 'src')
-rw-r--r-- | src/content/blog/create-lib-file-from-dll.md | 51 | ||||
-rw-r--r-- | src/content/blog/electron-reload.md | 60 | ||||
-rw-r--r-- | src/content/blog/example-content.md | 133 | ||||
-rw-r--r-- | src/content/blog/getting-source-code-of-chromium.md | 185 | ||||
-rw-r--r-- | src/content/blog/installing-moodle-to-fedora.md | 23 | ||||
-rw-r--r-- | src/content/blog/rust-and-tl-mr3020.md | 172 | ||||
-rw-r--r-- | src/content/config.ts | 13 | ||||
-rw-r--r-- | src/env.d.ts | 1 | ||||
-rw-r--r-- | src/layouts/BaseLayout.astro | 27 | ||||
-rw-r--r-- | src/layouts/PageLayout.astro | 7 | ||||
-rw-r--r-- | src/layouts/PostLayout.astro | 7 | ||||
-rw-r--r-- | src/pages/blog/[...slug].astro | 20 | ||||
-rw-r--r-- | src/pages/index.astro | 18 |
13 files changed, 717 insertions, 0 deletions
diff --git a/src/content/blog/create-lib-file-from-dll.md b/src/content/blog/create-lib-file-from-dll.md new file mode 100644 index 0000000..54b61e2 --- /dev/null +++ b/src/content/blog/create-lib-file-from-dll.md @@ -0,0 +1,51 @@ +--- +title: 'Create ".lib" file from ".dll" (archive)' +author: "Adrian Henke" +pubDate: "2023-05-04" +description: "Learn how to generate a *.lib file from a *.dll with this comprehensive guide. Using the Visual Studio Command Prompt and Microsoft's recommended tools, this article walks you through the steps for a seamless process. Perfect for developers working with 3rd party win dll's." +--- + +> This's a copy of a non-my post. The original article [is here](https://adrianhenke.wordpress.com/2008/12/05/create-lib-file-from-dll/) ([archive](https://web.archive.org/web/20161118122539/https://adrianhenke.wordpress.com/2008/12/05/create-lib-file-from-dll/)). + +When working with 3rd party win dll's you sometimes miss the according to the `*.lib` file required to compile against it. There is an [Microsoft KB-Q131313](http://support.microsoft.com/?scid=kb%3Ben-us%3B131313&x=1&y=15) ([archive](https://jeffpar.github.io/kbarchive/kb/131/Q131313/)) article showing how to generate a `*.lib` file from a `*.dll` however the required steps are not described detailed enough I think. So here is my quick guide. + +Open the "Visual Studio Command Prompt", you find its shortcut in "_Start_" -> "_Programs_" -> "_Microsoft Visual Studio Tools_". Now run the `dumpbin` command to get a list of all exported functions of your dll: + +```bash +dumpbin /exports C:\\yourpath\\yourlib.dll +``` + +This will print quite a bit of text to the console. However, we are only interested in the functions: + +``` +ordinal hint RVA name + +1 0 00017770 jcopy_block_row +2 1 00017710 jcopy_sample_rows +3 2 000176C0 jdiv_round_up +4 3 000156D0 jinit_1pass_quantizer +5 4 00016D90 jinit_2pass_quantizer +6 5 00005750 jinit_c_coef_controller +...etc +``` + +Now copy all those function names (only the names!) and paste them into a new text file. Name the next file `yourlib.def` and put the line "EXPORTS" at its top. My `yourlib.def` file looks like this: + +``` +EXPORTS +jcopy_block_row +jcopy_sample_rows +jdiv_round_up +jinit_1pass_quantizer +jinit_2pass_quantizer +jinit_c_coef_controller +... +``` + +Now from that definition file, we can finally create the `*.lib` file. We use the `lib` tool for this, so run this command in your "Visual Studio Command Prompt": + +```bash +lib /def:C:\\mypath\\mylib.def /OUT:C:\\mypath\\mylib.lib +``` + +That's it, happy coding π diff --git a/src/content/blog/electron-reload.md b/src/content/blog/electron-reload.md new file mode 100644 index 0000000..a07d274 --- /dev/null +++ b/src/content/blog/electron-reload.md @@ -0,0 +1,60 @@ +--- +title: "ΠΠΎΡΡΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ° ElectronJS ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ" +author: "Valentin Popov" +pubDate: "2019-08-15" +description: "Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Electron Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² electron-reload ΠΈ electron-webpack. ΠΠ±Ρ
ΠΎΠ΄ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ HMR Π΄Π»Ρ renderer ΠΏΡΠΎΡΠ΅ΡΡΠ°." +--- + +## Main ΠΏΡΠΎΡΠ΅ΡΡ + +ΠΠ»Ρ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ [electron-reload]. ΠΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° [electron-webpack]. + +ΠΡΠ»ΠΈ ΡΠ±ΠΎΡΡΠΈΠΊ ΠΊΠΎΠ΄Π° ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΠΎΡ WebPack ΠΈΠ»ΠΈ Π½Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΡΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ [nodemon]. ΠΠΎΠΌΠ°Π½Π΄Π° Π·Π°ΠΏΡΡΠΊΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: + +```bash +nodemon --watch ./assets/main.js --exec 'electron .' +``` + +ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΡΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡΡ
ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°. + +## Renderer ΠΏΡΠΎΡΠ΅ΡΡ + +ΠΠ»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ renderer ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠΆΠ°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ. ΠΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΡΡΠ°Π½ΠΈΡΡ. Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±, Π³ΠΎΡΡΡΠΈΠ΅ ΠΊΠ»Π°Π²ΠΈΡΠΈ: `Ctrl` + `F5`. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅Π½Π΄Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΡΡΡΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌ ΠΎΠΊΠ½ΠΎΠΌ Π±ΡΠ°ΡΠ·Π΅ΡΠ°, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ [HMR] ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ. + +ΠΠ½Π΅ ΡΠΈΠΌΠΏΠ°ΡΠΈΡΠ΅Π½ ΡΠΏΠΎΡΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ° [electron-reload]. Π Π°Π»Π³ΠΎΡΠΈΡΠΌΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° Π»Π΅ΠΆΠΈΡ ΠΏΡΠΎΡΡΠΎΠ΅ ΡΠ»Π΅ΠΆΠ΅Π½ΠΈΠ΅ Π·Π° ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠΌ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π°ΠΊΡΠΈΠ²Π½ΡΡ
ΠΎΠΊΠΎΠ½ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. + +ΠΠΎ ΠΌΠ½ΠΎΡ Π±ΡΠ»Π° Π½Π°ΠΉΠ΄Π΅Π½Π° Π΄ΠΎΡΠ°Π΄Π½Π°Ρ [ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°], Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²Π΅ΡΡΠΈΠΈ `1.5.0` ΠΈ `1.4.1` ΡΠΎ ΡΠ±ΠΎΡΡΠΈΠΊΠΎΠΌ WebPack, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅. + +Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ ΠΏΡΠΎΠ΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» ΠΏΠ°ΠΊΠ΅ΡΠ° Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅: + +```javascript +import { app } from "electron"; +import chokidar from "chokidar"; + +const browserWindows = []; + +app.on("browser-window-created", (event, window) => { + browserWindows.push(window); + + window.on("closed", () => { + const index = browserWindows.indexOf(window); + browserWindows.splice(index, 1); + }); +}); + +if (process.env.NODE_ENV !== "production") { + const watcher = chokidar.watch(__dirname, { ignored: [/node_modules|[/\\]\./] }); + + watcher.on("change", () => { + browserWindows.forEach((window) => { + window.webContents.reloadIgnoringCache(); + }); + }); +} +``` + +[HMR]: https://webpack.js.org/concepts/hot-module-replacement/ +[electron-reload]: https://www.npmjs.com/package/electron-reload +[electron-webpack]: https://www.npmjs.com/package/electron-webpack +[nodemon]: https://www.npmjs.com/package/nodemon +[ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°]: https://github.com/yan-foto/electron-reload/issues/66 diff --git a/src/content/blog/example-content.md b/src/content/blog/example-content.md new file mode 100644 index 0000000..68b09e5 --- /dev/null +++ b/src/content/blog/example-content.md @@ -0,0 +1,133 @@ +--- +title: "Example Content" +author: "Example User" +pubDate: "2018-01-01" +description: "Howdy! This is an example blog post that shows several types of HTML content supported in this theme." +--- + +Cum sociis natoque penatibus et magnis <a href="#">dis parturient montes</a>, nascetur ridiculus mus. _Aenean eu leo quam._ Pellentesque ornare sem lacinia quam venenatis vestibulum. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum. + +> Curabitur blandit tempus porttitor. Nullam quis risus eget urna mollis ornare vel eu leo. Nullam id dolor id nibh ultricies vehicula ut id elit. + +Etiam porta **sem malesuada magna** mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur. + +## Inline HTML elements + +HTML defines a long list of available inline tags, a complete list of which can be found on the [Mozilla Developer Network](https://developer.mozilla.org/en-US/docs/Web/HTML/Element). + +- **To bold text**, use `<strong>`. +- _To italicize text_, use `<em>`. +- Abbreviations, like <abbr title="HyperText Markup Langage">HTML</abbr> should use `<abbr>`, with an optional `title` attribute for the full phrase. +- Citations, like <cite>— Mark otto</cite>, should use `<cite>`. +- <del>Deleted</del> text should use `<del>` and <ins>inserted</ins> text should use `<ins>`. +- Superscript <sup>text</sup> uses `<sup>` and subscript <sub>text</sub> uses `<sub>`. + +Most of these elements are styled by browsers with few modifications on our part. + +## Heading + +Vivamus sagittis lacus vel augue rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. + +### Code + +Cum sociis natoque penatibus et magnis dis `code element` montes, nascetur ridiculus mus. + +```js +// Example can be run directly in your JavaScript console + +// Create a function that takes two arguments and returns the sum of those arguments +var adder = new Function("a", "b", "return a + b"); + +// Call the function +adder(2, 6); +// > 8 +``` + +Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa. + +### Gists via GitHub Pages + +Vestibulum id ligula porta felis euismod semper. Nullam quis risus eget urna mollis ornare vel eu leo. Donec sed odio dui. + +{% gist 5555251 gist.md %} + +Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec sed odio dui. Vestibulum id ligula porta felis euismod semper. + +### Lists + +Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. + +- Praesent commodo cursus magna, vel scelerisque nisl consectetur et. +- Donec id elit non mi porta gravida at eget metus. +- Nulla vitae elit libero, a pharetra augue. + +Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue. + +1. Vestibulum id ligula porta felis euismod semper. +2. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. +3. Maecenas sed diam eget risus varius blandit sit amet non magna. + +Cras mattis consectetur purus sit amet fermentum. Sed posuere consectetur est at lobortis. + +<dl> + <dt>HyperText Markup Language (HTML)</dt> + <dd>The language used to describe and define the content of a Web page</dd> + + <dt>Cascading Style Sheets (CSS)</dt> + <dd>Used to describe the appearance of Web content</dd> + + <dt>JavaScript (JS)</dt> + <dd>The programming language used to build advanced Web sites and applications</dd> +</dl> + +Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Nullam quis risus eget urna mollis ornare vel eu leo. + +### Images + +Quisque consequat sapien eget quam rhoncus, sit amet laoreet diam tempus. Aliquam aliquam metus erat, a pulvinar turpis suscipit at. + +![placeholder](http://placehold.it/800x400 "Large example image") ![placeholder](http://placehold.it/400x200 "Medium example image") ![placeholder](http://placehold.it/200x200 "Small example image") + +### Tables + +Aenean lacinia bibendum nulla sed consectetur. Lorem ipsum dolor sit amet, consectetur adipiscing elit. + +<table class="table"> + <thead> + <tr> + <th>Name</th> + <th>Upvotes</th> + <th>Downvotes</th> + </tr> + </thead> + <tfoot> + <tr> + <td>Totals</td> + <td>21</td> + <td>23</td> + </tr> + </tfoot> + <tbody> + <tr> + <td>Alice</td> + <td>10</td> + <td>11</td> + </tr> + <tr> + <td>Bob</td> + <td>4</td> + <td>3</td> + </tr> + <tr> + <td>Charlie</td> + <td>7</td> + <td>9</td> + </tr> + </tbody> +</table> + +Nullam id dolor id nibh ultricies vehicula ut id elit. Sed posuere consectetur est at lobortis. Nullam quis risus eget urna mollis ornare vel eu leo. + +--- + +Want to see something else added? <a href="https://github.com/poole/poole/issues/new">Open an issue.</a> diff --git a/src/content/blog/getting-source-code-of-chromium.md b/src/content/blog/getting-source-code-of-chromium.md new file mode 100644 index 0000000..e1568f5 --- /dev/null +++ b/src/content/blog/getting-source-code-of-chromium.md @@ -0,0 +1,185 @@ +--- +title: 'ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° "Chromium Projects"' +author: "Valentin Popov" +pubDate: "2012-01-30" +description: "ΠΠ·ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΠΊΠΎΠ΄ΠΎΠ² Chromium: ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ². Π ΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ
ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ². ΠΠΎΠ»ΡΡΠΈΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ Microsoft Visual Studio, Cygwin, Python ΠΈ Π΄ΡΡΠ³ΠΈΡ
ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ². ΠΠ΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π° ΡΠ½Π²Π°ΡΡ-ΡΠ΅Π²ΡΠ°Π»Ρ 2012 Π³ΠΎΠ΄Π°." +--- + +> ΠΠ΅ΡΠ΅Π½ΠΎΡ [ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΉ ΡΡΠ°ΡΡΠΈ](https://adeptus-mechanicus.blogspot.com/2012/01/chromium-projects.html) 2012 Π³ΠΎΠ΄Π° ΠΈΠ· ΠΌΠΎΠ΅Π³ΠΎ [ΡΡΠ°ΡΠΎΠ³ΠΎ Π±Π»ΠΎΠ³Π°](https://adeptus-mechanicus.blogspot.com/) ([Π·Π΅ΡΠΊΠ°Π»ΠΎ](https://web.archive.org/web/20160217052148/http://adeptus-mechanicus.blogspot.com/)). + +**ΠΠΎΠ±ΡΡΠΉ Π΄Π΅Π½Ρ, ΡΠ²Π°ΠΆΠ°Π΅ΠΌΡΠ΅ ΡΠΈΡΠ°ΡΠ΅Π»ΠΈ!** + +Π ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π΄Π½ΠΈ Π²ΡΠ΄Π°Π»ΠΎΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΠΈ Ρ ΡΠ΅ΡΠΈΠ» ΠΈΠ·ΡΡΠΈΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠ΅ ΠΊΠΎΠ΄Ρ "[The Chromium Projects](http://www.chromium.org/)". Π§ΡΠΎΠ±Ρ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ, ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΠΌ ΠΏΡΠΎΡΡΠΎ ΡΠΊΠ°ΡΠ°ΡΡ Π°ΡΡ
ΠΈΠ² Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Π½Π°ΡΠ°ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π½ΠΈΠΌ Π² "Visual Studio 2010". Π― Π±ΡΠ» ΠΊΡΠ°ΠΉΠ½Π΅ ΠΎΠΏΠ΅ΡΠ°Π»Π΅Π½ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ΠΌ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΡΡΠΊΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ
, ΠΏΠΎΡΡΠΎΠΌΡ Π²ΠΎΡΠΏΠΎΠ»Π½Ρ ΠΏΡΠΎΠ±Π΅Π» ΠΈ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Ρ Π²ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΠΊΠΎΠ΄ΠΎΠ². + +**\_P.S.** Chromium ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΡΡΡΡΠΎΡΠ°Π·Π²ΠΈΠ²Π°ΡΡΠΈΠΌΡΡ Open Sources ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ.\_ _ΠΠ°Π½Π½Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π°ΠΊΡΡΠ°Π»ΡΠ½Π° Π½Π° ΡΠ½Π²Π°ΡΡ-ΡΠ΅Π²ΡΠ°Π»Ρ 2012 Π³ΠΎΠ΄Π°._ + +ΠΠ»Ρ Π½Π°ΡΠ°Π»Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΡ. ΠΠ΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΡ, Π΄ΠΎ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌΠΈ ΠΊΠΎΠ΄Π°ΠΌΠΈ Ρ ΡΡΠ»ΠΎΠ²Π½ΠΎ ΡΠ°Π·Π΄Π΅Π»Ρ Π½Π° ΡΠ΅ΡΡΡΠ΅ ΠΏΡΠ½ΠΊΡΠ°, ΡΡΠΎ: + +- ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ
ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠΎΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°; +- Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ "Cygwin"; +- Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠ° "depot_tools"; +- ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΠΊΠΎΠ΄ΠΎΠ² "Chromium"; + +## ΠΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ + +ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Ρ ΡΠΏΠΈΡΠΎΠΊ ΠΈ ΠΊΡΠ°ΡΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΠ°Π±ΠΎΡΠΎΠΉ Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌΠΈ ΠΊΠΎΠ΄Π°ΠΌΠΈ: + +- "**Microsoft Visual Studio 2010**" β Π‘ΡΠ΅Π΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. ΠΠΌΠ΅Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Microsoft Visual Studio 2008 ΠΈ Microsoft Visual C++ Express 2010'Π³ΠΎ ΠΈ 2008'Π³ΠΎ Π³ΠΎΠ΄ΠΎΠ² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. ΠΠ΅ΡΠΏΠ»Π°ΡΠ½ΡΠ΅ Express Π²Π΅ΡΡΠΈΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡΡ Π½Π° [ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΡΠ΅](http://www.microsoft.com/express) Microsoft. + +- "**Microsoft Windows SDK**" β ΠΠ°ΠΊΠ΅Ρ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ², Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ² ΠΈ ΠΏΡ. Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Windows. Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΏΠΎΠ΄ Windows ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ΅ΡΠΏΠ»Π°ΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ Ρ [ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ](https://www.microsoft.com/downloads/en/details.aspx?FamilyID=6b6c21d2-2006-4afa-9702-529fa782d63b). + +- "**Microsoft DirectX SDK**" β ΠΠ°ΠΊΠ΅Ρ Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΠΌΡΠ»ΡΡΠΈΠΌΠ΅Π΄ΠΈΠΉΠ½ΠΎΠΉ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ DirectX. Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠ΅ΡΠΏΠ»Π°ΡΠ½ΠΎ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π° [ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΡΠ΅](http://msdn.microsoft.com/en-us/directx/default.aspx). + +- "**Python 2.x**" β ΠΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΠΊΠΎΠ΄ΠΎΠ². Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°Ρ, Π½ΠΎ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½Π°Ρ. ΠΡΠΎ ΡΡΠ΅ΡΡΡ Π²Π΅ΡΡΠΈΡ Python ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π΅Ρ, Ρ ΠΌΠ΅Π½Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ ΠΎΠ±Π΅ Π²Π΅ΡΡΠΈΠΈ Π΄Π»Ρ ΠΎΠΏΡΡΠΎΠ² ΠΈ "Path" ΡΠΈΡΡΠ΅ΠΌΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ Π½Π° Π²ΡΠΎΡΡΡ Π²Π΅ΡΡΠΈΡ. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΡ Python ΠΊΠΎΡΠΎΡΠΊΠΎ ΡΠ°Π·Π±Π΅ΡΡ Π½ΠΈΠΆΠ΅. Python Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²Π·ΡΡΡ Π½Π° [ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΡΠ΅](http://python.org/). + +- "**Cygwin**" β Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½Π°Ρ ΡΡΠ΅Π΄Π° ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌ Microsoft Windows. Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌΠΈ ΠΊΠΎΠ΄Π°ΠΌΠΈ, ΠΈΡ
ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° ΠΎΡΠΈΠ±ΠΊΠΈ. Π‘Π°ΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π° [ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅](http://www.cygwin.com/). ΠΠ³ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ Ρ ΡΠ°ΡΠΏΠΈΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
ΠΏΡΠ½ΠΊΡΠ°Ρ
. + +- "**TortoiseSVN**" β ΠΠ»ΠΈΠ΅Π½Ρ Subversion ΠΏΠΎΠ΄ ΡΠΈΡΡΠ΅ΠΌΡ Windows. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½Π°Ρ, Π½ΠΎ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½Π°Ρ. Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ° "depot_tools" ΠΈΠ· ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ SVN ΠΎΡ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠΈ Google. ΠΠ΅ΡΠΏΠ»Π°ΡΠ½ΠΎ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π° [ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅](http://tortoisesvn.net/). + +ΠΠ°Π΄ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ Microsoft Visual Studio, Microsoft Windows SDK ΠΈ Microsoft DirectX SDK Ρ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π½Π΅ Π±ΡΠ΄Ρ. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½ΡΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ
ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠΎΠ² ΠΏΡΠΎΡΡΠ°, ΠΈ ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π°. Π ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΊΠ°ΠΊΠΈΡ
-Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΈΠΌΠ΅ΡΡΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΌΠΎΠ³ΡΡ Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ. + +**ΠΠ° ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° Python'Π° Ρ ΠΎΡΡΠ°Π½ΠΎΠ²Π»ΡΡΡ ΠΏΠΎΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅:** + +ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ
, ΠΏΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Python'Π° Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΡΡΡΠΊΠΎΡΠ·ΡΡΠ½ΡΠΉ ΡΠ΅ΠΊΡΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΠΈΠ±ΠΎΠΊ. + +ΠΠΎ-Π²ΡΠΎΡΡΡ
, ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°, Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΈΠΌΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π² ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΡΠ΅ΠΉ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΈΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΡΠ°ΠΉΠ»Ρ. Π§ΡΠΎΠ±Ρ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ: + +1. ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ "_ΠΠ°Π½Π΅Π»Ρ Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ_" ΠΈ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ "_Π‘ΠΈΡΡΠ΅ΠΌΠ°_"; +2. ΠΡΠ±Π΅ΡΠΈΡΠ΅ "_ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΡ_"; +3. ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΡ "_ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ_" ΠΈ ΡΡΠ»ΠΊΠ½ΠΈΡΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅ "_ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΡΠ΅Π΄Ρ_"; +4. Π ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌ ΠΎΠΊΠ½Π° "_Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅_" Π½Π°ΠΉΠ΄ΠΈΡΠ΅ ΡΡΡΠΎΠΊΡ "_Path_"; +5. ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΡΡΠ΄Π° ΠΏΡΡΡ Π΄ΠΎ Π²Π°ΡΠ΅Π³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Python. + +Π ΠΌΠΎΡΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎΡ ΠΏΡΡΡ Π²ΡΠ³Π»ΡΠ΄Π΅Π» ΡΠ°ΠΊ: `C:\Program Files (x86)\Python2`. ΠΡΡΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°Π·Π΄Π΅Π»ΡΡΡΡΡ Π·Π½Π°ΠΊΠΎΠΌ `;`, ΠΏΠΎ ΡΡΠΎΠΌΡ Π½Π΅ Π·Π°Π±ΡΠ΄ΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠΌ Π΄ΠΎΠΏΠΈΡΠ°ΡΡ `;` (Π±Π΅Π· ΠΊΠ°Π²ΡΡΠ΅ΠΊ); + +Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΡΠ·ΡΠΊΠ° Python Π² ΠΠ°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, ΠΎΡΠΊΡΠΎΠΉΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ Windows ΠΈ Π²Π²Π΅Π΄ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ: + +```bash +python --version +``` + +ΠΠ° ΡΠΊΡΠ°Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Ρ Π²Π΅ΡΡΠΈΠ΅ΠΉ Python, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΠ°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. + +**Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ.** ΠΠ°ΡΠ°Π»ΠΎΠ³ ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΠΊΠΎΠ΄ΠΎΠ² Π² ΠΌΠΎΡΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π½Π° Π΄ΠΈΡΠΊΠ΅ `C:\`, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ±Π΅Π»Ρ Π² ΠΏΡΡΠΈ Π°Π΄ΡΠ΅ΡΠ° Π΄ΠΎ ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΠΊΠΎΠ΄ΠΎΠ² ΠΈ ΠΌΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΡΡΠΊΠΎΡΠ·ΡΡΠ½ΡΡ
ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². + +ΠΠ° Π΄ΠΈΡΠΊΠ΅ `C:\` Ρ ΡΠΎΠ·Π΄Π°Π» ΠΊΠ°ΡΠ°Π»ΠΎΠ³ `OpenSource`, Π² Π½ΡΠΌ Ρ ΡΠΎΠ·Π΄Π°Π» ΠΊΠ°ΡΠ°Π»ΠΎΠ³ `ChromiumProjects`, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ Π΄Π²Π° ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° `depot_tools` ΠΈ `trunk`. Π’.Π΅. ΡΠΈΡΡΠ΅ΠΌΠ° ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ: + +- `C:\OpenSource\ChromiumProjects\depot_tools` β ΠΠ°ΠΊΠ΅Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ; +- `C:\OpenSource\ChromiumProjects\trunk` β ΠΠ΅ΡΡΠΎ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΠΊΠΎΠ΄ΠΎΠ²; + +Π ΡΠ»ΡΡΠ°Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΡ
ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² Π² Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΏΡΡΠΈ, ΠΏΠΎΠ΄ΡΡΠ°Π²Π»ΡΡ ΠΈΡ
Π² ΠΌΠΎΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ. + +Π’Π°ΠΊ ΠΆΠ΅ ΠΊΡΠ°ΠΉΠ½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ Π² Π΄Π°Π½Π½ΡΡ
ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ
, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΡΠ°ΡΠ°Π»ΡΠ½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ°Π±ΠΎΡΡ ΠΏΠ°ΠΊΠ΅ΡΠ° "depot*tools". Π§ΡΠΎΠ±Ρ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΠΎΡΠΊΡΠΎΠΉΡΠ΅ "*ΠΠ°Π½Π΅Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ*", Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΠΈΠΊΡΠΎΠ³ΡΠ°ΠΌΠΌΡ "*ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ*", Π½Π°ΠΆΠΌΠΈΡΠ΅ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ "*ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ\_" ΠΈ ΡΠ½ΠΈΠΌΠΈΡΠ΅ Π³Π°Π»ΠΎΡΠΊΡ Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΡΡΠΈΠ»ΠΈΡΡ "depot_tools". + +ΠΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ ΠΎΠΊΠΎΠ½ΡΠ΅Π½Π½ΠΎΠΉ. ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΠΌ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΡΠ°Π³Ρ. + +## Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ "Cygwin" + +ΠΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΏΠΎ ΡΡΠΎΠΉ [ΡΡΡΠ»ΠΊΠ΅](http://cygwin.com/setup.exe). Π£ΡΡΠ°Π½ΠΎΠ²ΠΎΡΠ½ΡΠΉ ΡΠ°ΠΉΠ» Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠΊΠ°ΡΠΈΠ²Π°Π΅Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΠΈΠ· ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°. ΠΠΎΠ³Π΄Π° Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠ°ΠΉΠ», ΡΠ»Π΅Π΄ΡΠΉΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌ. ΠΠΎΡΠ»Π΅ Π²ΡΠ±ΠΎΡ Π·Π΅ΡΠΊΠ°Π»Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΠΠ°ΠΌ ΠΏΠΎΠΊΠ°ΠΆΡΡ ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Ρ Π·Π΅ΡΠΊΠ°Π»Π°. Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π°ΠΉΡΠΈ ΠΈ ΠΎΡΠΌΠ΅ΡΠΈΡΡ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ: + +- `apache`; +- `bc`; +- `bison`; +- `curl`; +- `diffutils`; +- `e2fsprogs`; +- `emacs`; +- `flex`; +- `gcc`; +- `gperf`; +- `keychain`; +- `make`; +- `nano`; +- `openssh`; +- `patch`; +- `perl`; +- `perl-libwin32`; +- `python`; +- `rebase`; +- `rsync`; +- `ruby`; +- `subversion`; +- `unzip`; +- `vim`; +- `zip`; + +ΠΠΌΠ΅Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ. ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΠΏΠΎΠΈΡΠΊΠΎΠΌ ΠΏΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°ΠΌ, Π²ΠΊΠ»ΡΡΡΠ½Π½ΡΠΌ Π² ΡΠ°ΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ. ΠΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΈΠ»ΡΠ½ΠΎ ΠΎΠ±Π»Π΅Π³ΡΠΈΡΡ Π·Π°Π΄Π°ΡΡ. + +ΠΠΊΡΡΠ°Π»ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΡΡΠ΅Π±ΡΡΡΠΈΡ
ΡΡ Π΄Π»Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, ΠΡ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ Π² [ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠΊΡΠΈΠΏΡΠ΅](http://trac.webkit.org/browser/trunk/Tools/CygwinDownloader/cygwin-downloader.py) ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, Π² ΠΏΠΎΠ»Π΅ `required_packages`. + +ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²Π½Π΅ΡΡΠΈ ΠΏΡΡΡ Π΄ΠΎ ΠΏΠ°ΠΏΠΊΠΈ Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ "Path". Π‘Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π² ΡΠΎΡΠ½ΠΎΡΡΠΈ, ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° Python'Π°, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ ΡΡΡΡ Π²ΡΡΠ΅ Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅. Π’ΠΎΠ»ΡΠΊΠΎ Π² ΠΎΡΠ»ΠΈΡΠΈΠΈ ΠΎΡ Python'Π°, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ ΠΏΡΡΡ Π΄ΠΎ ΠΏΠ°ΠΏΠΊΠΈ `bin`, Π½Π°Ρ
ΠΎΠ΄ΡΡΠ΅ΠΉΡΡ Π² ΠΊΠΎΡΠ½Π΅Π²ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ "Cygwin". Π ΠΌΠΎΡΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎΡ ΠΏΡΡΡ Π²ΡΠ³Π»ΡΠ΄Π΅Π» ΡΠ°ΠΊ: `C:\Program Files (x86)\Cygwin\bin`. + +ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ "Cygwin", ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΈΡΡ ΠΊ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΡΠ°Π³Ρ, Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° "depot_tools". + +## Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°ΠΊΠ΅ΡΠ° "depot_tools" + +1. ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΠΊΠΎΡΠΎΡΡΠΉ ΠΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ° "depot_tools"; +2. ΠΠ°Ρ
ΠΎΠ΄ΡΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅, Π½Π°ΠΆΠΌΠΈΡΠ΅ ΠΏΡΠ°Π²ΡΡ ΠΊΠ½ΠΎΠΏΠΊΡ ΠΌΡΡΠΈ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠΌ ΠΌΠ΅Π½Ρ Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΠΏΡΠ½ΠΊΡ "_SVN Checkout_"; +3. Π ΠΏΡΡΠΈ URL ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, ΡΠΊΠ°Π·ΡΠ²Π°ΠΉΡΠ΅ ΠΏΡΡΡ: `http://src.chromium.org/svn/trunk/tools/depot_tools`; + +ΠΡΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ, ΠΏΠΎΠΉΠ΄ΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΠ΅Π²ΠΈΠ·ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅ΡΠ°. ΠΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠ°, ΠΏΡΡΡ Π΄ΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² ΠΏΠ°ΠΊΠ΅ΡΠ° ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ "Path", ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ "Cygwin" ΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ "Python". Π ΠΌΠΎΡΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΏΡΡΡ Π²ΡΠ³Π»ΡΠ΄Π΅Π» ΡΠ°ΠΊ: `C:\OpenSource\ChromiumProjects\depot_tools`. + +ΠΡΠ»ΠΈ Π²ΡΡ ΠΏΡΠΎΡΠ»ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ Π·Π°ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ°ΡΡΠΈ ΡΡΠ°ΡΡΠΈ, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΠΊΠΎΠ΄ΠΎΠ² Π±ΡΠ°ΡΠ·Π΅ΡΠ° "Chromium". + +## ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΠΊΠΎΠ΄ΠΎΠ² + +ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΉ [ΡΡΡΠ»ΠΊΠ΅](http://chromium-browser-source.commondatastorage.googleapis.com/chromium_tarball.html) ΠΈ ΡΠΊΠ°ΡΠ°ΠΉΡΠ΅ Π°ΡΡ
ΠΈΠ² Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌΠΈ ΠΊΠΎΠ΄Π°ΠΌΠΈ. ΠΡ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π°ΡΡ
ΠΈΠ² Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ "_chromium.r**XXXXX**.tgz_", Π³Π΄Π΅ **XXXXX** β Π½ΠΎΠΌΠ΅Ρ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠΈ. + +Π Π°ΡΠΏΠ°ΠΊΡΠΉΡΠ΅ ΠΈΠ· Π°ΡΡ
ΠΈΠ²Π° ΠΏΠ°ΠΏΠΊΡ `src` Π² Π½Π°Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ `trunk`. ΠΡΠΎΡΠ΅ΡΡ Π·Π°ΠΉΠΌΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ±ΡΡΠΌ ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΠΊΠΎΠ΄ΠΎΠ² ~4 ΠΠ±. ΠΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ, ΠΎΡΠΊΡΠΎΠΉΡΠ΅ ΡΠ΅ΡΠΌΠΈΠ½Π°Π» "Cygwin". + +Π ΠΎΡΠΊΡΡΡΠΎΠΌ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅ ΡΠ΅ΠΏΠ΅ΡΡ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΎΠΉΡΠΈ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ `src`, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠ°ΡΠΏΠ°ΠΊΠΎΠ²ΠΊΠΈ ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΠΊΠΎΠ΄ΠΎΠ². ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄ ΠΏΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°ΠΌ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ `cd`. Π§ΡΠΎΠ±Ρ ΠΏΠΎΠΏΠ°ΡΡΡ Π½Π° Π΄ΠΈΡΠΊ `C:\`, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅ Π½Π°Π±ΡΠ°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ: + +```bash +cd "C:/" +``` + +Π§ΡΠΎΠ±Ρ Π²Π΅ΡΠ½ΡΡΡΡΡ Π½Π° ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π²ΡΡΠ΅, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π°Π±ΡΠ°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ: + +```bash +cd .. +``` + +Π Unix-ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°Ρ
Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΠΊΠΎΡΠ°Ρ ΡΠ΅ΡΡΠ°. ΠΠΎ ΡΡΠΎΠΌΡ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² ΡΡΠ΅Π±ΡΠ΅ΠΌΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π½Π° ΠΌΠΎΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ: + +```bash +cd "C:/OpenSource/ChromiumProjects/trunk/src" +``` + +Π’Π΅ΠΏΠ΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ Π² ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅, Π½Π°Π΄ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΠΊΠΎΠ΄ΠΎΠ². ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²Π΅Π΄ΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ: + +```bash +gclient sync --force +``` + +ΠΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠ΅ ΠΊΠΎΠ΄Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ "_Visual Studio 2010_". ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ: + +```bash +gclient runhooks --force +``` + +ΠΠΎ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π³ΠΎΡΠΎΠ²ΡΠ΅ ΠΊ ΡΠ°Π±ΠΎΡΠ΅ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠ΅ ΠΊΠΎΠ΄Ρ. Π§ΡΠΎΠ±Ρ Π½Π°ΡΠ°ΡΡ Ρ Π½ΠΈΠΌΠΈ ΡΠ°Π±ΠΎΡΡ, ΠΎΡΠΊΡΠΎΠΉΡΠ΅ ΠΠ°ΡΡ "Visual Studio", Π²ΡΠ±Π΅ΡΠΈΡΠ΅ "_ΠΡΠΊΡΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡ_" ΠΈ ΠΎΡΠΊΡΠΎΠΉΡΠ΅ ΡΠ°ΠΉΠ» `chrome.sln`, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ `chrome`, Π½Π°Ρ
ΠΎΠ΄ΡΡΠ΅ΠΉΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅ ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΠΊΠΎΠ΄ΠΎΠ². Π ΠΌΠΎΡΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΏΠΎΠ»Π½ΡΠΉ ΠΏΡΡΡ Π΄ΠΎ ΡΠ°ΠΉΠ»Π° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ: `C:\OpenSource\ChromiumProjects\trunk\src\chrome\chrome.sln`. + +ΠΠ° ΡΡΠΎΠΌ ΡΠ°Π±ΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½Π½ΠΎΠΉ. + +## ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ + +Π§ΡΠΎΠ±Ρ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ°ΠΊΠ΅Ρ "depot*tools", ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π·Π°ΠΉΡΠΈ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π΄Π°Π½Π½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ, ΡΡΠ»ΠΊΠ½ΡΡΡ ΠΏΡΠ°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡΡΠΈ ΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ½ΠΎΠΌ ΠΌΠ΅Π½Ρ Π²ΡΠ±ΡΠ°ΡΡ "\_SVN Update*". "TortoiseSVN" ΠΎΠ±Π½ΠΎΠ²ΠΈΡ Π΄Π°Π½Π½ΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π΄ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΠ΅Π²ΠΈΠ·ΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ°. + +ΠΠ»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΠΊΠΎΠ΄ΠΎΠ² "Chromium", ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΡΠΊΡΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½Π°Π» "Cygwin", ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌΠΈ ΠΊΠΎΠ΄Π°ΠΌΠΈ ΠΈ Π²Π²Π΅ΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ: + +```bash +gclient sync +``` + +## ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ + +Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ, ΡΡΠΎ ΠΏΡΠΎΡΠΈΡΠ°Π»ΠΈ ΠΈ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠΏΠ°ΡΠΈΠ±ΠΎ, Π΅ΡΠ»ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ ΠΌΠΎΠ΅ΠΉ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ. Π― Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π΄ ΠΠ°ΡΠΈΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌ Ρ Π²ΠΎΠΏΡΠΎΡΠ°ΠΌΠΈ, ΡΡΠΎΡΠ½Π΅Π½ΠΈΡΠΌΠΈ ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ. + +## ΠΠΎΠ»Π΅Π·Π½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ + +- [http://dev.chromium.org/Home](http://dev.chromium.org/Home) β ΠΡΠΈΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ° "The Chromium Projects"; +- [http://dev.chromium.org/developers/how-tos/build-instructions-windows](http://dev.chromium.org/developers/how-tos/build-instructions-windows) β ΠΡΠΈΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΡΡΠ°Π½ΠΈΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Windows, ΠΏΠ΅ΡΠ΅Π΄ ΡΠ°Π±ΠΎΡΠΎΠΉ Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌΠΈ ΠΊΠΎΠ΄Π°ΠΌΠΈ; +- [http://dev.chromium.org/developers/how-tos/get-the-code](http://dev.chromium.org/developers/how-tos/get-the-code) β ΠΡΠΈΡΠΈΠ°Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ, Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ΅ ΠΈΡΡ
ΠΎΠ΄Π½ΡΡ
ΠΊΠΎΠ΄ΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡΠ° "The Chromium Projects"; +- [http://dev.chromium.org/developers/how-tos/install-depot-tools](http://dev.chromium.org/developers/how-tos/install-depot-tools) β ΠΡΠΈΡΠΈΠ°Π»ΡΠ½Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ΅ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΠΏΠ°ΠΊΠ΅ΡΠ° "depot_tools"; +- [http://dev.chromium.org/developers/how-tos/cygwin](http://dev.chromium.org/developers/how-tos/cygwin) β Π‘ΡΡΠ°Π½ΠΈΡΠ° ΠΏΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π° "Cygwin"; +- [http://groups.google.com/a/chromium.org/group/chromium-discuss/topics](http://groups.google.com/a/chromium.org/group/chromium-discuss/topics) β ΠΡΠΈΡΠΈΠ°Π»ΡΠ½Π°Ρ Π΄ΠΈΡΠΊΡΡΡΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² Π±ΡΠ°ΡΠ·Π΅ΡΠ° "Chromium"; diff --git a/src/content/blog/installing-moodle-to-fedora.md b/src/content/blog/installing-moodle-to-fedora.md new file mode 100644 index 0000000..fe42af9 --- /dev/null +++ b/src/content/blog/installing-moodle-to-fedora.md @@ -0,0 +1,23 @@ +--- +title: "Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Moodle Π² Fedora" +author: "Valentin Popov" +pubDate: "2018-07-23" +description: "Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Moodle ΠΈΠ·-Π·Π° SELinux: ΠΊΠ°ΠΊ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° Π΄ΠΎΡΡΡΠΏΠ° Π΄Π»Ρ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ Π² Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ cURL. ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΎΠ²Π΅ΡΡ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ." +--- + +ΠΠΎ Π²ΡΠ΅ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Moodle, ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΡΡΡΡ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ: + +- ΠΠ΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ ΠΏΠΎΡΠ»Π΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
; +- ΠΡΠ»ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠ½ΡΠΎΠ»ΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΏΡΠΎΡΠ²Π»ΡΡΡΡΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡΡ; +- ΠΠ΅Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅ΡΠΈ, ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ° `unexpected cURL error`. + +ΠΠ»Π°Π²Π½Π°Ρ ΠΏΡΠΈΡΠΈΠ½Π°, ΡΡΠΎ [SELinux](https://en.wikipedia.org/wiki/Security-Enhanced_Linux). Π Π΅ΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° Π΄ΠΎΡΡΡΠΏΠ°: + +```bash +# ΠΠΎΡΡΡΠΏ ΠΊ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°ΠΌ ΠΈ ΡΠ΅ΡΠΈ +/usr/sbin/setsebool -P httpd_can_network_connect true +/usr/sbin/setsebool -P httpd_enable_homedirs true +# Π‘ΠΌΠ΅Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ +/usr/bin/chcon -R -h -t httpd_sys_content_t /path/to/moodle +/usr/bin/chcon -R -h -t httpd_sys_script_rw_t /path/to/moodle_data +``` diff --git a/src/content/blog/rust-and-tl-mr3020.md b/src/content/blog/rust-and-tl-mr3020.md new file mode 100644 index 0000000..301078f --- /dev/null +++ b/src/content/blog/rust-and-tl-mr3020.md @@ -0,0 +1,172 @@ +--- +title: "ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ Rust Π½Π° TL-MR3020" +author: "Valentin Popov" +pubDate: "2023-05-01" +description: 'ΠΠ°ΠΊ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Rust Π΄Π»Ρ ΠΊΡΠΎΡΡ-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ Π½Π° TP-Link TL-MR3020 Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Fedora Linux 38 ΠΈ OpenWrt 22.03.4. Π¨Π°Π³ Π·Π° ΡΠ°Π³ΠΎΠΌ ΠΎΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ "Hello, World!" Π΄ΠΎ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΎΠ³ΠΎ TCP ΡΠ΅ΡΠ²Π΅ΡΠ°.' +--- + +ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π² ΡΡΠ°ΡΡΠ΅ Π°ΠΊΡΡΠ°Π»ΡΠ½Π° Π΄Π»Ρ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° [Fedora Linux 38](https://docs.fedoraproject.org/en-US/releases/f38/), ΠΏΡΠΎΡΠΈΠ²ΠΊΠΈ [OpenWrt 22.03.4](https://openwrt.org/releases/22.03/notes-22.03.4) ΠΈ ΡΡΡΡΠΎΠΉΡΡΠ²Π° [TP-Link TL-MR3020](https://www.tp-link.com/en/home-networking/3g-4g-router/tl-mr3020/) ΡΠ΅Π²ΠΈΠ·ΠΈΠΈ v3.20. + +ΠΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ: + +- Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ [rustup](https://rustup.rs/) ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ. +- Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΠΏΠ°ΠΊΠ΅Ρ [cross-rs](https://github.com/cross-rs/cross) Π΄Π»Ρ ΠΊΡΠΎΡΡ-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ. +- Π£ΠΏΠ°ΠΊΠΎΠ²ΡΠΈΠΊ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² [upx](https://github.com/upx/upx). +- ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΠ·Π°ΡΠΎΡ [Docker](https://docs.docker.com/engine/install/) (ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ) ΠΈΠ»ΠΈ [Podman](https://podman.io/getting-started/installation). +- SSH ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΎΡΡ. +- Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ [SFTP ΡΠ΅ΡΠ²Π΅Ρ](https://openwrt.org/docs/guide-user/services/nas/sftp.server) Π½Π° TL-MR3020. + +> Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ rustup ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Ρ ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ°. Rust ΠΈ Cargo ΠΈΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° Π½Π΅ ΠΏΠΎΠ΄ΠΎΠΉΠ΄ΡΡ. ΠΠ°ΠΊΠ΅Ρ ΠΊΡΠΎΡΡ-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ rustup, ΠΊΠΎΡΠΎΡΡΠΉ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ
Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π° ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ. + +## "Hello, World!" ver. 1 + +ΠΠ°ΡΠ½Π΅ΠΌ Ρ Π±Π°Π·Ρ. Π‘ΠΎΠ±Π΅ΡΠ΅ΠΌ ΠΈ Π·Π°ΠΏΡΡΡΠΈΠΌ "Hello, World" Π½Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΎΡΠ΅. ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡ Π½Π° Rust: + +```bash +cargo init --bin ramips-rs +``` + +ΠΠ°Π»Π΅Π΅, ΡΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΡΠΎΡΡ-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°: + +```bash +cat /proc/cpuinfo +# system type : MediaTek MT7628AN ver:1 eco:2 +# machine : TP-Link TL-MR3020 v3 +# processor : 0 +# cpu model : MIPS 24KEc V5.5 +# BogoMIPS : 385.84 +# wait instruction : yes +# microsecond timers : yes +# tlb_entries : 32 +# extra interrupt vector : yes +# hardware watchpoint : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb] +# isa : mips1 mips2 mips32r1 mips32r2 +# ASEs implemented : mips16 dsp +# Options implemented : tlb 4kex 4k_cache prefetch mcheck ejtag llsc pindexed_dcache userlocal vint perf_cntr_intr_bit perf +# shadow register sets : 1 +# kscratch registers : 0 +# package : 0 +# core : 0 +# VCED exceptions : not available +# VCEI exceptions : not available +``` + +ΠΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ MIPS. Π’Π΅ΠΏΠ΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΡΠ΅Π»Π΅Π²ΡΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ: + +```bash +rustup target list | grep mips +# mips-unknown-linux-gnu +# mips-unknown-linux-musl +# mips64-unknown-linux-gnuabi64 +# mips64-unknown-linux-muslabi64 +# mips64el-unknown-linux-gnuabi64 +# mips64el-unknown-linux-muslabi64 +# mipsel-unknown-linux-gnu +# mipsel-unknown-linux-musl +``` + +ΠΠΏΡΡΠ½ΡΠΌ ΠΏΡΡΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ, ΡΡΠΎ Π² ΡΠ»ΡΡΠ°Π΅ Ρ TL-MR3020 v3.20 ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° `mipsel-unknown-linux-musl`. ΠΠ°Π»Π΅Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΠΎΠ΄ ΡΠ΅Π»Π΅Π²ΡΡ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ: + +```bash +cross build --release --target mipsel-unknown-linux-musl +``` + +ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π½Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΎΡΠ΅. ΠΡΠ³ΡΡΠΆΠ°Π΅ΠΌ Π² ΡΠ°Π·Π΄Π΅Π» `/tmp`, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΠ΅Π½ΡΡΠ΅ Π΄Π²ΡΡ
ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ. + +```bash +scp ./target/mipsel-unknown-linux-musl/release/ramips-rs openwrt:/tmp/ +ssh openwrt /tmp/ramips-rs +# Hello, world! +``` + +## ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠ° + +ΠΠΎΡΠ»Π΅ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ Π·Π°ΠΏΡΡΠΊΠ° "Hello, World" ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π²Π΅ΡΠΈΡ **4.1 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡΠ°**. ΠΠ»Ρ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Ρ 8 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡΠ°ΠΌΠΈ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ ΡΡΠΎ ΠΊΠ°ΡΠ°ΡΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠ½ΠΎΠ³ΠΎ. + +Π£ΠΌΠ΅Π½ΡΡΠΈΠΌ ΡΠ°Π·ΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄ΠΎ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠ°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΡΡΡΠΎΠΈΠΌ release ΠΏΡΠΎΡΠΈΠ»Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΠΎΠΏΠΎΠ»Π½ΠΈΠΌ Cargo.toml ΡΠ°ΠΉΠ»: + +```toml +[profile.release] +strip = true # Π£ΠΌΠ΅Π½ΡΡΠ°Π΅Ρ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ Π΄ΠΎ 383K +lto = "fat" # Π£ΠΌΠ΅Π½ΡΡΠ°Π΅Ρ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ Π΄ΠΎ 334K +opt-level = "z" # Π£ΠΌΠ΅Π½ΡΡΠ°Π΅Ρ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ Π΄ΠΎ 326K +panic = "abort" # Π£ΠΌΠ΅Π½ΡΡΠ°Π΅Ρ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ Π΄Π° 332K +codegen-units = 1 # ΠΠΊΠ»ΡΡΠ°Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° +``` + +ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π² **332 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡΠ°**. ΠΠ°Π»Π΅Π΅ ΡΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠΌ upx: + +```bash +upx --best --lzma target/mipsel-unknown-linux-musl/release/ramips-rs +``` + +Π ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΡΠ°ΠΉΠ» ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π² **118 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ**. ΠΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. + +Π‘ΠΈΠ»ΡΠ½Π΅Π΅ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΊΠ°Π·ΠΎΠΌ ΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ std Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΊΡΡΡΠ΅ΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ unsafe ΠΏΡΠΈΠ΅ΠΌΠ°ΠΌΠΈ, ΡΡΠΎ Π½Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π² ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅. + +## "Hello, World!" ver. 2 + +Π’Π΅ΠΏΠ΅ΡΡ ΡΠ΄Π΅Π»Π°Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΡΠ΅ΡΡΠ΅Π·Π½Π΅ΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΠΉ TCP ΡΠ΅ΡΠ²Π΅Ρ. ΠΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ: + +```toml +[dependencies] +hyper = { version = "1.0.0-rc.3", features = ["full"] } +tokio = { version = "1", features = ["full"] } +http-body-util = "0.1.0-rc.2" +``` + +ΠΠΈΡΠ΅ΠΌ ΠΊΠΎΠ΄: + +```rust +use std::convert::Infallible; +use std::net::SocketAddr; + +use http_body_util::Full; +use hyper::body::Bytes; +use hyper::server::conn::http1; +use hyper::service::service_fn; +use hyper::{Request, Response}; +use tokio::net::TcpListener; + +async fn hello(_: Request<hyper::body::Incoming>) -> Result<Response<Full<Bytes>>, Infallible> { + Ok(Response::new(Full::new(Bytes::from("Hello, World!")))) +} + +#[tokio::main] +async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> { + let addr = SocketAddr::from(([0, 0, 0, 0], 3000)); + let listener = TcpListener::bind(addr).await?; + + loop { + let (stream, _) = listener.accept().await?; + + tokio::task::spawn(async move { + if let Err(err) = http1::Builder::new() + .serve_connection(stream, service_fn(hello)) + .await + { + println!("Error serving connection: {:?}", err); + } + }); + } +} +``` + +ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΠΈ ΡΠΆΠΈΠΌΠ°Π΅ΠΌ. ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ Π² **236 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ**. Π’Π΅ΠΏΠ΅ΡΡ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ Π² ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎ, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ: + +```bash +scp ./target/mipsel-unknown-linux-musl/release/ramips-rs openwrt:/tmp/ +ssh openwrt /tmp/ramips-rs + +curl -L "http://10.0.0.2:3000" +# Hello, World! +``` + +Π Π°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ ΠΈ Π·Π°Π΄ΡΠΌΠ°Π½ΠΎ. + +## ΠΠΎΠ»Π΅Π·Π½ΡΠ΅ ΡΡΡΠ»ΠΊΠΈ ΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ + +- [Building Rust code for my OpenWrt Wi-Fi router](https://blog.dend.ro/building-rust-for-routers/) +- [Cross Compile Rust For OpenWRT](https://www.kiloleaf.com/posts/cross-compile-rust-for-openwrt/) +- [Minimizing Rust Binary Size](https://github.com/johnthagen/min-sized-rust) +- [ΠΡΠΎΡΡ-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Rust Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° Π½Π° ΠΌΠ°ΡΡΡΡΡΠΈΠ·Π°ΡΠΎΡΠ΅](https://dzen.ru/media/nuancesprog.ru/krosskompiliaciia-programm-rust-dlia-zapuska-na-marshrutizatore-5f6457b8bdfa745d402cd1ec) diff --git a/src/content/config.ts b/src/content/config.ts new file mode 100644 index 0000000..00f60c9 --- /dev/null +++ b/src/content/config.ts @@ -0,0 +1,13 @@ +import { defineCollection, z } from "astro:content"; + +const blog = defineCollection({ + type: "content", + schema: z.object({ + author: z.string(), + description: z.string(), + pubDate: z.coerce.date(), + title: z.string(), + }), +}); + +export const collections = { blog }; diff --git a/src/env.d.ts b/src/env.d.ts new file mode 100644 index 0000000..e16c13c --- /dev/null +++ b/src/env.d.ts @@ -0,0 +1 @@ +/// <reference path="../.astro/types.d.ts" /> diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro new file mode 100644 index 0000000..c100dad --- /dev/null +++ b/src/layouts/BaseLayout.astro @@ -0,0 +1,27 @@ +--- + +--- + +<html> + <head> + <!-- Meta tags --> + <meta content="IE=edge" http-equiv="X-UA-Compatible" /> + <meta content="text/html; charset=utf-8" http-equiv="content-type" /> + <meta content="width=device-width, initial-scale=1" name="viewport" /> + <meta content="index, follow" name="robots" /> + + <!-- Title / Description --> + <meta content="Description" name="description" /> + <title>Title</title> + + <!-- RSS --> + <link href="#" rel="alternate" title="RSS" type="application/atom+xml" /> + + <!-- Canonical URL --> + <link href="#" rel="canonical" /> + </head> + + <body> + <slot /> + </body> +</html> diff --git a/src/layouts/PageLayout.astro b/src/layouts/PageLayout.astro new file mode 100644 index 0000000..3730334 --- /dev/null +++ b/src/layouts/PageLayout.astro @@ -0,0 +1,7 @@ +--- +import BaseLayout from "./BaseLayout.astro"; +--- + +<BaseLayout> + <slot /> +</BaseLayout> diff --git a/src/layouts/PostLayout.astro b/src/layouts/PostLayout.astro new file mode 100644 index 0000000..ed2c900 --- /dev/null +++ b/src/layouts/PostLayout.astro @@ -0,0 +1,7 @@ +--- +import BaseLayout from "../layouts/BaseLayout.astro"; +--- + +<BaseLayout> + <slot /> +</BaseLayout> diff --git a/src/pages/blog/[...slug].astro b/src/pages/blog/[...slug].astro new file mode 100644 index 0000000..c94fe52 --- /dev/null +++ b/src/pages/blog/[...slug].astro @@ -0,0 +1,20 @@ +--- +import { type CollectionEntry, getCollection } from "astro:content"; +import Layout from "../../layouts/PostLayout.astro"; + +export async function getStaticPaths() { + const posts = await getCollection("blog"); + return posts.map((post) => ({ + params: { slug: post.slug }, + props: post, + })); +} +type Props = CollectionEntry<"blog">; + +const post = Astro.props; +const { Content } = await post.render(); +--- + +<Layout> + <Content /> +</Layout> diff --git a/src/pages/index.astro b/src/pages/index.astro new file mode 100644 index 0000000..bc98c67 --- /dev/null +++ b/src/pages/index.astro @@ -0,0 +1,18 @@ +--- +import Layout from "../layouts/PageLayout.astro"; +import { getCollection } from "astro:content"; + +const posts = await getCollection("blog"); +--- + +<Layout> + <ul> + { + posts.map((post) => ( + <li> + <a href={`/blog/${post.slug}`}>{post.data.title}</a> + </li> + )) + } + </ul> +</Layout> |